Introdução
Aspose.PDF FOSS for C++ é uma nova biblioteca de código aberto para trabalhar com documentos PDF a partir de código C++20. É lançada sob a licença MIT e não possui dependência em tempo de execução além da biblioteca padrão C++ — os codificadores BMP, JPEG e TIFF, o rasterizador de página e o analisador PDF são implementados internamente, portanto não há vínculo a um motor PDF comercial, a um codec de imagem externo ou a uma biblioteca de criptografia de terceiros.
A biblioteca está organizada em torno da classe Aspose::Pdf::Document, que carrega um PDF a partir de um caminho de arquivo e expõe seu conteúdo através de Document.Pages(), uma PageCollection de objetos Page individuais. A partir daí, o API abrange extração de texto, rasterização de páginas, criptografia de documentos, anotações e campos AcroForm — as operações necessárias para ler, inspecionar e modificar arquivos PDF existentes, ou criar novos do zero.
Esta versão destina‑se a desenvolvedores que precisam de processamento de PDF dentro de uma base de código C++ sem adicionar uma licença comercial ou uma cadeia de dependências de terceiros: pipelines de documentos, serviços de extração de conteúdo, ferramentas de conversão PDF‑para‑imagem e aplicações que precisam criptografar ou ler novamente dados de formulário como parte de uma compilação maior.
O que está incluído
Carregamento de Documentos e Acesso a Páginas
Abrir um PDF existente é uma única chamada ao construtor. Document analisa o arquivo e expõe suas páginas através de Pages(), que devolve uma PageCollection com suporte a indexação baseada em 1, Count() e Add()/Insert()/Delete() para reestruturar a ordem das 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";
}
Extração de Texto
Aspose::Pdf::Text::TextAbsorber percorre um Document ou uma única Page e coleta o conteúdo de texto que encontra. Chame Visit() com um documento ou uma página, e então leia o resultado com Text(). HasErrors() informa se o absorvedor encontrou conteúdo que não pôde processar.
#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";
}
}
Renderização para Imagens Raster
As páginas são renderizadas para BMP, JPEG ou TIFF através das classes BmpDevice, JpegDevice e TiffDevice. Cada dispositivo é construído com uma Resolution e expõe o método Process(page, output) que grava a imagem renderizada em um fluxo 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("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);
}
Criptografia
Document.Encrypt() protege um documento com uma senha de usuário, uma senha de proprietário, um valor de permissão e uma seleção de CryptoAlgorithm. O enum cobre RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) e AES-256 (AESx256). Document.Decrypt() reverte a operação, e IsEncrypted() indica se um documento está atualmente criptografado.
#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
Cada Page expõe uma AnnotationCollection através de Annotations(). Um TextAnnotation é construído a partir do documento proprietário, posicionado com um Rectangle, e adicionado à coleção da página com 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() retorna o Form do documento, que expõe os campos existentes através de Fields() como um std::vector<Field*>. Cada Field informa seu nome e valor atual por meio de PartialName() e Value(), e Form.Flatten() incorpora a aparência de cada campo ao conteúdo da página, removendo a interatividade.
#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");
}
Início Rápido
Adicione a biblioteca como um subdiretório CMake e vincule ao alvo aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Abra um documento, imprima sua contagem de páginas, extraia seu texto e renderize a primeira página para um arquivo 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 suportados
| Formato | Extensão | Ler | Escrever |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG e TIFF são saídas de renderização de página produzidas por suas respectivas classes de dispositivo. O texto é extraído de um PDF via TextAbsorber. SVG é importado como conteúdo vetorial através do caminho de carregamento SVG da biblioteca.
Código aberto e licenciamento
Aspose.PDF FOSS para C++ é distribuído sob a licença MIT, com o código-fonte completo disponível em github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. A licença permite uso comercial, modificação e redistribuição sem um acordo separado.