Geração de PDF em C++: visão geral das bibliotecas e exemplos práticos
A geração de documentos PDF é uma das tarefas frequentes no desenvolvimento de aplicações corporativas, sistemas de relatórios e fluxo de documentos. Apesar de C++ não ter suporte nativo ao formato PDF, existem várias bibliotecas maduras que permitem criar, editar e renderizar arquivos PDF. Neste artigo, analisaremos três ferramentas populares: libharu, PoDoFo e wkhtmltopdf. Para cada uma, forneceremos um exemplo de código e descreveremos os principais recursos.
1. libharu — geração de PDF leve e rápida
libharu (Haru PDF) é uma biblioteca multiplataforma em C puro que se adapta perfeitamente a projetos C++. Ela não depende de bibliotecas gráficas externas, suporta Unicode (UTF-8), incorporação de fontes (TrueType) e trabalho com imagens (JPEG, PNG). O cenário principal é a criação programática de documentos "do zero".
Instalação
Baixe o código-fonte do GitHub e compile usando CMake:
mkdir build && cd buildcmake .. -DLIBHPDF_SHARED=ONmakesudo make installExemplo: criação de um PDF simples com texto
#include <hpdf.h>#include <cstdio>
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);
// Fonte const char* font_name = HPDF_LoadTTFontFromFile(pdf, "arial.ttf", HPDF_TRUE); HPDF_Font font = HPDF_GetFont(pdf, font_name, "UTF-8"); HPDF_Page_SetFontAndSize(page, font, 14);
// Texto HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 50, 750, "Olá, mundo! PDF a partir de C++."); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("PDF criado: output.pdf"); return 0;}Recursos do libharu
- Criação de documentos com várias páginas
- Gráficos vetoriais (linhas, retângulos, curvas)
- Incorporação de imagens JPEG/PNG
- Suporte a marcadores (outline) e anotações
- Compressão do conteúdo das páginas
2. PoDoFo — trabalho avançado com PDF
PoDoFo é uma biblioteca C++ com controle total sobre a estrutura do PDF. Ela permite não apenas criar, mas também editar documentos existentes, extrair texto, gerenciar metadados e criptografia. O PoDoFo usa CMake e requer configuração mínima.
Instalação (Ubuntu/Debian)
sudo apt install libpodofo-devExemplo: adicionar texto a uma página
#include <podofo/podofo.h>using namespace PoDoFo;
int main() { PdfMemDocument document; document.SetPdfVersion(PdfVersion::V1_4); document.GetMetadata().SetTitle("Documento PoDoFo");
PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page);
PdfFont* font = document.CreateFont("Arial", false, false, false); font->SetFontSize(16); painter.SetFont(font); painter.DrawText(50, 700, "Gerado com PoDoFo!");
painter.FinishDrawing(); document.Save("podofo_example.pdf"); return 0;}Pontos fortes do PoDoFo
- Suporte a PDF/A (formato de arquivamento)
- Criptografia e definição de senhas
- Extração de texto e imagens de PDF
- Trabalho com formulários (AcroForms)
- Edição de PDFs existentes (adição/remoção de páginas)
3. wkhtmltopdf — HTML para PDF via C++
wkhtmltopdf é um utilitário de linha de comando que converte páginas HTML em PDF usando o motor WebKit. Para C++, você pode chamá-lo através de system() ou <
Também na biblioteca
Container de Injeção de Dependência para Swift (iOS/macOS): Swinject
Knex.js para JavaScript (Node.js): guia completo com exemplos práticos
Geração de PDF em JavaScript: biblioteca PDFKit
Autorização e Autenticação em TypeScript: guia completo