Introducción
Aspose.PDF FOSS for C++ es una nueva biblioteca de código abierto para trabajar con documentos PDF desde código C++20. Se publica bajo la licencia MIT y no tiene dependencias de tiempo de ejecución más allá de la biblioteca estándar de C++ — los codificadores BMP, JPEG y TIFF, el rasterizador de página y el analizador PDF se implementan internamente, por lo que no hay enlace a un motor PDF comercial, a un códec de imagen externo o a una biblioteca de criptografía de terceros.
La biblioteca está organizada en torno a la clase Aspose::Pdf::Document, que carga un PDF desde una ruta de archivo y expone su contenido a través de Document.Pages(), una PageCollection de objetos Page individuales. A partir de ahí, el API cubre la extracción de texto, rasterización de páginas, cifrado de documentos, anotaciones y campos AcroForm — las operaciones necesarias para leer, inspeccionar y modificar archivos PDF existentes, o crear nuevos desde cero.
Esta versión está dirigida a desarrolladores que requieren procesamiento de PDF dentro de una base de código C++ sin añadir una licencia comercial ni una cadena de dependencias de terceros: canalizaciones de documentos, servicios de extracción de contenido, herramientas de conversión de PDF a imagen y aplicaciones que necesitan cifrar o leer datos de formularios como parte de una compilación mayor.
Qué incluye
Carga de documentos y acceso a páginas
Abrir un PDF existente es una única llamada al constructor. Document analiza el archivo y expone sus páginas a través de Pages(), que devuelve una PageCollection que admite indexación basada en 1, Count(), y Add()/Insert()/Delete() para reestructurar el orden de las páginas.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
std::cout << "Page count: " << doc.Pages().Count() << "\n";
auto page = doc.Pages()[1];
std::cout << "First page number: " << page.Number() << "\n";
}
Extracción de texto
Aspose::Pdf::Text::TextAbsorber recorre un Document o una Page individual y recopila el contenido de texto que encuentra. Llame a Visit() con un documento o una página, luego lea el resultado con Text(). HasErrors() indica si el absorber encontró contenido que no pudo procesar.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
if (absorber.HasErrors()) {
std::cerr << "Some content could not be extracted\n";
}
}
Renderizado a imágenes raster
Las páginas se renderizan a BMP, JPEG o TIFF mediante las clases BmpDevice, JpegDevice y TiffDevice. Cada dispositivo se construye con una Resolution y expone un método Process(page, output) que escribe la imagen renderizada en un flujo 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("input.pdf");
Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
bmp.Process(doc.Pages()[1], out);
}
Cifrado
Document.Encrypt() protege un documento con una contraseña de usuario, una contraseña de propietario, un valor de permiso y una selección de CryptoAlgorithm. El enumerado incluye RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) y AES-256 (AESx256). Document.Decrypt() revierte la operación, y IsEncrypted() indica si un documento está actualmente cifrado.
#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
Cada Page expone una AnnotationCollection mediante Annotations(). Una TextAnnotation se construye sobre el documento propietario, se posiciona con un Rectangle y se agrega a la colección de la página con Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Annotations::TextAnnotation note(doc);
note.Rect(Aspose::Pdf::Rectangle(100.0, 700.0, 200.0, 720.0, false));
note.Contents("Reviewed - see section 2");
doc.Pages()[1].Annotations().Add(note);
doc.Save("annotated.pdf");
}
Campos AcroForm
Document.Form() devuelve el Form del documento, que expone los campos existentes mediante Fields() como un std::vector<Field*>. Cada Field informa su nombre y valor actual a través de PartialName() y Value(), y Form.Flatten() incorpora la apariencia de cada campo en el contenido de la página, eliminando la interactividad.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("form.pdf");
auto& form = doc.Form();
std::cout << "Field count: " << form.Count() << "\n";
for (auto* field : form.Fields()) {
std::cout << field->PartialName() << " = " << field->Value() << "\n";
}
form.Flatten();
doc.Save("flattened.pdf");
}
Inicio rápido
Agregue la biblioteca como un subdirectorio de CMake y vincúlela contra el objetivo aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Abre un documento, muestra su número de páginas, extrae su texto y renderiza la primera página a un archivo BMP:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
std::cout << "Pages: " << doc.Pages().Count() << "\n";
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
bmp.Process(doc.Pages()[1], out);
}
Formatos compatibles
| Formato | Extensión | Leer | Escribir |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG y TIFF son salidas de renderizado de página producidas por sus respectivas clases de dispositivo. El texto se extrae de un PDF mediante TextAbsorber. SVG se importa como contenido vectorial a través de la ruta de carga SVG de la biblioteca.
Código abierto y licencias
Aspose.PDF FOSS para C++ se distribuye bajo la licencia MIT, con el código fuente completo disponible en github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licencia permite el uso comercial, la modificación y la redistribución sin un acuerdo separado.