La gestión central de documentos PDF cubre las operaciones que aparecen en casi todos los flujos de trabajo PDF: abrir o crear un documento, acceder a las páginas y su contenido, leer y escribir anotaciones, extraer texto y trabajar con acciones interactivas. Aspose.PDF FOSS for .NET proporciona una .NET 8+ API que maneja todas estas tareas a través de un modelo de objetos coherente centrado en los tipos Document y Page.
Ciclo de vida del documento: Crear, Abrir, Guardar
Cada flujo de trabajo comienza ya sea creando un nuevo documento o cargando uno existente. Document.Create() devuelve una nueva instancia vacía de Document. Document.Open(data) acepta un byte[] o un Stream y analiza la estructura del 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
Este fragmento abre un PDF mínimo, agrega una anotación de enlace a la página 1, lo guarda en un MemoryStream y verifica que la anotación se conserve después de recargar. La sobrecarga Document.Save(Stream) escribe la estructura completa actualizada; Document.ToArray() devuelve los bytes directamente.
Acceso a la página y la colección de páginas
Las páginas se acceden a través de la propiedad Pages usando un índice entero basado en 1: doc.Pages[1] devuelve la primera página, doc.Pages[doc.Pages.Count] devuelve la última. Cada objeto Page expone:
Annotations— elAnnotationCollectionpara esa página, con soporte deAddLinkAnnotationy enumeración de anotaciones existentes por tipo.- Operadores de flujo de contenido — acceso de bajo nivel a los comandos de dibujo de la página mediante la colección
Operators.
El índice basado en 1 es consistente en toda la API: búsquedas de anotaciones, índices de página de destino de la acción GoTo y todas las demás referencias de página utilizan la misma convención.
Extracción de texto con TextFragmentAbsorber
TextFragmentAbsorber es el punto de entrada estándar para leer texto de una página PDF. Use el constructor sin argumentos para extraer todos los fragmentos, o pase una frase de búsqueda para filtrar al texto coincidente:
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}");
}
Llame a absorber.Visit(page) para procesar una sola página. La colección TextFragments resultante contiene TextFragment objetos; cada uno expone Text (el contenido de cadena) y FontSize (el tamaño de punto renderizado). Una segunda sobrecarga TextFragmentAbsorber(searchPhrase, isRegex) acepta una bandera de expresión regular para búsqueda basada en patrones.
Acciones Interactivas
PdfAction es la clase de fábrica para todos los tipos de acción PDF estándar. Cuatro métodos estáticos de fábrica cubren los casos más comunes:
PdfAction.CreateUri(uri)— abre una URL en el navegador del usuario.PdfAction.CreateGoTo(pageIndex, fitType)— navega a una página específica dentro del documento.PdfAction.CreateJavaScript(script)— ejecuta una cadena JavaScript en el visor de PDF.PdfAction.CreateLaunch(filePath)— lanza un archivo o aplicación externa.
Las acciones se adjuntan a las páginas mediante anotaciones. AnnotationCollection.AddLinkAnnotation(rectangle, action) coloca un LinkAnnotation sobre la región rectangular especificada con la acción dada adjunta:
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 confirma que la anotación se creó como un tipo de enlace. El constructor Rectangle toma las coordenadas izquierda, inferior, derecha y superior en unidades del espacio de usuario PDF.
Metadatos del documento y licencias
La clase Document expone IsLicensed (devuelve true en la compilación FOSS), JavaScript (un JavaScriptCollection para scripts a nivel de documento), y DocumentActions para eventos del ciclo de vida como BeforeClosing y BeforeSaving.
El paquete FOSS se instala a través de NuGet:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
No se requiere clave de licencia. La licencia MIT permite el uso en aplicaciones comerciales sin requisitos de atribución más allá de preservar el aviso de licencia.