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 em C++. Desde a criação de relatórios simples até a elaboração de documentos complexos de várias páginas com tabelas, imagens e gráficos. Neste artigo, veremos as bibliotecas e ferramentas mais populares para trabalhar com PDF em C++, seus recursos, vantagens e desvantagens, além de fornecer exemplos práticos de código.
Por que a geração de PDF em C++ é necessária?
PDF (Portable Document Format) é um formato multiplataforma que preserva a diagramação do documento independentemente do dispositivo e sistema operacional. Em C++, a geração de PDF é necessária para:
- Criação de relatórios e faturas em aplicações empresariais
- Formatação de documentação a partir de modelos
- Exportação de dados de bancos de dados
- Geração de recibos e notas fiscais em sistemas de contabilidade
Principais bibliotecas para trabalhar com PDF em C++
1. libharu (HARU PDF)
Uma das bibliotecas mais populares e fáceis de usar para geração de PDF. Escrita em C, mas possui uma excelente interface C++. Permite criar documentos PDF do zero, adicionar texto, imagens, linhas, retângulos, anotações.
Características:
- Tamanho pequeno e alta performance
- Suporte a fontes TrueType
- Compressão de páginas
- Trabalho com imagens (JPEG, PNG)
- Licença: ZLIB/Libpng (livre)
Exemplo de geração de PDF simples:
#include <hpdf.h>#include <stdio.h>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); // Define o tamanho da página A4 HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE); // Adiciona texto HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 100, 500, "Olá, mundo PDF em C++!"); HPDF_Page_EndText(page); // Salva o documento HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); return 0;}2. PoDoFo
Uma biblioteca C++ moderna de código aberto para trabalhar com PDF. Suporta não apenas a criação, mas também a edição de arquivos PDF existentes. Bem documentada e ativamente mantida.
Características:
- Código C++ puro (padrões modernos)
- Suporte a Unicode e cirílico
- Trabalho com formulários, marcadores, metadados
- Leitura e escrita de PDF
- Licença: LGPL
Exemplo de criação de PDF com tabela:
#include <podofo/podofo.h>
using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page); // Desenha a tabela painter.DrawRect(50, 700, 500, 30); painter.DrawText(60, 710, "Cabeçalho da tabela"); // Salva painter.FinishPage(); document.Save("table.pdf"); return 0;}3. wkhtmltopdf
Não é uma biblioteca no sentido clássico, mas um utilitário de linha de comando que usa o motor WebKit para converter HTML em PDF. Em C++, pode ser chamado via system() ou usando uma biblioteca wrapper.
Características:
- Ideal para geração de PDF a partir de modelos HTML
- Suporte a CSS, JavaScript, SVG
- Diagramação de alta qualidade (como no navegador)
- Cabeçalhos e rodapés, sumário, numeração de páginas
- Licença: LGPLv3
Exemplo de chamada a partir de C++:
#include <cstdlib>
int main() { // Converte arquivo HTML em PDF int result = std::system("w Também na biblioteca
Filas de Tarefas para PHP: RabbitMQ, Gearman e PhpAmqpLib
Validação de dados em C++: bibliotecas e métodos (libvalidate, nlohmann/json, Boost)