Cette page peut contenir du texte traduit automatiquement.

Modifier un PDF en C#

Utilisez Docotic.Pdf pour modifier vos documents PDF. Il s'agit de la bibliothèque d'édition PDF pour C# et VB.NET qui combine des fonctionnalités puissantes avec une API intuitive.

Bibliothèque Docotic.Pdf 9.5.17573-dev Tests de régression 14,726 réussis Téléchargements totaux de NuGet 4,765,230
Icône de l'éditeur PDF

Docotic.Pdf propose de nombreux moyens de modifier des documents PDF. Voici quelques-unes des fonctionnalités clés de la bibliothèque pour l'édition de PDF :

  • Combinez plusieurs PDF en un seul ou divisez un seul PDF en plusieurs fichiers.
  • Réduisez la taille du fichier PDF.
  • Réorganisez, supprimez, faites pivoter ou extrayez des pages.
  • Lisez, modifiez ou supprimez les métadonnées PDF.
  • Signez un PDF avec des signatures numériques.
  • Chiffrez des documents ou supprimez des mots de passe d'un PDF.
  • Ajoutez, modifiez ou supprimez des annotations et des pièces jointes.
  • Remplissez des formulaires AcroForms, ajoutez ou supprimez des contrôles de formulaire.
  • Aplatissez les champs de formulaire et les annotations pour les intégrer au contenu PDF.
  • Ajoutez, supprimez ou remplacez du texte dans le PDF.
  • Insérez, remplacez et redimensionnez des images.
  • Ajoutez des filigranes et des arrière-plans.
  • Convertissez des documents numérisés en texte modifiable et consultable.

Dans les sections suivantes, je décrirai plus en détail les fonctionnalités d'édition PDF. Les sections contiennent également des extraits de code et des liens vers des ressources pertinentes.

Fusionner et diviser des PDF

Cette section concerne deux fonctionnalités aux objectifs opposés.

Diviser et fusionner des PDF en C# et VB.NET

Combiner PDF

Lorsque vous consolidez des fichiers PDF, vous créez un document PDF unique. Le PDF fusionné contient généralement des informations liées à plusieurs fichiers PDF existants.

Voici un extrait de code qui montre comment combiner 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 combiner des documents chiffrés.

Diviser le PDF

Le fractionnement consiste à 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 uniquement 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 font référence 
    // à des ressources inutilisées telles que des polices, des images, des motifs.
    copy.RemoveUnusedResources();
    copy.Save(i + ".pdf");
}

Découvrez d’autres approches pour implémenter un séparateur PDF dans l’article dédié.

Compression PDF

Il existe deux approches principales pour compresser un PDF. La première consiste à appliquer uniquement des opérations qui ne modifient pas le contenu du fichier, mais uniquement sa forme. La deuxième approche inclut également des modifications pouvant entraîner une perte de détails ou de qualité du document pour 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 formatage et utilise une forme plus courte lorsque cela 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 d'objets avec la représentation la plus compacte. Les flux d'objets sont compressés avec l'algorithme Flate.

Vous pouvez affecter la manière dont la bibliothèque enregistre les objets à l'aide de options d'enregistrement.

Certains documents contiennent des polices, des images, des profils de couleurs et d'autres objets en double. C'est généralement le cas pour les documents mis à jour de manière incrémentielle et les fichiers créés par la fusion de 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 faire référence à 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 PDF réduisent la taille du fichier sans perte de qualité.

Transformations avec perte

Pour les fichiers contenant des images, l'un des moyens les plus efficaces pour réduire la taille du PDF est de 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 conséquence, 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 fournir 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 de l'espace. Cela est utile lorsque vous n'avez plus besoin d'annotations et de champs de formulaire modifiables dans vos documents.

Les polices peuvent prendre beaucoup de place dans les documents. La méthode PdfDocument.RemoveUnusedFontGlyphs peut supprimer les glyphes inutilisés des polices pour optimiser la taille de sortie. Le sous-ensemble de polices est un autre nom pour ce processus. Vous pouvez même supprimer complètement les octets de police du document (police non incorporée). Cela peut avoir du sens lorsque le document contient des octets d'une police populaire comme Arial.

D'autres transformations suppriment directement les informations des documents. Vous pouvez supprimer les métadonnées, les informations de structure et les données d'application privées. 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 quelques exemples de code, lisez l'article sur comment réduire la taille du fichier PDF.

Réorganiser les pages dans un PDF

Il existe de nombreuses raisons de modifier l'ordre des pages d'un PDF. Par exemple, vous pouvez avoir besoin de regrouper des informations connexes ou d'améliorer la lisibilité du document en veillant à ce qu'il s'enchaîne de manière logique.

Réorganiser les pages dans un PDF

Outre la possibilité de fusionner et de diviser des pages, Docotic.Pdf fournit un ensemble complet 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 exemples de projets de test complets pour cette section dans le groupe Pages et Navigation d'exemples de codes. 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 de pages continues. Le code déplace la première moitié des pages vers 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 de pages arbitraires. 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.

Échanger des pages PDF

Pour échanger deux pages, utilisez le 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 position de l'autre. Lorsque le nombre de pages n'est pas égal à deux, utilisez l'une des méthodes move 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 avec des index allant 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. La 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 la 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 de pages. Voir l'exemple de code dans la section Fractionner un PDF.

La deuxième opération consiste à coller des pages. Pour cette opération, utilisez la méthode PdfDocument.Append. Ensuite, déplacez les pages ajoutées à 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 ne permet pas d'extraire des pages d'un document qui ne contient qu'une seule page.

Nous vous recommandons de supprimer les ressources inutilisées du document avec les pages extraites.

Supprimer une page du PDF

Consultez l'extrait qui montre comment supprimer une page dans un document PDF. Il supprime en fait deux pages à l'aide de différentes surcharges de la méthode RemovePage. La première surcharge accepte un index de page comme paramètre. La deuxième 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 plusieurs pages à la fois, utilisez la méthode PdfDocument.RemovePages. Cette méthode surcharge le travail avec des tableaux d'index de page ou d'objets de page.

Signatures numériques

Docotic.Pdf met en œuvre 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 est le moyen de confirmer l'identité du signataire et de garantir que personne n'a modifié le document après la signature.

Certifier la 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 certains types de modifications.

Vérifier la 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 la signature de plusieurs parties sur un même document. L'ajout de plusieurs signatures au format PDF nécessite que le document soit enregistré de manière incrémentielle.

Intégrer l'horodatage de la signature. Il est possible de spécifier une URL d'autorité d'horodatage et, éventuellement, ses informations d'identification dans les options de signature. La bibliothèque intégrera l'horodatage reçu dans la signature.

Certificat intégré. La bibliothèque intègre automatiquement les certificats de signature dans les signatures numériques.

La page Signatures numériques contient des exemples de codes et plus d'informations sur chaque opération.

Protéger le PDF

Il existe trois fonctionnalités que vous pouvez utiliser pour garantir la sécurité des PDF. Docotic.Pdf peut fonctionner avec elles dans les deux sens : la bibliothèque peut protéger un PDF et déverrouiller un PDF sécurisé.

Sécurité des PDF

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 nécessitera le mot de passe correct pour ouvrir ou modifier le document.

Il existe deux types de mots de passe dans les fichiers PDF :

  • Mot de passe d'ouverture (mot de passe utilisateur). Ce type de mot de passe est requis pour ouvrir et afficher le PDF. Sans le mot de passe correct, un visualiseur PDF conforme n'ouvrira pas le document.
  • Mot de passe d'autorisations (mot de passe du propriétaire). Ce mot de passe est requis pour supprimer les autorisations du 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, telles que l'impression, la copie ou la modification du PDF.

Vous pouvez définir les deux mots de passe pour le même document PDF. Lisez l'article décryptage des fichiers PDF pour savoir comment supprimer les mots de passe des documents PDF.

Cryptage

Le chiffrement 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 crypter les fichiers PDF à l'aide des algorithmes RC4 40 bits, RC4 128 bits, AES 128 bits et cryptage AES 256 bits.

Autorisations et restrictions

Vous pouvez définir diverses autorisations sur un PDF, comme restreindre l'impression, copier du texte, modifier le document, etc. Les autorisations affectent uniquement l'expérience lorsqu'une personne ouvre le PDF avec le mot de passe de l'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. Découvrez comment faire cela en utilisant C# et l'API Docotic.Pdf.

Pour savoir comment assurer l'intégrité du PDF en plus de la sécurité du PDF, lisez la section sur les signatures numériques.

Métadonnées dans 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 des documents PDF et les métadonnées XMP.

Les propriétés du document sont également communément appelées dictionnaire d'informations du document, informations sur le fichier, champs de métadonnées, attributs du document et attributs du fichier.

Les métadonnées XMP (Extensible Metadata Platform) sont en fait un fichier XML intégré dans un PDF. XMP utilise un modèle de données flexible qui peut 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, on trouve 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 exemples de projets de test complets pour cette section dans le groupe Métadonnées des exemples de codes.

Propriétés du document

Découvrez 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 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 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 les 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 des métadonnées XMP brutes à l'aide de l'une des méthodes XmpMetatada.Save. La méthode produira un fichier XML avec 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 d'informations sur le document 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 dans les métadonnées XMP et les informations sur le document. Lorsqu'une propriété change dans les deux sources, la méthode remplace une source par 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 des liens spéciaux qui aident les lecteurs à accéder rapidement à des sections ou des pages spécifiques. Le plan PDF est un autre nom pour les signets.

Contours PDF

Les applications de visualisation affichent généralement les signets comme la table des matières d'un livre, mais de manière interactive. Lorsque le lecteur clique sur un signet, l'application de visualisation accède à la partie désignée du document. Un comportement similaire peut être obtenu en utilisant des annotations de lien.

Voici un extrait de code C# qui montre comment ajouter des signets au 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 d'un PDF peut comporter des signets principaux et des sous-signets, ce qui facilite la structuration de documents volumineux. 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 signets. Consultez l'exemple complet de création d'un contour 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. Ces fichiers sont également communément appelés fichiers intégrés et pièces jointes. Vous pouvez joindre n'importe quel fichier : image, fichier audio/vidéo, autre PDF, document Word, feuilles de calcul Excel ou autre.

Si vous souhaitez joindre des PDF ensemble, créant ainsi 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 au 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 à l'intérieur du contenu de la page comme n'importe quelle autre annotation.

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 codes pour trouver des projets de test complets pour les exemples de cette section.

Pour supprimer les pièces jointes d'un PDF, vous devez énumérer les pièces jointes partagées et les annotations de page et supprimer les éléments dont vous n'avez pas besoin. Voir l'exemple de code d'énumération ci-dessous. 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 intégrés du 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 des numéros personnalisés attribués aux pages d'un document PDF. Contrairement aux numéros de page standard, les étiquettes de page peuvent inclure un mélange de lettres, de chiffres et même de chiffres romains. Les autres noms des étiquettes de page sont les identifiants de page et les 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 porteront les libellés i, ii, iii et iv. Les trois libellés suivants sont 5, 6 et 7. Pour les pages restantes, les libellés 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 de pouvoir en extraire du texte. Un autre cas d'utilisation de l'OCR consiste à extraire du texte d'un PDF qui utilise un mappage de glyphes personnalisé vers Unicode.

PDF numérisé avec OCR pour extraire le texte

Nous avons un article de blog qui montre comment OCR des documents numérisés. L'article contient un exemple de PDF non consultable et montre comment utiliser Tesseract OCR, le 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 les pages

Cette section traite des modifications apportées aux pages PDF existantes, comme :

  • comment faire pivoter les pages PDF
  • comment modifier la taille de la page
  • utiliser des graphiques vectoriels sur la zone de dessin de la page
  • ajouter du contenu HTML

Découvrez l'API de mise en page de la bibliothèque pour savoir comment créer des documents PDF à partir de blocs de construction tels que l'en-tête et le pied de page, les tableaux, les images, les paragraphes de texte, etc.

Consultez les autres sections pour obtenir des informations sur :

Faire pivoter les pages

Consultez 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 les pages PDF de 0, 90 et 270 degrés.

Changer la taille de la page

Docotic.Pdf propose plusieurs façons de modifier la taille des pages 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, il ne redimensionnera pas le contenu des pages du document. Et il ne supprimera aucun contenu. Il 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 à recadrer les pages. Vous pouvez modifier la CropBox d'une page à l'aide du code C# comme ceci :

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 zone de recadrage est la solution à adopter si vous souhaitez enregistrer une partie de la page en tant qu'image.

Si l'objectif est de conserver tout le contenu visible sur une page de taille différente, utilisez l'approche de 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 vos besoins.

Une fois le XObject prêt, j'efface le contenu de la page précédente, redimensionne la page, puis 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 permet d'ajouter des graphiques vectoriels tels que des lignes, des courbes et des formes aux documents PDF. Vous pouvez créer des chemins graphiques à partir d'objets graphiques. Vous pouvez ensuite remplir ou tracer les chemins à l'aide de couleurs provenant de différents espaces colorimétriques.

Recherchez des exemples de code pour les fonctionnalités liées aux graphiques dans le groupe Graphiques des exemples de codes.

Il est également possible d'extraire des graphiques à partir de 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 également contenir des chemins 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

La superposition de contenu HTML sur un document PDF peut être utile pour ajouter des éléments dynamiques tels que des graphiques ou des cours de bourse à vos PDF.

Découvrez 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 d'un PDF, comment modifier la couleur du texte dans un PDF et comment ajouter un nouveau texte.

L'éditeur PDF modifie le texte

Nous avons un article consacré à comment extraire du texte d'un PDF. Consultez-le pour plus d'informations sur le sujet.

L'aplatissement du texte est également possible avec l'aide de Docotic.Pdf.

Rechercher et remplacer

Pour modifier du texte dans un PDF, vous devez trouver la zone qui contient le texte, puis supprimer le texte de cette zone. La dernière étape consiste à ajouter le nouveau texte dans la même zone du document.

La recherche de fichiers PDF peut être délicate car le document peut contenir des mots dans n'importe quel ordre. Le texte peut également être pivoté. Heureusement, nous avons un exemple de code qui montre comment rechercher des mots ou des phrases dans un PDF.

Lorsque vous avez les coordonnées du texte à supprimer, il est temps de modifier le contenu de la page qui le contient. La bibliothèque fournit des moyens pour énumérer et copier les objets de la page. Il est donc possible d'omettre du texte lors de la copie d'objets. Cela supprimera essentiellement le texte. Le code de l'exemple modifier le contenu de la 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 d'espace réservé et que vous remplacez ultérieurement l'espace réservé par un autre texte, vous pouvez utiliser des zones de texte à la place.

L'idée est d'ajouter une zone de texte en lecture seule sans bordures au document et d'y placer le texte de remplacement. Plus tard, vous pouvez ouvrir le document, rechercher la zone de texte par son nom et remplacer le texte de remplacement par un simple appel box.Text = "new text";. Aplatissez la zone de texte après le remplacement si vous ne souhaitez plus de modifications.

Ajouter un nouveau texte

Pour ajouter du texte aux documents, utilisez les méthodes DrawString et DrawText d'un objet PdfCanvas. Les méthodes utilisent la police de caractères courante. 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 répond à cette exigence.

var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.AddFont("NSimSun")
    ?? throw new ArgumentException("Font not found");

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 les polices installées sur votre système, 14 polices Type1 intégrées ou charger une police requise à partir d'un fichier.

Changer la couleur du texte

Pour modifier la couleur du texte dans un PDF, utilisez la même approche qu'avec suppression de texte. Vous devrez modifier au moins la méthode ReplaceColor dans l'exemple de code.

Images

Docotic.Pdf fournit tout ce dont vous avez besoin pour éditer des images PDF. Vous trouverez ci-dessous des extraits de code C# pour les opérations les plus courantes.

Le groupe Images d'exemples de codes 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.AddImage("image.jpg")
    ?? throw new ArgumentException("Cannot add image");

canvas.DrawImage(image, 10, 50);

Vous pouvez spécifier un angle de rotation et une taille de sortie en utilisant des surcharges de la méthode DrawImage. Pour dessiner la même image sur plusieurs pages, ajoutez l'image une fois et utilisez le même objet PdfImage dans plusieurs appels à la méthode DrawImage.

Combiner des images en 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.AddImage(path)
        ?? throw new ArgumentException("Cannot add image");

    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 au PDF, en modifiant la taille de chaque page pour qu'elle corresponde à la taille de l'image correspondante. Avant d'enregistrer le résultat, le code supprime la première page vide implicitement ajoutée.

Extraire des images PDF

Nous avons conçu Docotic.Pdf pour extraire des images de fichiers PDF sans compromettre la qualité des images. La bibliothèque ne modifie pas la taille ou 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 certaines d'entre elles d'une page PDF. Vous pouvez filtrer les images par position, taille, transformation ou 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 permettant de modifier la compression des images PDF. Il est possible de reconditionner les images à l'aide des algorithmes de compression JPEG, CCITT Group 3 et 4 (fax), JPEG 2000 et zip/deflate.

En fonction de la compression initiale et de la nouvelle compression, le changement 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 recompresser une image. Vérifiez les méthodes PdfImage dont les noms commencent par RecompressWith. Vous pouvez supprimer toute compression d'une image en utilisant 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 sens. 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 il s'agit d'un processus avec perte.

Filigranes et arrière-plans

Filigrane sur PDF

Le filigranage d'un PDF implique les étapes suivantes :

  • Créer un XObject, le conteneur pour le contenu du filigrane
  • Remplir l'objet avec du texte, des images et des graphiques vectoriels
  • Tamponnez les pages PDF avec l'objet

Voici le code C# qui ajoute le filigrane Confidential au 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. Au moins, vous pouvez les créer presque de la même manière. Pour ajouter un arrière-plan au PDF, procédez comme dans le code ci-dessus, mais ajoutez watermark.DrawOnBackground = true; après l'appel CreateXObject. Veuillez noter que le contenu opaque comme les images peut masquer l'arrière-plan.

Annotations

Docotic.Pdf fournit une API riche pour les annotations dans PDF. Vous pouvez créer, modifier et supprimer des annotations à partir de documents PDF. Il est également possible d'aplatir les annotations.

Pour annoter un texte, il existe :

  • Des notes autocollantes ou des annotations de texte. Voir la méthode AddTextAnnotation de la classe PdfPage.
  • Des surlignements. Voir la méthode AddHighlightAnnotation.
  • Des barrés. Voir la méthode AddStrikeoutAnnotation.
  • Des soulignements. Voir les méthodes AddJaggedUnderlineAnnotation et AddUnderlineAnnotation.

Utilisez des liens pour passer d'une page à une autre ou à une ressource externe. Vous pouvez utiliser des annotations manuscrites pour dessiner à main levée sur une page PDF. Il existe des annotations de rédaction pour les parties destinées à être supprimées du document. Vous pouvez également intégrer du contenu audio, vidéo ou 3D.

Surligner le texte

Voici comment mettre en évidence 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");

Pour créer un lien vers une page spécifique d'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. Ces zones peuvent également naviguer vers des ressources externes et effectuer des actions non liées à la navigation.

Supprimer les annotations

Pour supprimer des annotations d'un PDF :

  1. Accédez à la collection de widgets à l'aide de la propriété PdfPage.Widgets ou de la méthode PdfDocument.GetWidgets.
  2. Vérifiez le type, les propriétés ou décidez des annotations dont vous n'avez plus besoin.
  3. Supprimez l'annotation à l'aide de la ou des méthodes PdfDocument.RemoveWidget de l'objet PdfWidgetCollection.

Pour supprimer les pièces jointes d'un PDF, vous devez supprimer à la fois les annotations de fichier et les pièces jointes partagées.

Rédiger un PDF

En tant que bibliothèque de rédaction PDF, Docotic.Pdf propose des méthodes pour supprimer définitivement ou noircir rapidement les informations sensibles de vos documents PDF.

Censurer des informations sur un PDF

Rédiger le texte

Voici comment noircir du texte dans un PDF sans l'outil Redact, 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 ultérieurement. Pour supprimer définitivement le texte, utilisez l'approche décrite dans la section sur le remplacement de texte.

Rédiger les images

Vous pouvez également utiliser des rectangles noirs pour recouvrir les images. Mais une approche plus simple consisterait à remplacer l'image par une image noire de 1 x 1 pixel. Cela mettra non seulement en valeur visuellement l'image expurgée, mais supprimera également 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 zones de liste, des boutons radio et des champs de texte.

Il suffit généralement de 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.GetControl pour rechercher un contrôle PDF par son nom complet ou partiel. Une alternative consiste à énumérer les contrôles de document à l'aide de la méthode GetControls. Dans les deux cas, vous devrez convertir le contrôle en type de champ attendu.

using var pdf = new PdfDocument(@"example-form.pdf");

if (pdf.GetControl("txt-name") is PdfTextBox nameTextBox)
    nameTextBox.Text = "Bit Miracle team";

if (pdf.GetControl("txt-email") is PdfTextBox emailTextBox)
    emailTextBox.Text = "support@bitmiracle.com";

if (pdf.GetControl("check-agree") is PdfCheckBox agreeCheckBox)
    agreeCheckBox.Checked = true;

pdf.Save("filled-form.pdf");

Le code utilise cet exemple de formulaire PDF. Dans le code, je définis des valeurs pour les deux champs de texte et je coche la case.

Lorsque vous avez terminé de remplir un formulaire, vous pouvez aplatir tous ses champs.

Utilisation de JavaScript dans les formulaires

Vous pouvez ajouter des actions pour contrôler les événements. La classe PdfControl permet d'accéder à 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 des données des formulaires

Il existe une autre façon de remplir électroniquement un PDF. Utilisez la fonction FDF vers PDF de la bibliothèque pour remplir automatiquement le 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 à la fois.

Aplatir le PDF

Cette section explique comment aplatir un PDF.

Aplatissement PDF

Lorsque vous aplatissez un PDF, vous convertissez les éléments interactifs tels que les formulaires et les annotations en contenu statique pour éviter toute modification ultérieure. Un PDF aplati peut prendre beaucoup moins d'octets tout en conservant le même aspect.

Aplatir les formulaires et les annotations

Pour aplatir un PDF remplissable, utilisez la méthode PdfDocument.FlattenControls. Cette méthode dessine tous les champs de formulaire et autres contrôles sur sa page parent, supprimant ainsi le contrôle source du document.

Lorsque vous aplatissez un formulaire PDF, il est logique d'aplatir également les annotations. Utilisez la méthode PdfDocument.FlattenWidgets pour aplatir les contrôles et les annotations en même temps.

Si vous souhaitez uniquement convertir certains contrôles et/ou annotations en leur représentation visuelle, utilisez la méthode PdfWidget.Flatten. Vous devez d'abord trouver le contrôle requis ou l'annotation.

Aplatir le texte

Vous pouvez convertir du texte PDF en contours à l'aide de Docotic.Pdf. La raison habituelle est d'obtenir une indépendance des polices. Que les polices soient installées ou non, le texte aplati aura le même aspect sur n'importe quel appareil.

Cependant, une fois que vous avez converti le texte en contours, vous ne pouvez plus le modifier en tant que 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 devez 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 de sauvegarde

Dans les extraits de code ci-dessus, j'ai utilisé la méthode PdfDocument.Save sans arguments supplémentaires. La bibliothèque utilise les options de sauvegarde par défaut dans de tels cas. Nous avons sélectionné les valeurs par défaut pour qu'elles fonctionnent parfaitement dans les cas habituels.

Il existe néanmoins des cas où vous devez remplacer les options par défaut. Pour cela, créez un objet PdfSaveOptions, définissez les options et fournissez-les à l'une des méthodes de sauvegarde. Je décrirai plus loin ces cas.

Pour protéger le PDF avec un mot de passe ou un certificat, créez un gestionnaire de chiffrement et définissez-le sur la propriété EncryptionHandler.

Lorsque vous souhaitez signer plusieurs fois le même PDF, 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 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 lecteurs qui reconnaissent cette optimisation peuvent afficher ces fichiers plus rapidement.

Pour éviter les modifications de certains champs de métadonnées lors de la sauvegarde, définissez les propriétés UpdateProducer et UpdateModifiedDate sur false.