Características de Aspose.PDF FOSS for C++
Aspose.PDF FOSS para C++ Características
Aspose.PDF FOSS for C++ es una biblioteca C++20 para crear, abrir, modificar y guardar documentos PDF. Esta página examina las principales áreas de capacidad y las clases que actúan como sus puntos de entrada. Cada área se trata en profundidad en su propia página de guía de desarrollo.
Gestión de documentos
Aspose::Pdf::Document es el objeto raíz para cada operación. Abre un archivo existente desde una ruta, expone la colección de páginas a través de Pages(), y persiste los cambios con Save(). Optimize() y OptimizeResources() reducen el tamaño del archivo al eliminar recursos no usados o duplicados.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}Extracción de texto
Aspose::Pdf::Text::TextAbsorber recorre un documento o una sola página y recoge texto plano, que se recupera con Text() después de llamar a Visit(). TextFragmentAbsorber realiza el mismo recorrido pero devuelve objetos TextFragment individuales a través de TextFragments(), proporcionando acceso a la posición y al estado del texto de cada fragmento.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}Renderizado a imágenes raster
Los dispositivos de renderizado de página convierten un Page en una imagen raster. BmpDevice, PngDevice, JpegDevice y TiffDevice comparten la misma firma Process(page, output) y se construyen con un Resolution que establece la DPI de salida.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}Cifrado
Document::Encrypt() protege un documento con una contraseña de usuario (necesaria para abrirlo) y una contraseña de propietario (necesaria para cambiar permisos), usando un algoritmo seleccionado del enumerado CryptoAlgorithm: RC4x40, RC4x128, AESx128 o AESx256. IsEncrypted() informa del estado actual y Decrypt() elimina la protección de un documento ya abierto.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions::PrintDocument,
Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");
}Anotaciones
Las anotaciones adjuntan notas visibles, formas y marcas a una página. Cada tipo de anotación deriva de Annotation y se construye con el Page objetivo y una Rectangle de ubicación, luego se agrega a la página mediante Anotaciones() (un AnnotationCollection).
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
Los campos AcroForm se gestionan a través de Aspose::Pdf::Forms::Form, accesibles mediante Document::Form(). Los tipos de campo como TextBoxField se construyen como anotaciones — con un Page y un Rectangle — y se registran con Form::Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}Consejos y Mejores Prácticas
- Abra los archivos de entrada por ruta con el constructor
Document; llame aSave()con una ruta de salida explícita en lugar de sobrescribir la fuente mientras otros manejadores de ella aún puedan estar abiertos. - Llame a
Optimize()antes deSave()cuando un documento ha sido editado intensamente — elimina los recursos que ya no están referenciados por ninguna página. - Construya dispositivos raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) una vez por resolución y reutilícelos en varias páginas en lugar de recrear un dispositivo por página. - Establezca tanto una contraseña de usuario como una de propietario al llamar a
Encrypt()— una contraseña de usuario vacía permite que cualquier visor abra el archivo, mientras que la contraseña de propietario controla los cambios de permisos. - Mantenga vivos los objetos de anotación y campo (
TextAnnotation,TextBoxFieldy similares) hasta después de queSave()devuelva, ya que el documento mantiene referencias al contenido de la página al que fueron añadidos.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
Save() produce un archivo con contenido sin cambios | Se realizaron ediciones a una copia de página o anotación en lugar del objeto obtenido de doc.Pages() | Modifique el objeto devuelto directamente por Pages(), Annotations() o Form() |
| La imagen renderizada está vacía o en blanco | Índice de página incorrecto pasado a Process() | PageCollection está indexado desde 1 — la página 1 es doc.Pages()[1], no [0] |
Encrypt() produce un archivo que aún se abre sin contraseña | Contraseña de usuario dejada vacía | Pase una cadena no vacía como argumento userPassword |
| El texto extraído está vacío para un PDF escaneado | La página contiene solo contenido de imagen raster, no operadores de texto | TextAbsorber lee operadores de texto; las páginas solo con imágenes no tienen ninguno para extraer |
El campo añadido con Form::Add() no aparece en la página | El Rectangle del campo está fuera de los MediaBox de la página | Confirme que las coordenadas del rectángulo estén dentro de los límites de Page::MediaBox() |
FAQ
¿Depende Aspose.PDF FOSS para C++ de alguna biblioteca PDF comercial?
No. Es una implementación desde cero en C++20 sin dependencia de ninguna pila comercial de PDF, publicada bajo la licencia MIT.
¿Puedo crear un PDF nuevo desde cero en lugar de abrir uno existente?
Sí. Document tiene un constructor por defecto que crea un documento vacío; llama a Pages().Add() para añadir páginas antes de guardar.
¿A qué formatos raster puedo renderizar?
BmpDevice, PngDevice, JpegDevice y TiffDevice renderizan páginas individuales a BMP, PNG, JPEG y TIFF respectivamente.
¿Qué algoritmos de cifrado son compatibles?
CryptoAlgorithm ofrece RC4x40, RC4x128, AESx128 y AESx256, pasados a Document::Encrypt().
¿A dónde voy a continuación?
La guía del desarrollador incluye páginas dedicadas para la gestión de documentos y páginas, gráficos y formas nativas de PDF, anotaciones y formularios interactivos, y las clases fachada de nivel superior que envuelven operaciones de archivo comunes.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
Document | Objeto raíz — abrir, crear, guardar y optimizar un PDF |
Document.Pages() | Devuelve el PageCollection del documento |
Document.Encrypt() / Decrypt() | Proteger con contraseña o eliminar la protección de un documento |
Document.Form() | Devuelve el contenedor AcroForm del documento |
TextAbsorber | Extrae texto sin formato de un documento o página |
TextFragmentAbsorber | Extrae fragmentos de texto posicionados |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Renderizar una página a un formato de imagen raster |
Resolution | DPI de salida pasado a un dispositivo de renderizado |
CryptoAlgorithm | Selección del algoritmo de cifrado: RC4 o AES, 40–256 bits |
Permissions | Banderas de control de acceso pasadas a Encrypt() |
Annotation / AnnotationCollection | Tipo base y contenedor para anotaciones de página |
TextAnnotation | Anotación de nota de texto |
Form | contenedor de campo AcroForm alcanzado mediante Document.Form() |
TextBoxField | Campo de formulario de texto de una sola línea/múltiples líneas |