Cette page peut contenir du texte traduit automatiquement.

Création de documents

Bien sûr, vous devez générer un document PDF avec vos données. Mais bien souvent, vous souhaitez aussi chiffrer le fichier PDF avec des mots de passe. Et vous voulez généralement ajouter des métadonnées PDF au fichier de sortie.

Poursuivez votre lecture pour savoir comment indiquer au générateur de chiffrer les fichiers PDF. Comment spécifier l’auteur du document et les mots-clés.

Cet article fait partie d’une série sur Layout API pour la génération de PDF. Si vous découvrez l’API, lisez d’abord la partie Premiers pas avec Layout API.

Création de documents PDF

Créer et générer

Le point d’entrée de Layout API est la classe PdfDocumentBuilder. Vous commencez par créer une instance de la classe avec la méthode Create. Pour générer un PDF, vous appelez la méthode Generate de la classe.

Generate peut enregistrer le résultat dans un fichier ou un flux. Dans les deux cas, la méthode nécessite comme second paramètre un délégué de type Action<Document>. Dans le délégué, vous décrivez le document que vous souhaitez obtenir. La bibliothèque générera un PDF à partir de cette description.

Chiffrement

Pour chiffrer le PDF de sortie, appelez la méthode Encryption avant la méthode Generate.

Vous devrez créer et fournir un gestionnaire de chiffrement. Pour chiffrer un PDF avec des mots de passe, utilisez un gestionnaire de type PdfStandardEncryptionHandler.

PdfDocumentBuilder.Create()
    .Encryption(new PdfStandardEncryptionHandler("owner", "user"))
    .Generate("encrypted-with-password.pdf", doc => doc.Pages(_ => { }));

Vous pouvez également chiffrer des PDF avec des certificats. Consultez l’article Chiffrer des documents PDF. Il contient des informations détaillées sur les gestionnaires de chiffrement et les autorisations PDF.

Métadonnées PDF

Dans certains flux de travail, il est très important de spécifier correctement les mots-clés PDF et l’auteur PDF dans le PDF de sortie. Layout API fournit un moyen simple de le faire. Appelez la méthode Info avant la méthode Generate et fournissez les valeurs des métadonnées dans le délégué.

PdfDocumentBuilder.Create()
    .Info(info =>
    {
        info.Author = $"{Environment.UserName}";
        info.Title = "Generate encrypted PDF with custom metadata";
        info.Keywords = "Metadata keywords encryption";
    })
    .Generate("metadata.pdf", doc => doc.Pages(_ => { }));

Options

Pour un même contenu, la bibliothèque peut créer des fichiers PDF avec une structure interne différente. Ces options affecteront le PDF de sortie.

Version

Utilisez la méthode Version pour définir la version minimale du format PDF pour le PDF de sortie.

PdfDocumentBuilder.Create()
    .Version(PdfVersion.Pdf17)
    .Generate("version.pdf", doc => doc.Pages(_ => { }));

Veuillez noter que la bibliothèque peut créer un PDF avec une version supérieure à celle spécifiée. Cela se produit lorsque le contenu du document nécessite une version plus récente. Autrement dit, lorsque le document utilise des fonctionnalités non disponibles dans la version spécifiée de la norme PDF.

Flux d’objets

Par défaut, la bibliothèque utilise des flux d’objets dans les PDF générés. Cela permet de produire des fichiers plus petits et mieux compressés.

Vous pouvez indiquer à l’API de créer des fichiers PDF sans flux d’objets à l’aide de la méthode ObjectStreams.

PdfDocumentBuilder.Create()
    .ObjectStreams(false)
    .Generate("no-object-streams.pdf", doc => doc.Pages(_ => { }));

Je vous conseille de continuer à utiliser les flux d’objets, sauf s’il existe certaines exigences réglementaires. Ou lorsque d’autres parties de votre flux de travail ne peuvent pas traiter des documents avec des flux d’objets.

Fournisseur de flux

La bibliothèque utilise des flux comme stockage intermédiaire. Lors de la génération d’un PDF, elle le fait pour les images et autres objets volumineux. La bibliothèque obtient les flux via le fournisseur de flux. Il y en a toujours un associé à l’instance actuelle de PdfDocumentBuilder.

La bibliothèque utilise par défaut PdfMixedStorageStreamProvider. Cette implémentation de fournisseur de flux fournit des flux qui conservent les données en mémoire. Ces flux écrivent leur contenu dans des fichiers temporaires lorsqu’il y a trop de données. Cela permet de réduire la consommation mémoire et d’éviter la fragmentation du LOH.

Vous pouvez utiliser votre propre implémentation de l’interface IPdfStreamProvider lors de la génération de fichiers PDF. L’une des raisons de ce changement peut être des opérations disque lentes et/ou coûteuses. Les environnements cloud peuvent correspondre à cette description.

Ce code montre comment générer un PDF entièrement en mémoire, sans fichiers temporaires. Veuillez noter que cela nécessitera beaucoup plus de mémoire qu’avec les options par défaut.

using var memoryOnlyProvider = new PdfMemoryStreamProvider();
PdfDocumentBuilder.Create()
    .StreamProvider(memoryOnlyProvider)
    .Generate("created-without-temp-files.pdf", doc => doc.Pages(_ => { }));

La bibliothèque appelle finalement Dispose pour chaque flux qu’elle obtient via le fournisseur de flux. Vous devez disposer vous-mêmes de l’instance du fournisseur de flux.