Geração de PDF em C++: bibliotecas, ferramentas 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 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

Recommendations