Intro

Le format de fichier PDF est le plus répandu dans le monde pour la représentation de document numérique. Il y a donc de fortes chances d’avoir à les manipuler lors d’un projet de développement.

Ce format étant riche en fonctionnalités, il est plus intéressant d’utiliser une bibliothèque dédiée plutôt de tout réécrire depuis le début lorsqu’on a besoin de manipuler un PDF, (extraire une partie et/ou faire une modification).

Il existe plusieurs bibliothèques facilement trouvables sur un moteur de recherche mais nous allons aujourd’hui nous concentrer plus spécifiquement sur iTextSharp.

iTextSharp est un portage en .Net de la bibliothèque iText initialement écrit pour la plateforme Java.

iText, et par extension, iTextSharp, est sous licence AGPL. Cela signifie qu’elle est gratuite sous certaines conditions dont la publication du code source. La version commerciale permet de s’affranchir de ces contraintes. Si toutefois vous ne souhaitez pas débourser un centime, il reste la possibilité d’utiliser la version 4.1.6 qui est sous licence LGPL/MPL.

Prérequis

La dll iTextSharp peut être trouvée à cette adresse : http://sourceforge.net/projects/itextsharp/

Elle utilise le .Net Framework 2.0 et sera donc utilisable avec les versions supérieures du Framework.

La bibliothèque existe aussi en tant que package Nuget

Et pour la version LGPL/MPL

Mise en pratique (comment extraire une page ? )

// Ouverture du PDF source 
using (PdfReader reader = new PdfReader(sourcePdfPath)) 
// Création du PDF de déstination 
using (FileStream fileStream = 
   new FileStream(outputPdfPath, FileMode.Create)) 
using (Document document = new Document()) 
{ 
   // On attache un object PdfWriter au document. 
   // C'est lui qui va écrire dans le format PDF. 
   PdfWriter writer = PdfWriter.GetInstance(document, fileStream); 
   document.AddDocListener(writer); 
   document.Open(); 
   // Attention, l'index de la première page commence  
   // à partir de 1 au lieu de 0, contrairement à ce 
   // qui se fait habituellement en informatique. 
   int pageIndex = 1; 
   // Verification de l'existance de la page 
   if (reader.NumberOfPages >= pageIndex) 
   { 
   // Création de la page sur le nouveau 
   document.SetPageSize(reader.GetPageSize(pageIndex)); 
   document.NewPage(); 
   // Lecture du contenu de la page source 
   PdfContentByte cb = writer.DirectContent; 
   PdfImportedPage pageImport = 
   writer.GetImportedPage(reader, pageIndex); 
   // Prise en compte des pages en mode paysage 
   int rot = reader.GetPageRotation(pageIndex); 
   if (rot == 90 || rot == 270) 
   { 
   cb.AddTemplate( 
   pageImport, 
   0, -1.0F, 1.0F, 0, 0, 
   reader.GetPageSizeWithRotation(pageIndex).Height); 
   } 
   else 
   { 
   cb.AddTemplate(pageImport, 1.0F, 0, 0, 1.0F, 0, 0); 
   } 
   } 
}

Conclusion

Cet exemple nous a permis de nous initier à l’utilisation de la bibliothèque iTexSharp qui est par ailleurs, très riche en possibilités diverses et variées pour la manipulation de PDF.

Ne ratez plus aucune actualité avec la newsletter mensuelle de SoftFluent

Newsletter SoftFluent