Com treballar amb la Gestió de documents Core a .NET
Aspose.PDF FOSS per a .NET proporciona la classe Document com a punt d’entrada central per a totes les operacions PDF. Instal·leu el paquet amb dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha i utilitzeu Document.Create(), Document.Open(), Document.Save() i Document.Merge() per gestionar documents PDF de manera programàtica a .NET 8+.
Guia pas a pas
Pas 1: Instal·la el paquet
Afegeix Aspose.PDF FOSS al teu projecte:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alphaVerifiqueu la referència al vostre .csproj:
<PackageReference Include="Aspose.Pdf.Foss" Version="0.1.0-alpha" />Pas 2: Importa les classes necessàries
Afegeix les directives using necessàries a la part superior del teu fitxer:
using Aspose.Pdf;
using Aspose.Pdf.Annotations;Pas 3: Crea un nou document PDF
Utilitzeu Document.Create() per crear un document buit en memòria:
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();Pas 4: Obre un PDF existent
Document.Open accepta una matriu de bytes, una ruta de fitxer o un flux. Utilitzeu using per assegurar que el document es disposi després de l’ús:
// 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);Pas 5: Accedir a les pàgines
La propietat Document.Pages retorna un PageCollection. Les pàgines són indexades a 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;Pas 6: Desa un Document
Desa a un flux amb Document.Save(), o serialitza a una matriu de bytes amb 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();Pas 7: Fusiona diversos documents
Utilitzeu Document.Merge() per combinar diverses instàncies de Document en una:
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() és una sobrecàrrega equivalent que accepta matrius de rutes de fitxer directament.
Problemes comuns i solucions
La col·lecció de pàgines està buida després de Document.Create()Document.Create() retorna un document sense pàgines. Heu d’afegir explícitament una pàgina abans d’accedir a doc.Pages[1]. Intentar accedir a un índex que no existeix llança un IndexOutOfRangeException.
InvalidOperationException en cridar Document.Open en un fitxer corrupte
Si la matriu de bytes PDF o el fitxer està truncat o és invàlid, Document.Open llençarà. Valideu que la matriu de bytes d’origen sigui un PDF complet (comença amb %PDF-) abans de passar-la a Open.
Document no alliberat — fuita de memòria en escenaris d’alt rendiment
Sempre emboliqueu les crides Document.Open i Document.Create en una declaració using. La classe Document implementa IDisposable; no alliberar‑la fa que el flux subjacente i la taula de referències creuades romanguin a la memòria.
Save(ms) després que ms.Position no es restableixi
En llegir de nou des d’un MemoryStream després de doc.Save(ms), restableix ms.Position = 0 abans de llegir. Ometre aquest pas fa que el lector trobi un PDF buit o parcial.
Merge produeix un document amb un recompte de pàgines inesperat
Assegureu-vos que tots els documents d’origen estiguin completament carregats abans de passar-los a Document.Merge. Alliberar un document d’origen abans de la crida de fusió pot provocar un arbre de pàgines incomplet.
Preguntes freqüents
Puc obrir un PDF protegit amb contrasenya?
Sí. Utilitzeu Document.Open(data, password) o Document.Open(path, password) per proporcionar la contrasenya del propietari o de l’usuari com a segon argument.
Document.ToArray() difereix de desar en un MemoryStream?
Document.ToArray() és un mètode de conveniència que internament desa en un MemoryStream i retorna la matriu de bytes resultant. Ambdós camins produeixen una sortida PDF idèntica.
Quin és el tipus de la propietat Pages?
Document.Pages és del tipus PageCollection. És indexat a partir de 1; doc.Pages[1] és la primera pàgina.
Puc desar un document diverses vegades?
Sí. Podeu cridar doc.Save() o doc.ToArray() diverses vegades a la mateixa instància del document. Cada crida serialitza l’estat actual del document.
Com comprovo si un document està llicenciat?
Document.IsLicensed retorna un bool que indica l’estat de llicència intern. Per a Aspose.PDF FOSS això és només informatiu — no es requereix activació.