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; chameSave()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 deSave()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,TextBoxFielde semelhantes) vivos até depois queSave()retorne, pois o documento mantém referências ao conteúdo da página ao qual foram adicionados.
Problemas comuns
| Problema | Causa | Correção |
|---|---|---|
Save() produz um arquivo com conteúdo inalterado | As 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 senha | Senha do usuário deixada vazia | Passe uma string não vazia como argumento userPassword |
| O texto extraído está vazio para um PDF escaneado | A página contém apenas conteúdo de imagem raster, não operadores de texto | TextAbsorber 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ágina | O Rectangle do campo está fora dos MediaBox da página | Confirme 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étodo | Descrição |
|---|---|
Document | Objeto 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 |
TextAbsorber | Extrai texto simples de um documento ou página |
TextFragmentAbsorber | Extrai fragmentos de texto posicionados |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Renderizar uma página para um formato de imagem raster |
Resolution | DPI de saída passado para um dispositivo de renderização |
CryptoAlgorithm | Seleção do algoritmo de criptografia: RC4 ou AES, 40–256 bits |
Permissions | Sinalizadores de controle de acesso passados para Encrypt() |
Annotation / AnnotationCollection | Tipo base e contêiner para anotações de página |
TextAnnotation | Anotação de nota de texto |
Form | AcroForm contêiner de campo alcançado via Document.Form() |
TextBoxField | Campo de formulário de texto de linha única/múltiplas linhas |