Cette page peut contenir du texte traduit automatiquement.
Modifier les PDF en C#
Utilisez Docotic.Pdf pour modifier vos documents PDF. C'est la bibliothèque d'édition de PDF pour C# et VB.NET qui combine des fonctionnalités puissantes avec une API intuitive.
Docotic.Pdf fournit de nombreux moyens de modifier des documents PDF. Voici quelques-unes des principales fonctionnalités de la bibliothèque pour l'édition de PDF :
- Combiner plusieurs PDF en un seul ou scinder un seul PDF en plusieurs fichiers.
- Réduire la taille d'un fichier PDF.
- Réorganiser, supprimer, faire pivoter ou extraire des pages.
- Lire, modifier ou supprimer les métadonnées PDF.
- Signer un PDF avec des signatures numériques.
- Chiffrer des documents ou supprimer des mots de passe d'un PDF.
- Ajouter, modifier ou supprimer des annotations et des pièces jointes.
- Remplir des AcroForms, ajouter ou supprimer des contrôles de formulaire.
- Aplatir les champs de formulaire et les annotations pour les intégrer au contenu du PDF.
- Ajouter, supprimer ou remplacer du texte dans le PDF.
- Insérer, remplacer et redimensionner des images.
- Ajouter des filigranes et des arrière-plans.
- Convertir des documents numérisés en texte modifiable et consultable.
Dans les sections suivantes, je décrirai les fonctionnalités d'édition de PDF plus en détail. Les sections contiennent également des extraits de code et des liens vers des ressources pertinentes.
Fusionner et scinder des PDF
Cette section traite de deux fonctionnalités aux objectifs opposés.

Fusionner des PDF
Lorsque vous regroupez des fichiers PDF, vous créez un document PDF unique. Le PDF fusionné contient généralement des informations liées provenant de plusieurs fichiers PDF existants.
Voici un extrait de code qui montre comment fusionner des fichiers PDF à l'aide de Docotic.Pdf.
using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.Save("merged.pdf");
Le code est très simple, car il montre le cas le plus basique. Nous avons un article qui décrit des cas de fusion plus complexes. Par exemple, il montre comment fusionner des documents chiffrés.
Scinder un PDF
Scinder signifie extraire des pages sélectionnées du PDF d'origine pour créer un ou plusieurs nouveaux fichiers PDF. Ce processus est utile lorsque vous souhaitez partager seulement une partie d'un document.
L'extrait de code suivant montre comment créer un nouveau document à partir de chaque page d'un PDF.
using var pdf = new PdfDocument("compound.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
using PdfDocument copy = pdf.CopyPages(i, 1);
// Aide à réduire la taille du fichier lorsque les pages copiées référencent
// des ressources inutilisées comme des polices, des images, des motifs.
copy.RemoveUnusedResources();
copy.Save(i + ".pdf");
}
Lisez l'article dédié pour en savoir plus sur l'implémentation d'un séparateur de PDF et sur d'autres approches.
Compression PDF
Il existe deux approches principales pour compresser un PDF. La première consiste à n'appliquer que des opérations qui ne modifient pas le contenu du fichier, seulement sa forme. La seconde inclut également des modifications qui peuvent entraîner une perte de détails ou de qualité du document afin d'obtenir une meilleure compression.
Compression PDF sans perte
Par défaut, la bibliothèque enregistre les objets PDF de manière à ce qu'ils occupent moins d'octets. Pour cela, elle exclut les objets inutilisés, écrit les objets sans mise en forme et utilise une forme plus courte lorsque c'est possible.
Pour améliorer encore la compression, Docotic.Pdf produit également des flux d'objets dans les PDF de sortie. Il s'agit d'une autre forme d'écriture des objets avec la représentation la plus compacte. Les flux d'objets sont compressés avec l'algorithme Flate.
Vous pouvez influencer la manière dont la bibliothèque enregistre les objets en utilisant les options d'enregistrement.
Certains documents contiennent des polices, des images, des profils colorimétriques et d'autres objets en double. C'est généralement le cas des documents mis à jour par incréments et des fichiers créés en fusionnant plusieurs documents. La déduplication de ces objets à l'aide de la méthode PdfDocument.ReplaceDuplicateObjects peut réduire considérablement la taille de sortie.
Les pages d'un document peuvent référencer des ressources inutilisées. Par exemple, des images qui étaient auparavant visibles sur la page mais qui ne le sont plus. Utilisez la méthode PdfDocument.RemoveUnusedResources pour supprimer ces ressources.
Toutes ces opérations sur le PDF réduisent la taille du fichier sans perte de qualité.
Transformations avec perte
Pour les fichiers contenant des images, l'une des méthodes les plus efficaces pour réduire la taille d'un PDF consiste à modifier le schéma de compression des images. Par exemple, l'utilisation d'une compression avec perte comme JPEG sur les images réduira la taille. En contrepartie, des artefacts de compression et une perte de détails peuvent être visibles sur les images.
Si les images du PDF sont plus grandes que nécessaire, vous pouvez les redimensionner. Cela peut offrir une compression encore meilleure. Une autre option consiste à convertir les images en noir et blanc (bitonal).
Vous pouvez aplatir les champs de formulaire et les annotations pour économiser un peu d'espace. Cela a du sens lorsque vous n'avez plus besoin d'annotations ni de champs de formulaire modifiables dans vos documents.
Les polices peuvent occuper beaucoup d'espace dans les documents. La méthode PdfDocument.RemoveUnusedFontGlyphs peut supprimer les glyphes inutilisés des polices afin d'optimiser la taille de sortie. La sous-configuration des polices est un autre nom pour ce processus. Vous pouvez même supprimer complètement les octets de police du document (supprimer l'incorporation de la police). Cela peut avoir du sens lorsque le document contient les octets d'une police courante comme Arial.
D'autres transformations suppriment directement des informations des documents. Vous pouvez supprimer les métadonnées, les informations de structure et les données privées de l'application. Ces données ne sont pas visibles, mais supprimez-les uniquement si elles ne sont pas importantes pour les utilisateurs de vos documents.
Pour en savoir plus et voir des exemples de code, lisez l'article sur la réduction de la taille d'un fichier PDF.
Réorganiser les pages dans un PDF
Il existe de nombreuses raisons de modifier l'ordre des pages dans un PDF. Par exemple, vous pouvez avoir besoin de regrouper des informations liées, ou d'améliorer la lisibilité du document en assurant une progression logique.

En plus de la possibilité de fusionner et scinder des pages, Docotic.Pdf fournit un ensemble étendu d'autres méthodes pour réorganiser les pages d'un PDF. J'utiliserai des extraits de code C# et l'API Docotic.Pdf pour montrer comment organiser les pages PDF.
Vous pouvez trouver des projets de test complets pour les exemples de cette section dans le groupe Pages et navigation des exemples de code. J'utilise ten-pages.pdf dans les extraits. Il s'agit d'un document de test trivial avec un titre Page N sur chaque page.
Déplacer des pages PDF
L'extrait suivant montre comment déplacer des plages continues de pages. Le code déplace la première moitié des pages à la fin du document.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.MovePages(0, 5, pdf.PageCount);
pdf.Save("continuous-move.pdf");
Il est possible de déplacer des ensembles arbitraires de pages. Le code suivant déplace les pages impaires à la fin du document.
using var pdf = new PdfDocument("ten-pages.pdf");
int[] indexes = [0, 2, 4, 6, 8];
pdf.MovePages(indexes, pdf.PageCount);
pdf.Save("arbitrary-move.pdf");
Pour déplacer une seule page, utilisez la méthode PdfDocument.MovePage.
Permuter des pages PDF
Pour échanger deux pages, utilisez un code comme dans l'extrait suivant.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.SwapPages(9, 0);
pdf.SwapPages(8, 1);
pdf.Save("swapped.pdf");
La méthode PdfDocument.SwapPages accepte les index des deux pages qui doivent prendre la place l'une de l'autre. Lorsque le nombre de pages n'est pas égal à deux, utilisez l'une des méthodes de déplacement de pages.
Ajouter et insérer des pages
Tout PdfDocument contient au moins une page. Lorsque vous créez un nouveau document, la bibliothèque ajoute implicitement une page.
Voici comment insérer une page vierge dans un PDF à l'aide de l'API Docotic.Pdf. Vous pouvez insérer des pages à des positions dont les index vont de 0 à PageCount inclus.
using var pdf = new PdfDocument();
var newPage = pdf.InsertPage(0);
newPage.Canvas.DrawString("This is the new first page");
pdf.Save("two-pages.pdf");
Pour ajouter une page vierge à un PDF, utilisez la méthode PdfDocument.AddPage. Cette méthode ajoute une nouvelle page à la fin du document. Elle fait la même chose qu'un appel pdf.InsertPage(pdf.PageCount).
Pour ajouter ou insérer des pages à partir d'un autre document, utilisez une combinaison d'appels comme décrit dans la section Préfixer un PDF. Vous pouvez utiliser cette combinaison d'appels pour ajouter une page de couverture à un PDF.
Dupliquer des pages PDF
Avec l'API de la bibliothèque, vous pouvez effectuer l'opération de duplication en deux opérations consécutives. La première est l'opération de copie des pages. Voir l'exemple de code dans la section Scinder un PDF.
La seconde est l'opération de collage des pages. Pour cette opération, utilisez la méthode PdfDocument.Append. Ensuite, déplacez les pages ajoutées vers la position requise.
Extraire des pages
L'extrait suivant montre comment extraire des pages d'un PDF. Il extrait les trois premières pages du document source.
using var pdf = new PdfDocument("ten-pages.pdf");
using (var extracted = pdf.ExtractPages(0, 3))
{
extracted.RemoveUnusedResources();
extracted.Save("three-pages.pdf");
}
pdf.Save("seven-pages.pdf");
La méthode ExtractPages supprime des pages du document. De ce fait, il ne reste que sept pages dans le document source. La bibliothèque n'autorise pas l'extraction de pages d'un document qui ne contient qu'une seule page.
Nous recommandons de supprimer les ressources inutilisées du document contenant les pages extraites.
Supprimer une page d'un PDF
Consultez l'extrait qui montre comment supprimer une page dans un document PDF. Il supprime en réalité deux pages en utilisant différents surcharges de la méthode RemovePage. La première surcharge accepte un index de page comme paramètre. La seconde surcharge accepte un objet page.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.RemovePage(0);
pdf.RemovePage(pdf.Pages[0]);
pdf.Save("without-first-two-pages.pdf");
Pour supprimer plus d'une page à la fois, utilisez la méthode PdfDocument.RemovePages. Ces surcharges de méthode fonctionnent avec des tableaux d'index de pages ou d'objets page.
Signatures numériques
Docotic.Pdf implémente de nombreuses opérations pour les signatures numériques dans les PDF et peut vous aider à maintenir la fiabilité et la validité juridique de vos documents PDF. Voici quelques exemples de ce que la bibliothèque peut faire :
Signer un PDF avec un certificat. L'ajout de signatures numériques dans un PDF permet de confirmer l'identité du signataire et de garantir que personne n'a modifié le document après la signature.
Certifier une signature. Pour ajouter des restrictions supplémentaires à un PDF, vous pouvez le signer avec une signature de certification. Vous pouvez verrouiller complètement le PDF après la signature ou autoriser quelques types de modifications.
Vérifier une signature dans un PDF. Vérifiez la validité d'une signature numérique pour confirmer que la partie signée du document n'a pas changé.
Autoriser plusieurs signatures. Les contrats, accords et formulaires nécessitent souvent que plusieurs parties signent un même document. L'ajout de plusieurs signatures à un PDF exige que le document soit enregistré par incréments.
Incorporer l'horodatage de la signature. Il est possible de spécifier l'URL d'une autorité d'horodatage et, éventuellement, ses identifiants dans les options de signature. La bibliothèque incorporera l'horodatage reçu dans la signature.
Incorporer le certificat. La bibliothèque incorpore automatiquement les certificats de signature dans les signatures numériques.
La page Signatures numériques contient des exemples de code et plus d'informations sur chaque opération.
Protéger un PDF
Il existe trois fonctionnalités que vous pouvez utiliser pour garantir la sécurité d'un PDF. Docotic.Pdf peut les utiliser dans les deux sens : la bibliothèque peut protéger un PDF et déverrouiller un PDF sécurisé.

Protection par mot de passe
Cette fonctionnalité vous permet de définir un mot de passe pour restreindre l'accès au PDF. Selon le type de mot de passe, le PDF exigera le mot de passe correct pour ouvrir ou modifier le document.
Il existe deux types de mots de passe dans les PDF :
- Mot de passe d'ouverture (mot de passe utilisateur). Ce type de mot de passe est nécessaire pour ouvrir et afficher le PDF. Sans le bon mot de passe, une visionneuse PDF conforme n'ouvrira pas le document.
- Mot de passe des autorisations (mot de passe du propriétaire). Ce mot de passe est nécessaire pour supprimer les autorisations d'un PDF. L'ouverture d'un PDF avec le mot de passe du propriétaire autorise toutes les actions, même si les autorisations restreignent certaines actions, comme l'impression, la copie ou la modification du PDF.
Vous pouvez définir les deux mots de passe pour un même document PDF. Lisez l'article sur le déchiffrement des fichiers PDF pour savoir comment supprimer des mots de passe des documents PDF.
Chiffrement
Le chiffrement PDF et les mots de passe PDF fonctionnent ensemble pour garantir que les informations sensibles contenues dans le PDF ne sont accessibles qu'aux utilisateurs légitimes. Seuls les utilisateurs disposant de la clé de déchiffrement ou du mot de passe correct peuvent afficher le contenu.
Docotic.Pdf peut chiffrer les fichiers PDF à l'aide des algorithmes RC4 40 bits, RC4 128 bits, AES 128 bits et AES 256 bits.
Autorisations et restrictions
Vous pouvez définir diverses autorisations sur un PDF, comme restreindre l'impression, la copie de texte, la modification du document, et plus encore. Les autorisations n'affectent l'expérience que lorsque quelqu'un ouvre le PDF avec le mot de passe utilisateur. Les restrictions ne s'appliquent pas à ceux qui ouvrent le PDF avec le mot de passe du propriétaire.
Pour supprimer les autorisations d'un PDF, vous devez d'abord supprimer le mot de passe de sécurité du PDF. Lisez comment procéder à l'aide de C# et de l'API Docotic.Pdf.
Pour savoir comment garantir l'intégrité du PDF en plus de la sécurité PDF, lisez la section sur les signatures numériques.
Métadonnées dans un PDF
Les métadonnées PDF sont des informations intégrées dans un fichier PDF qui fournissent des détails sur le document. Il existe deux sources principales de métadonnées : les propriétés du document PDF et les métadonnées XMP.
Les propriétés du document sont également appelées couramment dictionnaire d'informations du document, informations de fichier, champs de métadonnées, attributs du document et attributs de fichier.
Les métadonnées XMP (Extensible Metadata Platform) sont essentiellement un fichier XML intégré dans un PDF. XMP utilise un modèle de données flexible capable de stocker n'importe quel ensemble de propriétés de métadonnées. Ces métadonnées utilisent des espaces de noms pour regrouper les propriétés associées. Parmi les espaces de noms courants figurent XMP Core/XMP Basic et Dublin Core.
Docotic.Pdf prend entièrement en charge les métadonnées XMP et les propriétés du document. Veuillez noter que la norme PDF 2.0 a marqué la plupart des propriétés du dictionnaire d'informations du document comme obsolètes. Les seules exceptions sont la date de création et la date de modification.
Vous pouvez trouver des projets de test complets pour les exemples de cette section dans le groupe Métadonnées des exemples de code.
Propriétés du document
Voyez comment modifier les propriétés du document avec Docotic.Pdf.
using var pdf = new PdfDocument("file.pdf");
pdf.Info.Author = "An example code";
pdf.Info.Subject = "Showing how to access and change document metadata";
pdf.Info.Title = "Custom title goes here";
pdf.Info.Keywords = "pdf Docotic.Pdf";
pdf.Save("updated-file.pdf");
Vous pouvez modifier la valeur de chaque propriété, mais veuillez noter que, par défaut, la bibliothèque met automatiquement à jour certaines propriétés avant d'enregistrer le PDF. Vous pouvez modifier cela dans les options d'enregistrement.
Pour supprimer toutes les métadonnées spécifiées dans les propriétés du document, utilisez la méthode PdfInfo.Clear. La méthode peut aussi supprimer uniquement les propriétés personnalisées, si vous le souhaitez.
Métadonnées XMP
Cet extrait montre comment modifier les propriétés des métadonnées XMP dans un document PDF.
using var pdf = new PdfDocument("file.pdf");
pdf.Metadata.DublinCore.Creators = new XmpArray(XmpArrayType.Ordered);
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("me"));
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("Docotic.Pdf"));
pdf.Metadata.DublinCore.Format = new XmpString("application/pdf");
pdf.Metadata.Pdf.Producer = new XmpString("me too!");
pdf.Save("updated-file.pdf");
Le code modifie des propriétés dans les schémas Dublin Core et Adobe PDF. Veuillez noter que la propriété Producer est écrasée en raison des options d'enregistrement par défaut.
Vous pouvez extraire les métadonnées XMP brutes à l'aide de l'une des méthodes XmpMetatada.Save. La méthode produira un XML contenant toutes les propriétés.
Pour supprimer toutes les métadonnées XMP d'un document, utilisez la méthode XmpMetadata.Unembed.
Synchroniser les métadonnées
Il est souhaitable de s'assurer que les métadonnées XMP et les propriétés Document Info ont les mêmes valeurs pour les propriétés correspondantes. Cela est particulièrement vrai si vous modifiez les deux sources de métadonnées dans le même fichier.
Utilisez la méthode PdfDocument.SyncMetadata pour synchroniser les valeurs des métadonnées XMP et de Document Info. Lorsqu'une propriété a changé dans les deux sources, la méthode écrasera une source avec la valeur de l'autre source. Lisez la documentation de la méthode pour plus de détails.
Signets PDF
Un document PDF peut contenir des raccourcis ou liens spéciaux qui aident les lecteurs à accéder rapidement à des sections ou pages spécifiques. Le plan PDF est un autre nom pour les signets.

Les applications de lecture affichent généralement les signets comme une table des matières dans un livre, mais de manière interactive. Lorsque le lecteur clique sur un signet, l'application de lecture passe à la partie désignée du document. Un comportement similaire peut être obtenu à l'aide des annotations de lien.
Voici un extrait de code C# qui montre comment ajouter des signets à un PDF :
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
root.AddChild("Fifth page", 4);
root.AddChild("Seventh page", pdf.Pages[6]);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("simple-bookmarks.pdf");
Le plan PDF peut avoir des signets principaux et des sous-signets, ce qui facilite la structuration de grands documents. Voici comment créer des sous-signets dans un PDF :
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
var evenPages = root.AddChild("Even pages");
evenPages.AddChild("Second page", 1);
evenPages.AddChild("Fourth page", 3);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("even-pages-bookmarks.pdf");
Vous pouvez appliquer des polices et des couleurs aux éléments de signet. Consultez l'exemple complet pour créer un plan avec styles.
Pour supprimer un signet d'un PDF, utilisez les méthodes RemoveChild ou RemoveChildAt. Vous pouvez supprimer tous les signets en appelant la méthode RemoveAllChildren sur le nœud racine.
Pièces jointes
Les pièces jointes PDF sont des fichiers externes intégrés dans un document PDF. On les appelle aussi couramment fichiers incorporés et pièces jointes de fichier. Vous pouvez joindre n'importe quel fichier : image, fichier audio/vidéo, autre PDF, document Word, feuilles Excel ou tout autre fichier.
Si vous souhaitez joindre des PDF entre eux pour créer un fichier PDF combiné, consultez l'article sur la fusion de documents PDF.
Voici le code C# qui montre comment ajouter une pièce jointe à un PDF à l'aide de l'API Docotic.Pdf.
using var pdf = new PdfDocument();
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.SharedAttachments.Add(excelFile);
pdf.Save("shared-attachment.pdf");
Le code ci-dessus a ajouté le fichier en tant que pièce jointe partagée. Les lecteurs peuvent trouver le fichier joint dans le panneau Pièces jointes de leur visionneuse.
Il est également possible d'ajouter des pièces jointes aux pages PDF. Ces pièces jointes sont visibles dans le contenu de la page comme n'importe quelles autres annotations.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
page.Canvas.DrawString(20, 100, "Here is this year's figures document:");
var bounds = PdfRectangle.FromLTRB(155, 100, 165, 110);
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.Pages[0].AddFileAnnotation(bounds, excelFile);
pdf.Save("page-attachment.pdf");
Consultez le groupe Pièces jointes des exemples de code pour trouver des projets de test complets pour les exemples de cette section.
Pour supprimer des pièces jointes d'un PDF, vous devrez énumérer à la fois les pièces jointes partagées et les annotations de page, puis supprimer les éléments dont vous n'avez pas besoin. Voir l'exemple ci-dessous pour le code d'énumération. Pour supprimer toutes les annotations partagées, vous pouvez utiliser un appel pdf.SharedAttachments.Clear().
Vous devrez également énumérer les collections pour extraire les fichiers incorporés d'un PDF. Voici un exemple de code :
using var pdf = new PdfDocument("file-with-attachments.pdf");
int i = 0;
foreach (var attachment in pdf.SharedAttachments)
{
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
foreach (var widget in pdf.GetWidgets())
{
var attachment = (widget as PdfFileAttachmentAnnotation)?.File;
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
Étiquettes de page
Les étiquettes de page PDF sont des noms ou numéros personnalisés attribués aux pages d'un document PDF. Contrairement aux numéros de page standards, les étiquettes de page peuvent inclure un mélange de lettres, de chiffres et même de chiffres romains. D'autres noms pour les étiquettes de page sont identifiants de page et noms de page.
Voici comment ajouter des étiquettes de page à un PDF à l'aide de Docotic.Pdf :
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.PageLabels.AddRange(0, 3, PdfPageNumberingStyle.LowercaseRoman);
pdf.PageLabels.AddRange(4, PdfPageNumberingStyle.DecimalArabic, string.Empty, 5);
pdf.PageLabels.AddRange(7, PdfPageNumberingStyle.DecimalArabic, "Appendix page ", 1);
pdf.Save("page-labels.pdf");
Les quatre premières pages auront les étiquettes i, ii, iii et iv. Les trois étiquettes suivantes sont 5, 6 et 7. Pour les pages restantes, les étiquettes seront Appendix page 1, Appendix page 2 et Appendix page 3.
OCR PDF
Certains documents PDF contiennent des pages numérisées et nécessitent une reconnaissance optique de caractères (OCR) avant que vous puissiez en extraire du texte. Un autre cas d'utilisation de l'OCR consiste à extraire du texte d'un PDF qui utilise un mappage personnalisé des glyphes vers Unicode.

Nous avons un article de blog qui montre comment effectuer l'OCR de documents numérisés. L'article contient un exemple de PDF non consultable et montre comment utiliser Tesseract OCR, du code C# et Docotic.Pdf pour reconnaître du texte dans des PDF contenant uniquement des images. Vous pouvez également ajouter une couche de texte OCR aux fichiers PDF numérisés à l'aide de Docotic.Pdf.
Modifier des pages
Cette section traite des modifications apportées à des pages PDF existantes, comme :
- comment faire pivoter des pages PDF
- comment changer la taille d'une page
- utiliser des graphiques vectoriels sur le canevas de la page
- ajouter du contenu HTML
Lisez la section Layout API de la bibliothèque pour savoir comment créer des documents PDF à partir d'éléments de base comme l'en-tête et le pied de page, les tableaux, les images, les paragraphes de texte, etc.
Consultez les autres sections pour des informations sur :
- comment modifier du texte dans des PDF
- les opérations sur les images
- le filigrane PDF
- comment annoter un PDF
- comment remplir des formulaires PDF
Faire pivoter des pages
Voir l'extrait de code C# pour savoir comment faire pivoter une seule page dans un PDF :
using var pdf = new PdfDocument("existing.pdf");
pdf.Pages[0].Rotation = PdfRotation.Rotate180;
pdf.Save("rotated.pdf");
Le code fait pivoter la première page de 180 degrés. Vous pouvez également faire pivoter des pages PDF de 0, 90 et 270 degrés.
Modifier la taille de la page
Docotic.Pdf fournit plus d'une manière de modifier la taille de page d'un PDF. Dans le cas le plus simple, vous pouvez utiliser les propriétés Width et Height d'un objet PdfPage pour spécifier la taille souhaitée. Pour un document existant, cela ne redimensionnera pas le contenu des pages du document. Et cela ne supprimera aucun contenu. Cela masquera simplement tout le contenu de la page qui se trouve en dehors du rectangle de la taille spécifiée.
Une approche similaire consiste à rogner les pages. Vous pouvez modifier la CropBox d'une page avec un code C# comme celui-ci :
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var cropBoxBefore = page.CropBox;
page.CropBox = new PdfBox(0, cropBoxBefore.Height - 256, 256, cropBoxBefore.Height);
pdf.Save("cropped.pdf");
La modification de la boîte de rognage est la bonne approche si vous souhaitez enregistrer une partie de la page comme image.
Si l'objectif est de conserver tout le contenu visible sur une page de taille différente, utilisez alors l'approche par mise à l'échelle. Dans l'extrait de code suivant, je crée un XObject à partir d'une page. Le XObject est comme une image vectorielle. Vous pouvez dessiner le même objet sur plusieurs pages en le mettant à l'échelle et en le faisant pivoter selon les besoins.
Une fois le XObject prêt, j'efface le contenu précédent de la page, je redimensionne la page, puis je dessine l'objet sur la page redimensionnée.
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var pageXObject = pdf.CreateXObject(page);
page.Canvas.Clear();
page.Width /= 2;
page.Height /= 2;
page.Canvas.DrawXObject(pageXObject, 0, 0, page.Width, page.Height, 0);
pdf.Save("resized.pdf");
Graphiques vectoriels
La bibliothèque Docotic.Pdf peut ajouter des graphiques vectoriels comme des lignes, des courbes et des formes aux documents PDF. Vous pouvez construire des tracés graphiques à partir d'objets graphiques. Ensuite, vous pouvez remplir ou tracer les tracés à l'aide de couleurs provenant de différents espaces colorimétriques.
Trouvez un exemple de code pour les fonctionnalités liées aux graphiques dans le groupe Graphiques des exemples de code.
Il est également possible d'extraire des graphiques d'un PDF. Commencez par appeler la méthode GetObjects, puis extrayez les informations des objets de type PdfPageObjectType.Path. N'oubliez pas que les XObjects peuvent aussi contenir des tracés imbriqués.
using var pdf = new PdfDocument("existing.pdf");
var options = new PdfObjectExtractionOptions();
var objects = pdf.Pages[0].GetObjects(options);
foreach (var obj in objects)
{
if (obj.Type == PdfPageObjectType.Path)
{
var path = (PdfPath)obj;
Console.WriteLine($"Found path {path}");
}
else if (obj.Type == PdfPageObjectType.XObject)
{
var paintedXObject = (PdfPaintedXObject)obj;
var nestedObjects = paintedXObject.XObject.GetObjects(options);
// ...
}
}
Ajouter du HTML aux pages PDF
Superposer du contenu HTML sur un document PDF peut être utile pour ajouter des éléments dynamiques comme des graphiques ou un ticker de cours boursier à vos PDF.
Lisez comment insérer du HTML dans un PDF pour obtenir plus de détails et télécharger un exemple de code.
Modifier le texte PDF
Cette section explique comment modifier le texte dans un PDF, comment changer la couleur du texte dans un PDF et comment ajouter du nouveau texte.

Nous avons un article consacré à l'extraction de texte à partir d'un PDF. Consultez-le pour plus d'informations sur le sujet.
L'aplatissement du texte est également possible à l'aide de Docotic.Pdf.
Rechercher et remplacer
Pour modifier du texte dans un PDF, vous devrez trouver la zone qui contient le texte, puis supprimer le texte dans cette zone. La dernière étape consiste à ajouter le nouveau texte dans la même zone du document.
La recherche dans les PDF peut être délicate, car en interne le document peut contenir des mots dans n'importe quel ordre. Le texte peut aussi être pivoté. Heureusement, nous avons un exemple de code qui montre comment rechercher des mots ou des expressions dans un PDF.
Lorsque vous avez les coordonnées du texte à supprimer, il est temps de modifier le contenu de la page concernée. La bibliothèque fournit des moyens d'énumérer et de copier les objets de page. Il est donc possible d'omettre certains textes tout en copiant les objets. Cela supprimera essentiellement le texte. Le code de l'exemple modifier le contenu d'une page PDF montre tous les détails du processus. Vous devrez mettre à jour la méthode ShouldRemoveText pour utiliser les coordonnées trouvées.
Lisez la section suivante pour voir comment ajouter le nouveau texte au document.
Si vous créez des documents avec un texte indicatif et remplacez ensuite cet espace réservé par un autre texte, vous pouvez utiliser des zones de texte à la place.
L'idée est d'ajouter au document une zone de texte en lecture seule sans bordures et d'y placer le texte indicatif. Plus tard, vous pouvez ouvrir le document, trouver la zone de texte par son nom et remplacer l'espace réservé par un simple appel box.Text = "new text";. Aplatissez la zone de texte après le remplacement si vous ne voulez plus de modifications ultérieures.
Ajouter du texte
Pour ajouter du texte aux documents, utilisez les méthodes DrawString et DrawText d'un objet PdfCanvas. Les méthodes utilisent la police actuelle du canevas. La police doit contenir des glyphes pour tous les caractères du texte. Utilisez la méthode PdfFont.ContainsGlyphsForText pour vérifier si la police satisfait à cette exigence.
var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.CreateFont("NSimSun");
canvas.DrawString(10, 50, "Olá. 你好. Hello. This is some new text");
Vous pouvez ajouter du texte Unicode dessiné avec des polices Type1, TrueType et OpenType. La bibliothèque peut utiliser des polices installées sur votre système, 14 polices Type1 intégrées, ou charger une police requise à partir d'un fichier.
Modifier la couleur du texte
Pour modifier la couleur du texte dans un PDF, utilisez la même approche que pour supprimer du texte. Vous devrez au minimum modifier la méthode ReplaceColor dans l'exemple de code.
Images
Docotic.Pdf fournit tout ce qui est nécessaire pour modifier des images PDF. Vous trouverez ci-dessous des extraits de code C# pour les opérations les plus courantes.
Le groupe Images des exemples de code contient des projets de test complets pour les exemples de cette section.
Ajouter une image au PDF
La bibliothèque peut importer des images aux formats GIF/TIFF/PNG/BMP/JPEG. Vous pouvez également ajouter une image à partir d'un objet System.Drawing.Image.
var canvas = pdf.Pages[0].Canvas;
var image = pdf.CreateImage("image.jpg");
canvas.DrawImage(image, 10, 50);
Vous pouvez spécifier un angle de rotation et une taille de sortie à l'aide des surcharges de la méthode DrawImage. Pour dessiner la même image sur plusieurs pages, ajoutez l'image une seule fois et utilisez le même objet PdfImage dans plusieurs appels à la méthode DrawImage.
Combiner des images dans un PDF
Voici le code C# qui montre comment combiner plusieurs images en un seul PDF.
using var pdf = new PdfDocument();
var imagePaths = new string[] { "image.jpg", "another-image.png" };
foreach (var path in imagePaths)
{
var image = pdf.CreateImage(path);
var page = pdf.AddPage();
page.Width = image.Width;
page.Height = image.Height;
page.Canvas.DrawImage(image, 0, 0);
}
pdf.RemovePage(0);
pdf.Save("combined-images.pdf");
Le code ajoute plusieurs images à un PDF en adaptant la taille de chaque page à la taille de l'image correspondante. Avant d'enregistrer le résultat, le code supprime la première page vide ajoutée implicitement.
Extraire des images PDF
Nous avons conçu Docotic.Pdf pour extraire des images de fichiers PDF sans compromettre leur qualité. La bibliothèque ne modifie ni la taille ni la compression des images. Vous obtiendrez des images de la même qualité que dans le PDF.
using var pdf = new PdfDocument("file-with-images.pdf");
int i = 0;
foreach (PdfImage image in pdf.GetImages())
{
var path = image.Save($"image{i++}");
Console.WriteLine($"Saved to {path}");
}
Supprimer et remplacer des images
Utilisez la méthode PdfPage.RemovePaintedImages pour supprimer toutes les images ou des images spécifiques d'une page PDF. Vous pouvez filtrer les images par position, taille, transformation ou d'autres paramètres.
using var pdf = new PdfDocument("file-with-images.pdf");
pdf.Pages[0].RemovePaintedImages(
image =>
{
return image.Size.Width > 100;
}
);
pdf.RemoveUnusedResources();
pdf.Save("no-wide-images.pdf");
Le code C# ci-dessus montre comment supprimer des images à l'aide de Docotic.Pdf. Je recommande de supprimer les ressources inutilisées après avoir modifié ou supprimé des images.
Utilisez la méthode PdfImage.ReplaceWith pour remplacer toutes les occurrences de l'image dans le document PDF.
using var pdf = new PdfDocument("file-with-images.pdf");
var firstImage = pdf.GetImages(false).FirstOrDefault()
?? throw new ArgumentException("No images found");
firstImage.ReplaceWith("another-image.png");
pdf.RemoveUnusedResources();
pdf.Save("replaced-image.pdf");
Modifier le schéma de compression
Docotic.Pdf fournit des méthodes pour modifier la compression des images PDF. Il est possible de réencoder les images à l'aide des algorithmes de compression JPEG, CCITT Group 3 et 4 (fax), JPEG 2000 et zip/deflate.
Selon la compression initiale et la nouvelle compression, la modification peut entraîner une perte de détails ou de qualité de l'image. Mais les conversions avec perte aident généralement à réduire la taille du document.
firstImage.RecompressWithJpeg2000(25);
Il existe d'autres méthodes pour réencoder une image. Consultez les méthodes PdfImage dont le nom commence par RecompressWith. Vous pouvez supprimer toute compression d'une image à l'aide de la méthode Uncompress.
Redimensionner les images
Si certaines images d'un document PDF sont plus grandes que nécessaire, la bibliothèque peut les redimensionner ou les réduire pour vous.
firstImage.Scale(0.5, PdfImageCompression.Jpeg2000, 25);
Le code ci-dessus rend la première image deux fois plus petite dans les deux directions. La bibliothèque utilise la compression JPEG 2000 pour l'image résultante.
Vous pouvez utiliser l'une des méthodes ResizeTo pour spécifier des valeurs exactes pour la largeur et la hauteur résultantes.
Le redimensionnement des images réduit généralement la taille du fichier PDF encore plus que la modification de leur compression (voir la section ci-dessus), mais c'est un processus avec perte.
Filigranes et arrière-plans

L'ajout d'un filigrane à un PDF implique ces étapes :
- Créer un XObject, le conteneur du contenu du filigrane
- Remplir l'objet avec du texte, des images et des graphismes vectoriels
- Apposer l'objet sur les pages PDF
Voici le code C# qui ajoute le filigrane Confidential à un PDF :
using var pdf = new PdfDocument("existing.pdf");
var watermark = pdf.CreateXObject();
watermark.DrawOnBackground = true;
var canvas = watermark.Canvas;
canvas.FontSize = 72;
canvas.Brush.Color = new PdfRgbColor(222, 35, 35);
canvas.Brush.Opacity = 45;
canvas.Pen.Color = canvas.Brush.Color;
canvas.Pen.Opacity = canvas.Brush.Opacity;
canvas.Pen.Width = 5;
var padding = 10;
var text = "CONFIDENTIAL";
canvas.DrawString(padding, padding, text);
var textSize = canvas.MeasureText(text);
var watermarkRect = new PdfRectangle(
padding, padding, textSize.Width, textSize.Height);
canvas.DrawRoundedRectangle(watermarkRect, new PdfSize(padding, padding));
foreach (var page in pdf.Pages)
{
page.Canvas.DrawXObject(
watermark,
(page.Width - watermarkRect.Width) / 2,
(page.Height - watermarkRect.Height) / 2);
}
pdf.Save("watermarked.pdf");
Le code définit les propriétés du pinceau et du stylo du canevas du filigrane. Le pinceau est utilisé pour peindre le texte. Pour connaître la taille du texte, le code mesure le texte. Ensuite, il dessine un rectangle aux coins arrondis autour du texte. Le stylo est utilisé pour tracer le rectangle.
Une fois le contenu du filigrane prêt, le code le dessine au centre de chaque page.
Les arrière-plans PDF sont très similaires aux filigranes. Vous pouvez au moins les créer presque de la même manière. Pour ajouter un arrière-plan à un PDF, faites la même chose que dans le code ci-dessus, mais ajoutez watermark.DrawOnBackground = true; après l'appel CreateXObject. Veuillez noter qu'un contenu opaque comme des images peut masquer l'arrière-plan.
Annotations
Docotic.Pdf fournit une API riche pour les annotations dans les PDF. Vous pouvez créer, modifier et supprimer des annotations dans des documents PDF. Il est également possible d'aplatir les annotations.
Pour annoter du texte, il existe :
- Des notes adhésives ou annotations textuelles. Voir la méthode
AddTextAnnotationde la classePdfPage. - Des surlignages. Voir la méthode
AddHighlightAnnotation. - Des barrés. Voir la méthode
AddStrikeoutAnnotation. - Des soulignements. Voir les méthodes
AddJaggedUnderlineAnnotationetAddUnderlineAnnotation.
Utilisez des liens pour passer d'une page à l'autre ou vers une ressource externe. Vous pouvez utiliser des annotations à l'encre pour dessiner à main levée sur une page PDF. Il existe des annotations de masquage pour les parties qui doivent être supprimées du document. Vous pouvez également incorporer du contenu audio, vidéo ou 3D.
Surligner du texte
Voici comment surligner du texte dans des documents PDF :
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
var canvas = page.Canvas;
canvas.FontSize = 30;
var text = "Highlighted text.";
var position = new PdfPoint(10, 50);
canvas.DrawString(position, text);
canvas.DrawString(" Not highlighted.");
var size = canvas.MeasureText(text);
var bounds = new PdfRectangle(position, size);
var color = new PdfRgbColor(145, 209, 227);
var annotationText = "Please pay attention to this part.";
page.AddHighlightAnnotation(annotationText, bounds, color);
pdf.Save("highlighted.pdf");
Liens
Pour créer un lien vers une page spécifique dans un PDF, utilisez un code comme celui-ci :
using var pdf = new PdfDocument();
var secondPage = pdf.AddPage();
secondPage.Canvas.DrawString(10, 50, "Welcome to the second page.");
var firstPage = pdf.Pages[0];
var canvas = firstPage.Canvas;
var linkRect = new PdfRectangle(10, 50, 100, 60);
canvas.DrawRectangle(linkRect, PdfDrawMode.Stroke);
var options = new PdfTextDrawingOptions(linkRect)
{
HorizontalAlignment = PdfTextAlign.Center,
VerticalAlignment = PdfVerticalAlign.Center
};
canvas.DrawText("Go to 2nd page", options);
firstPage.AddLinkToPage(linkRect, 1);
pdf.Save("linked.pdf");
Dans le code, l'annotation de zone d'action fonctionne comme un lien hypertexte interne. De telles zones peuvent également naviguer vers des ressources externes et effectuer des actions non de navigation.
Supprimer des annotations
Pour supprimer des annotations d'un PDF :
- Accédez à la collection de widgets à l'aide de la propriété
PdfPage.Widgetsou de la méthodePdfDocument.GetWidgets. - Vérifiez le type, les propriétés ou déterminez autrement quelles annotations ne vous sont plus nécessaires.
- Supprimez l'annotation à l'aide de la méthode
PdfDocument.RemoveWidgetou des méthodes de l'objetPdfWidgetCollection.
Pour supprimer des pièces jointes d'un PDF, vous devrez supprimer à la fois les annotations de fichier et les pièces jointes partagées.
Caviarder un PDF
En tant que bibliothèque de caviardage PDF, Docotic.Pdf propose des méthodes pour supprimer définitivement ou masquer rapidement les informations sensibles de vos documents PDF.

Caviarder du texte
Voici comment masquer du texte dans un PDF sans outil de caviardage, en utilisant uniquement C# et Docotic.Pdf.
int i = 0;
foreach (var page in pdf.Pages)
{
foreach (var word in page.GetWords())
{
if (i % 3 == 0)
{
page.Canvas.AppendRectangle(word.Bounds);
page.Canvas.FillPath(PdfFillMode.Winding);
}
i++;
}
}
Le code dessine un rectangle noir sur chaque troisième mot d'un document. Veuillez noter que le texte derrière les rectangles reste dans le document et qu'il est possible de l'extraire plus tard. Pour supprimer définitivement le texte, utilisez l'approche de la section sur le remplacement du texte.
Caviarder des images
Vous pouvez également utiliser des rectangles noirs pour couvrir des images. Mais une approche plus simple serait de remplacer l'image par une image noire de 1 x 1 pixel. Cela permettra non seulement de mettre visuellement en évidence l'image caviardée, mais aussi de supprimer les données de l'image d'origine.
Consultez la section sur la suppression et le remplacement d'images pour des exemples de code. Je recommande également d'appeler la méthode PdfDocument.ReplaceDuplicateObjects après le remplacement.
Formulaires PDF
Docotic.Pdf peut créer des Acroforms (c'est un autre nom pour les formulaires PDF) en utilisant toutes sortes d'éléments interactifs comme des boutons, des cases à cocher, des listes déroulantes, des listes, des boutons radio et des champs de texte.
Il faut généralement seulement quelques lignes de code pour ajouter et configurer un champ de formulaire. Par exemple, vous pouvez ajouter des champs modifiables à un PDF en appelant simplement la méthode PdfPage.AddTextBox. Les exemples de code du groupe Formulaires et annotations fournissent plus d'informations sur la création et l'utilisation des formulaires.
Comment remplir un formulaire PDF
Utilisez la méthode PdfDocument.TryGetControl pour récupérer un contrôle PDF par son nom complet ou partiel. Vous pouvez également énumérer tous les contrôles du document à l'aide de la méthode GetControls. Dans les deux approches, vous devrez caster le résultat vers le type de champ attendu.
using var pdf = new PdfDocument(@"example-form.pdf");
if (pdf.TryGetControl("txt-name", out var c) && c is PdfTextBox nameTextBox)
nameTextBox.Text = "Bit Miracle team";
if (pdf.TryGetControl("txt-email", out c) && c is PdfTextBox emailTextBox)
emailTextBox.Text = "support@bitmiracle.com";
if (pdf.TryGetControl("check-agree", out c) && c is PdfCheckBox agreeCheckBox)
agreeCheckBox.Checked = true;
pdf.Save("filled-form.pdf");
Le code utilise cet exemple de formulaire PDF. Dans le code, j'ai défini les valeurs de deux champs de texte et coché la case à cocher.
Lorsque vous avez terminé de remplir un formulaire, vous pouvez aplatir tous ses champs.
Utiliser JavaScript dans les formulaires
Vous pouvez ajouter des actions aux événements de contrôle. La classe PdfControl fournit l'accès à un ensemble prédéfini d'événements. Les noms des événements commencent par "On" (par exemple, OnMouseDown).
Voici un exemple d'utilisation de JavaScript pour les formulaires PDF :
using var pdf = new PdfDocument(@"example-form.pdf");
foreach (var field in pdf.GetControls())
field.OnChange = pdf.CreateJavaScriptAction($"app.alert('{field.Name} changed!',3)");
pdf.Save("javascript-events.pdf");
Format de données de formulaire
Il existe une autre façon de remplir électroniquement un PDF. Utilisez la fonctionnalité FDF vers PDF de la bibliothèque pour préremplir automatiquement un formulaire PDF à partir d'une base de données ou d'une autre source.
using var pdf = new PdfDocument(@"example-form.pdf");
pdf.ImportFdf("form-data.fdf");
pdf.Save("auto-populated.pdf");
Le code utilise ce fichier FDF pour remplir tous les champs du formulaire en une seule fois.
Aplatir un PDF
Cette section traite de la manière d'aplatir un PDF.

Lorsque vous aplatissez un PDF, vous convertissez des éléments interactifs comme les formulaires et les annotations en contenu statique afin d'empêcher toute modification ultérieure. Un PDF aplati peut occuper beaucoup moins d'octets tout en affichant le même résultat.
Aplatir les formulaires et les annotations
Pour aplatir un PDF à remplir, utilisez la méthode PdfDocument.FlattenControls. Cette méthode dessine tous les champs de formulaire et les autres contrôles sur leur page parente, en supprimant le contrôle source du document.
Lorsque vous aplatissez un formulaire PDF, il est logique d'aplatir aussi les annotations. Utilisez la méthode PdfDocument.FlattenWidgets pour aplatir simultanément les contrôles et les annotations.
Si vous souhaitez seulement convertir certains contrôles et/ou annotations en leur représentation visuelle, utilisez alors la méthode PdfWidget.Flatten. Vous devrez d'abord trouver le contrôle ou l'annotation requis.
Aplatir le texte
Vous pouvez convertir le texte PDF en contours à l'aide de Docotic.Pdf. La raison habituelle est d'obtenir une indépendance vis-à-vis des polices. Que les polices soient installées ou non, le texte aplati aura le même rendu sur n'importe quel appareil.
Cependant, une fois le texte converti en contours, vous ne pouvez plus le modifier comme du texte. De plus, pendant le processus d'aplatissement, la bibliothèque convertit le texte en graphiques vectoriels. Cela peut augmenter la taille des fichiers.
Pour aplatir le texte PDF, vous devrez extraire le texte sous forme de tracés vectoriels et le copier sur une nouvelle page ou sur la même page. Il existe un exemple de code pour cela.
Options d'enregistrement
Dans les extraits de code ci-dessus, j'ai utilisé la méthode PdfDocument.Save sans arguments supplémentaires. La bibliothèque utilise alors les options d'enregistrement par défaut. Nous avons choisi ces valeurs par défaut afin qu'elles fonctionnent parfaitement dans les cas courants.
Il existe néanmoins des cas où vous devez remplacer les options par défaut. Pour cela, créez un objet PdfSaveOptions, configurez les options, puis transmettez-le à l'une des méthodes d'enregistrement. Je décrirai ensuite ces cas.
Pour protéger un PDF par mot de passe ou par certificat, créez un gestionnaire de chiffrement et affectez-le à la propriété EncryptionHandler.
Lorsque vous voulez signer le même PDF plusieurs fois, activez le mode de mise à jour incrémentielle en définissant la propriété WriteIncrementally sur true. Faites de même lorsque vous enregistrez un fichier précédemment signé avec de nouvelles annotations ou de nouvelles données de formulaire.
Définissez la propriété Linearize sur true pour produire un fichier PDF linéarisé (ou optimisé pour Fast Web View). Les visionneuses qui reconnaissent cette optimisation peuvent afficher ces fichiers plus rapidement.
Pour empêcher des modifications à l'enregistrement de certains champs de métadonnées, définissez les propriétés UpdateProducer et UpdateModifiedDate sur false.