Aspose.PDF FOSS for .NET è una libreria .NET gratuita, con licenza MIT, per la lettura, creazione e manipolazione di documenti PDF. Rilasciata sotto una licenza open-source permissiva, elimina la tradizionale barriera alle capacità PDF di livello enterprise — ogni funzionalità nella libreria è disponibile senza acquistare una licenza commerciale.
Che cos’è Aspose.PDF FOSS per .NET?
La libreria è destinata a .NET 8 e versioni successive. È pubblicata su NuGet con l’ID pacchetto Aspose.Pdf.Foss e può essere aggiunta a qualsiasi progetto .NET 8+ con un unico comando:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
Il namespace principale è Aspose.Pdf, con i namespace correlati Aspose.Pdf.Text, Aspose.Pdf.Forms e Aspose.Pdf.Facades. La libreria espone 805 classi API pubbliche supportate da 7,488 claim documentati e 100 snippet di codice estratti direttamente dalla suite di test.
Funzionalità principali
L’API copre l’intero ciclo di vita di un documento PDF:
- Creazione e caricamento del documento —
Document.Create()produce un documento vuoto;Document.Open(data)carica un PDF esistente da un array di byte o da uno stream. - Accesso a pagine e contenuti — la collezione
Pagesfornisce un accesso indicizzato a base 1 alle singole pagine, ognuna delle quali espone annotazioni, operatori e flussi di contenuto. - Estrazione del testo —
TextFragmentAbsorbervisita una pagina e raccoglie ogni frammento di testo, con filtro opzionale di frase di ricerca e supporto alle espressioni regolari. - Azioni interattive —
PdfAction.CreateUri,PdfAction.CreateGoTo,PdfAction.CreateJavaScriptePdfAction.CreateLaunchcoprono i tipi di azione PDF standard. - Annotazioni —
AnnotationCollection.AddLinkAnnotationaggiunge un’annotazione di collegamento con un’azione associata a qualsiasi regione rettangolare su una pagina. - Moduli — lo spazio dei nomi
Aspose.Pdf.FormseAspose.Pdf.Facadesforniscono l’accesso ai campi AcroForm, alla formattazione dell’aspetto e alle estensioni JavaScript a livello di campo.
Apertura di un documento e aggiunta di un collegamento
Il seguente esempio dimostra il modello round‑trip: crea un nuovo documento PDF, aggiunge un’annotazione di collegamento con azione URI alla prima pagina, salva su uno stream e ricarica per verificare che l’annotazione persista.
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
Il metodo statico Document.Open accetta un byte[] o uno stream. doc.Pages[1] accede alla prima pagina tramite indice basato su 1 — la stessa convenzione di indice usata in tutta la libreria. Dopo aver salvato in un MemoryStream, il documento può essere ricaricato e tutte le annotazioni sono preservate.
Ricerca del testo su una pagina
TextFragmentAbsorber fornisce la ricerca per parole chiave sul flusso di contenuto di qualsiasi pagina. Passa una frase di ricerca al costruttore per limitare i risultati, oppure utilizza la sovraccarico senza argomenti per raccogliere tutti i frammenti:
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}");
}
Ogni TextFragment nella collezione risultante espone proprietà tra cui Text, FontSize e dati posizionali, rendendo semplice costruire flussi di lavoro di ricerca, evidenziazione o redazione sopra i frammenti estratti.
Licenza MIT e Sviluppo Aperto
Tutto il codice sorgente è pubblicato su GitHub e distribuito sotto la licenza MIT. Non c’è alcuna filigrana di valutazione, nessun limite di utilizzo e nessun file di licenza separato da gestire. La proprietà Document.IsLicensed restituisce sempre true nella build FOSS.
Il pacchetto è attualmente alla versione 0.1.0-alpha, riflettendo uno sviluppo attivo. La superficie dell’API è già sostanziale — 805 classi, 7.488 claim — e la designazione alpha segnala che le firme dell’API potrebbero evolvere prima del rilascio 1.0.