Características de Aspose.PDF FOSS for C++

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 a Save() 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 de Save() 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, TextBoxField y similares) hasta después de que Save() devuelva, ya que el documento mantiene referencias al contenido de la página al que fueron añadidos.

Problemas comunes

ProblemaCausaSolución
Save() produce un archivo con contenido sin cambiosSe 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ñaContraseña de usuario dejada vacíaPase una cadena no vacía como argumento userPassword
El texto extraído está vacío para un PDF escaneadoLa página contiene solo contenido de imagen raster, no operadores de textoTextAbsorber 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áginaEl Rectangle del campo está fuera de los MediaBox de la páginaConfirme 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étodoDescripción
DocumentObjeto 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
TextAbsorberExtrae texto sin formato de un documento o página
TextFragmentAbsorberExtrae fragmentos de texto posicionados
BmpDevice / PngDevice / JpegDevice / TiffDeviceRenderizar una página a un formato de imagen raster
ResolutionDPI de salida pasado a un dispositivo de renderizado
CryptoAlgorithmSelección del algoritmo de cifrado: RC4 o AES, 40–256 bits
PermissionsBanderas de control de acceso pasadas a Encrypt()
Annotation / AnnotationCollectionTipo base y contenedor para anotaciones de página
TextAnnotationAnotación de nota de texto
Formcontenedor de campo AcroForm alcanzado mediante Document.Form()
TextBoxFieldCampo de formulario de texto de una sola línea/múltiples líneas

Ver también

 Español