Aspose.PDF FOSS for C++ Recursos

Aspose.PDF FOSS for C++ Recursos

Aspose.PDF FOSS para C++ Recursos

Aspose.PDF FOSS for C++ é uma biblioteca C++20 para criar, abrir, modificar e salvar documentos PDF. Esta página apresenta as principais áreas de capacidade e as classes que servem como pontos de entrada. Cada área é abordada em detalhes em sua própria página do guia do desenvolvedor.


Gerenciamento de Documentos

Aspose::Pdf::Document é o objeto raiz para cada operação. Ele abre um arquivo existente a partir de um caminho, expõe a coleção de páginas via Pages(), e persiste as alterações com Save(). Optimize() e OptimizeResources() reduzem o tamanho do arquivo removendo recursos não utilizados ou 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");
}

Extração de Texto

Aspose::Pdf::Text::TextAbsorber percorre um documento ou uma única página e coleta o texto simples, que é recuperado com Text() após chamar Visit(). TextFragmentAbsorber realiza o mesmo percurso, mas devolve objetos TextFragment individuais através de TextFragments(), proporcionando acesso à posição e ao estado de 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";
}

Renderização para Imagens Raster

Dispositivos de renderização de página convertem um Page em uma imagem raster. BmpDevice, PngDevice, JpegDevice e TiffDevice compartilham a mesma assinatura Process(page, output) e são construídos com um Resolution que define a DPI de saída.

#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);
}

Criptografia

Document::Encrypt() protege um documento com senha de usuário (necessária para abrir) e senha de proprietário (necessária para alterar permissões), usando um algoritmo selecionado a partir do enum CryptoAlgorithm: RC4x40, RC4x128, AESx128 ou AESx256. IsEncrypted() relata o estado atual e Decrypt() remove a proteção de um documento já aberto.

#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");
}

Anotações

Anotações anexam notas visíveis, formas e marcações a uma página. Cada tipo de anotação deriva de Annotation e é construído com o Page de destino e um Rectangle de posicionamento, sendo então adicionado à página por meio de Anotações() (um 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

Campos AcroForm são gerenciados através de Aspose::Pdf::Forms::Form, acessíveis via Document::Form(). Tipos de campo como TextBoxField são construídos como anotações — com um Page e um Rectangle — e registrados em 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");
}

Dicas e Melhores Práticas

  • Abra arquivos de entrada pelo caminho usando o construtor Document; chame Save() com um caminho de saída explícito em vez de sobrescrever a origem enquanto outras alças a ela ainda podem estar abertas.
  • Chame Optimize() antes de Save() quando um documento foi amplamente editado — ele remove recursos que não são mais referenciados por nenhuma página.
  • Construa dispositivos raster (BmpDevice, PngDevice, JpegDevice, TiffDevice) uma vez por resolução e reutilize-os entre páginas em vez de recriar um dispositivo por página.
  • Defina tanto a senha de usuário quanto a senha de proprietário ao chamar Encrypt() — uma senha de usuário vazia permite que qualquer visualizador abra o arquivo, enquanto a senha de proprietário controla as alterações de permissão.
  • Mantenha os objetos de anotação e de campo (TextAnnotation, TextBoxField e semelhantes) vivos até depois que Save() retorne, pois o documento mantém referências ao conteúdo da página ao qual foram adicionados.

Problemas comuns

ProblemaCausaCorreção
Save() produz um arquivo com conteúdo inalteradoAs edições foram feitas em uma cópia de página ou anotação em vez do objeto obtido de doc.Pages()Modifique o objeto retornado diretamente por Pages(), Annotations() ou Form()
A imagem renderizada está vazia ou em brancoÍndice de página incorreto passado para Process()PageCollection usa indexação a partir de 1 — página 1 é doc.Pages()[1], não [0]
Encrypt() produz um arquivo que ainda abre sem senhaSenha do usuário deixada vaziaPasse uma string não vazia como argumento userPassword
O texto extraído está vazio para um PDF escaneadoA página contém apenas conteúdo de imagem raster, não operadores de textoTextAbsorber lê operadores de texto; páginas que contêm apenas imagens não têm nenhum para extrair
Campo adicionado com Form::Add() não aparece na páginaO Rectangle do campo está fora dos MediaBox da páginaConfirme se as coordenadas do retângulo estão dentro dos limites de Page::MediaBox()

FAQ

O Aspose.PDF FOSS para C++ depende de alguma biblioteca PDF comercial?

Não. É uma implementação do zero em C++20 sem dependência de nenhuma pilha comercial de PDF, lançada sob a licença MIT.

Posso criar um novo PDF do zero em vez de abrir um existente?

Sim. Document possui um construtor padrão que cria um documento vazio; chame Pages().Add() para acrescentar páginas antes de salvar.

Para quais formatos raster eu posso renderizar?

BmpDevice, PngDevice, JpegDevice e TiffDevice renderizam páginas individuais para BMP, PNG, JPEG e TIFF, respectivamente.

Quais algoritmos de criptografia são suportados?

CryptoAlgorithm oferece RC4x40, RC4x128, AESx128 e AESx256, passados para Document::Encrypt().

Para onde devo ir a seguir?

O guia do desenvolvedor inclui páginas dedicadas para gerenciamento de documentos e páginas, gráficos e formas nativas de PDF, anotações e formulários interativos, e as classes de fachada de nível superior que encapsulam operações comuns de arquivo.


API Reference Resumo

Classe/MétodoDescrição
DocumentObjeto raiz — abrir, criar, salvar e otimizar um PDF
Document.Pages()Retorna o PageCollection do documento
Document.Encrypt() / Decrypt()Proteger com senha ou remover a proteção de um documento
Document.Form()Retorna o contêiner AcroForm do documento
TextAbsorberExtrai texto simples de um documento ou página
TextFragmentAbsorberExtrai fragmentos de texto posicionados
BmpDevice / PngDevice / JpegDevice / TiffDeviceRenderizar uma página para um formato de imagem raster
ResolutionDPI de saída passado para um dispositivo de renderização
CryptoAlgorithmSeleção do algoritmo de criptografia: RC4 ou AES, 40–256 bits
PermissionsSinalizadores de controle de acesso passados para Encrypt()
Annotation / AnnotationCollectionTipo base e contêiner para anotações de página
TextAnnotationAnotação de nota de texto
FormAcroForm contêiner de campo alcançado via Document.Form()
TextBoxFieldCampo de formulário de texto de linha única/múltiplas linhas

Ver também

 Português