La gestione dei documenti PDF di base copre le operazioni che compaiono in quasi tutti i flussi di lavoro PDF: aprire o creare un documento, accedere alle pagine e al loro contenuto, leggere e scrivere annotazioni, estrarre testo e lavorare con azioni interattive. Aspose.PDF FOSS for .NET fornisce un’API .NET 8+ che gestisce tutte queste attività attraverso un modello di oggetti coerente incentrato sui tipi Document e Page.
Ciclo di vita del documento: Crea, Apri, Salva
Ogni flusso di lavoro inizia con la creazione di un nuovo documento o con il caricamento di uno esistente. Document.Create() restituisce una nuova istanza vuota di Document. Document.Open(data) accetta un byte[] o un Stream e analizza la struttura PDF:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
using var doc2 = Document.Open(ms.ToArray());
var annot = (LinkAnnotation)doc2.Pages[1].Annotations[1];
Console.WriteLine(annot.Uri); // https://aspose.com
Questo frammento apre un PDF minimale, aggiunge un’annotazione di collegamento alla pagina 1, lo salva in un MemoryStream e verifica che l’annotazione sia preservata dopo il ricaricamento. La sovraccarico Document.Save(Stream) scrive l’intera struttura aggiornata; Document.ToArray() restituisce direttamente i byte.
Accesso alla pagina e la collezione Pages
Le pagine sono accessibili tramite la proprietà Pages usando un indice intero basato su 1: doc.Pages[1] restituisce la prima pagina, doc.Pages[doc.Pages.Count] restituisce l’ultima. Ogni oggetto Page espone:
Annotations— ilAnnotationCollectionper quella pagina, con supporto perAddLinkAnnotatione l’enumerazione delle annotazioni esistenti per tipo.- Operatori di flusso di contenuto — accesso a basso livello ai comandi di disegno della pagina tramite la collezione
Operators.
L’indice a base 1 è coerente in tutta l’API: le ricerche di annotazioni, gli indici di pagina di destinazione dell’azione GoTo e tutti gli altri riferimenti di pagina utilizzano la stessa convenzione.
Estrazione del testo con TextFragmentAbsorber
TextFragmentAbsorber è il punto di ingresso standard per leggere il testo da una pagina PDF. Usa il costruttore senza argomenti per estrarre tutti i frammenti, oppure passa una frase di ricerca per filtrare il testo corrispondente:
using var doc = Document.Open("path/to/document.pdf");
var absorber = new TextFragmentAbsorber("Hello");
absorber.Visit(doc.Pages[1]);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text} size={fragment.FontSize}");
}
Chiama absorber.Visit(page) per elaborare una singola pagina. La collezione TextFragments risultante contiene TextFragment oggetti; ciascuno espone Text (il contenuto stringa) e FontSize (la dimensione del punto renderizzata). Una seconda overload TextFragmentAbsorber(searchPhrase, isRegex) accetta un flag di espressione regolare per la ricerca basata su pattern.
Azioni interattive
PdfAction è la classe factory per tutti i tipi di azione PDF standard. Quattro metodi statici factory coprono i casi più comuni:
PdfAction.CreateUri(uri)— apre un URL nel browser dell’utente.PdfAction.CreateGoTo(pageIndex, fitType)— naviga a una pagina specifica all’interno del documento.PdfAction.CreateJavaScript(script)— esegue una stringa JavaScript nel visualizzatore PDF.PdfAction.CreateLaunch(filePath)— avvia un file o un’applicazione esterna.
Le azioni sono associate alle pagine tramite annotazioni. AnnotationCollection.AddLinkAnnotation(rectangle, action) posiziona un LinkAnnotation sulla regione rettangolare specificata con l’azione data allegata:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://example.org");
var annot = page.Annotations.AddLinkAnnotation(new Rectangle(10, 10, 100, 30), action);
Console.WriteLine(page.Annotations.Count); // 1
Console.WriteLine(annot.AnnotationType); // Link
AnnotationType.Link conferma che l’annotazione è stata creata come tipo link. Il costruttore Rectangle accetta le coordinate sinistra, inferiore, destra e superiore in unità di spazio utente PDF.
Metadati del documento e licenze
La classe Document espone IsLicensed (restituisce true nella build FOSS), JavaScript (un JavaScriptCollection per script a livello di documento) e DocumentActions per eventi del ciclo di vita come BeforeClosing e BeforeSaving.
Il pacchetto FOSS è installato tramite NuGet:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
Non è necessaria alcuna chiave di licenza. La licenza MIT consente l’uso in applicazioni commerciali senza requisiti di attribuzione oltre a preservare l’avviso di licenza.