Geração de PDF em C++: visão geral das bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 install


Exemplo: 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-dev


Exemplo: 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 <

Recommendations