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.