Geração de PDF em C++: visão geral de bibliotecas e ferramentas
A geração de documentos PDF é uma das tarefas frequentes no desenvolvimento de software. Relatórios, faturas, certificados, documentação — tudo isso requer uma ferramenta confiável e flexível para criar PDFs. No ecossistema C++, existem várias soluções testadas, cada uma com seus pontos fortes. Neste artigo, veremos as principais bibliotecas e ferramentas que ajudarão você a implementar a geração de PDF em C++, além de fornecer exemplos de código para cada uma delas.
1. PoDoFo — biblioteca poderosa para trabalhar com PDF
PoDoFo é uma biblioteca multiplataforma em C++ projetada para criar, editar e analisar documentos PDF. Ela fornece controle total sobre a estrutura do arquivo, suporta fontes, imagens, anotações e formulários.
Principais recursos:
- Criação de PDF do zero e edição de documentos existentes
- Suporte para TrueType, Type1 e fontes padrão PDF
- Incorporação de imagens (PNG, JPEG, TIFF)
- Trabalho com tabelas e documentos de várias páginas
- Suporte para compactação e criptografia
Exemplo de código: criação de um PDF simples com texto
#include <podofo/podofo.h>using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetPage(page);
// Define a fonte PdfFont* font = document.CreateFont("Arial"); painter.SetFont(font, 12.0);
// Desenha o texto painter.DrawText("Olá, mundo PDF!", 50, 700);
painter.FinishPage(); document.Save("output_podofo.pdf"); return 0;}2. libharu — biblioteca leve e rápida
libharu (ou HPDF) é uma biblioteca minimalista em C para geração de PDF. Apesar de ser escrita em C, ela funciona perfeitamente com C++ e não requer dependências complexas. libharu é ideal para tarefas simples onde não é necessário suporte completo ao padrão PDF.
Principais recursos:
- Suporte para texto, imagens, linhas e retângulos
- Trabalho com cirílico através de codificações
- Compactação de páginas
- Licença Zlib (livre)
Exemplo de código: criação de PDF com imagem
#include <hpdf.h>#include <stdio.h>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT);
// Carrega a imagem HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, "example.jpg"); HPDF_Page_DrawImage(page, image, 50, 500, 200, 150);
// Texto HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 14); HPDF_Page_TextOut(page, 50, 700, "Exemplo com imagem"); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output_libharu.pdf"); HPDF_Free(pdf); return 0;}3. wkhtmltopdf — conversão de HTML para PDF
wkhtmltopdf não é uma biblioteca no sentido clássico, mas um utilitário de linha de comando baseado no WebKit. No entanto, pode ser facilmente chamado a partir do código C++ via system() ou popen(). É a escolha ideal se você precisa transformar um template HTML em um documento PDF preservando estilos e layout.
Principais recursos:
- Suporte para CSS, JavaScript, tabelas e imagens
- Configuração de margens, orientação, cabeçalhos e rodapés
- Alta qualidade de renderização
- Facilidade de integração
Exemplo de código: chamada do wkhtmltopdf a partir do C++
#include <cstdlib>#include <string>
int main() { std::string input = "report.html"; std::string output = "report.pdf"; std::string Também na biblioteca
Cliente Elasticsearch para Java: guia completo para trabalhar com o Java Client
ORM para C++: comparação e exemplos de uso de bibliotecas
Container de Injeção de Dependência Swift: Swinject para iOS/macOS