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 — il AnnotationCollection per quella pagina, con supporto per AddLinkAnnotation e 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.


Introduzione

Risorse correlate