Comment travailler avec la gestion de documents Core dans .NET
Aspose.PDF FOSS for .NET fournit la classe Document comme point d’entrée central pour toutes les opérations PDF. Installez le package avec dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha et utilisez Document.Create(), Document.Open(), Document.Save() et Document.Merge() pour gérer les documents PDF de manière programmatique sur .NET 8+.
Guide étape par étape
Étape 1 : Installer le package
Ajoutez Aspose.PDF FOSS à votre projet :
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alphaVérifiez la référence dans votre .csproj :
<PackageReference Include="Aspose.Pdf.Foss" Version="0.1.0-alpha" />Étape 2 : Importer les classes requises
Ajoutez les directives using nécessaires en haut de votre fichier :
using Aspose.Pdf;
using Aspose.Pdf.Annotations;Étape 3 : créer un nouveau document PDF
Utilisez Document.Create() pour créer un document vide en mémoire :
using var doc = Document.Create();
// The document has no pages yet; add pages before saving
using var ms = new MemoryStream();
doc.Save(ms);
byte[] pdfBytes = ms.ToArray();Étape 4 : Ouvrir un PDF existant
Document.Open accepte un tableau d’octets, un chemin de fichier ou un flux. Utilisez using pour vous assurer que le document est libéré après utilisation :
// From a file path
using var doc = Document.Open("input.pdf");
var page = doc.Pages[1];
// From a byte array loaded elsewhere
byte[] data = File.ReadAllBytes("input.pdf");
using var doc2 = Document.Open(data);Étape 5 : Accéder aux pages
La propriété Document.Pages renvoie un PageCollection. Les pages sont indexées à partir de 1 :
using var doc = Document.Open("input.pdf");
int pageCount = doc.Pages.Count;
var firstPage = doc.Pages[1];
double width = firstPage.Width;
double height = firstPage.Height;Étape 6 : Enregistrer un document
Enregistrez dans un flux avec Document.Save(), ou sérialisez dans un tableau d’octets avec Document.ToArray() :
using var doc = Document.Open("input.pdf");
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com/test");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
byte[] savedBytes = ms.ToArray();Étape 7 : Fusionner plusieurs documents
Utilisez Document.Merge() pour combiner plusieurs instances Document en une seule :
using var doc1 = Document.Open("part1.pdf");
using var doc2 = Document.Open("part2.pdf");
var merged = Document.Merge(new[] { doc1, doc2 });
merged.Save("combined.pdf");Document.MergeDocuments() est une surcharge équivalente qui accepte directement des tableaux de chemins de fichiers.
Problèmes courants et solutions
La collection Pages est vide après Document.Create()Document.Create() renvoie un document sans pages. Vous devez ajouter explicitement une page avant d’accéder à doc.Pages[1]. Tenter d’accéder à un indice qui n’existe pas génère une IndexOutOfRangeException.
InvalidOperationException lors de l’appel à Document.Open sur un fichier corrompu
Si le tableau d’octets PDF ou le fichier est tronqué ou invalide, Document.Open lèvera une exception. Vérifiez que le tableau d’octets source est un PDF complet (commence par %PDF-) avant de le transmettre à Open.
Document non libéré — fuite de mémoire dans les scénarios à haut débit
Toujours envelopper les appels Document.Open et Document.Create dans une instruction using. La classe Document implémente IDisposable ; ne pas la libérer entraîne le maintien en mémoire du flux sous-jacent et de la table de références croisées.
Save(ms) après que ms.Position n’est pas réinitialisé
Lors de la relecture d’un MemoryStream après doc.Save(ms), réinitialisez ms.Position = 0 avant la lecture. Omettre cette étape entraîne le lecteur à rencontrer un PDF vide ou partiel.
Merge produces a document with unexpected page count
Assurez-vous que tous les documents source sont entièrement chargés avant de les transmettre à Document.Merge. La libération d’un document source avant l’appel de fusion peut entraîner un arbre de pages incomplet.
Foire aux questions
Puis-je ouvrir un PDF protégé par mot de passe ?
Oui. Utilisez Document.Open(data, password) ou Document.Open(path, password) pour fournir le mot de passe propriétaire ou utilisateur en tant que deuxième argument.
Document.ToArray() diffère-t-il de l’enregistrement dans un MemoryStream ?
Document.ToArray() est une méthode de commodité qui enregistre en interne dans un MemoryStream et renvoie le tableau d’octets résultant. Les deux chemins produisent une sortie PDF identique.
Quel est le type de la propriété Pages ?
Document.Pages est de type PageCollection. Il est indexé à partir de 1 ; doc.Pages[1] est la première page.
Puis‑je enregistrer un document plusieurs fois ?
Oui. Vous pouvez appeler doc.Save() ou doc.ToArray() plusieurs fois sur la même instance de document. Chaque appel sérialise l’état actuel du document.
Comment vérifier si un document est sous licence ?
Document.IsLicensed renvoie un bool indiquant l’état de licence interne. Pour Aspose.PDF FOSS, il s’agit uniquement d’une information — aucune activation n’est requise.