Generación de PDF en C++: resumen de bibliotecas y ejemplos prácticos
La generación de documentos PDF es una de las tareas frecuentes en el desarrollo de aplicaciones empresariales, sistemas de informes y gestión documental. A pesar de que C++ no tiene soporte integrado para el formato PDF, existen varias bibliotecas maduras que permiten crear, editar y renderizar archivos PDF. En este artículo, analizaremos tres herramientas populares: libharu, PoDoFo y wkhtmltopdf. Para cada una, proporcionaremos un ejemplo de código y describiremos las funcionalidades clave.
1. libharu — generación de PDF ligera y rápida
libharu (Haru PDF) es una biblioteca multiplataforma en C puro que se adapta perfectamente a proyectos de C++. No depende de bibliotecas gráficas externas, admite Unicode (UTF-8), incrustación de fuentes (TrueType) y trabajo con imágenes (JPEG, PNG). El escenario principal es la creación programática de documentos «desde cero».
Instalación
Descargue el código fuente desde GitHub y compílelo con CMake:
mkdir build && cd buildcmake .. -DLIBHPDF_SHARED=ONmakesudo make installEjemplo: creación de un PDF simple con 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);
// Fuente 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, "¡Hola, mundo! PDF desde C++."); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("PDF creado: output.pdf"); return 0;}Funcionalidades de libharu
- Creación de documentos multipágina
- Gráficos vectoriales (líneas, rectángulos, curvas)
- Incrustación de imágenes JPEG/PNG
- Soporte de marcadores (outline) y anotaciones
- Compresión del contenido de las páginas
2. PoDoFo — trabajo avanzado con PDF
PoDoFo es una biblioteca de C++ con control total sobre la estructura del PDF. Permite no solo crear, sino también editar documentos existentes, extraer texto, gestionar metadatos y cifrado. PoDoFo utiliza CMake y requiere una configuración mínima.
Instalación (Ubuntu/Debian)
sudo apt install libpodofo-devEjemplo: añadir texto a una 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, "¡Generado con PoDoFo!");
painter.FinishDrawing(); document.Save("podofo_example.pdf"); return 0;}Fortalezas de PoDoFo
- Soporte de PDF/A (formato de archivo)
- Cifrado y establecimiento de contraseñas
- Extracción de texto e imágenes de PDF
- Trabajo con formularios (AcroForms)
- Edición de PDF existentes (añadir/eliminar páginas)
3. wkhtmltopdf — HTML a PDF mediante C++
wkhtmltopdf es una utilidad de consola que convierte páginas HTML a PDF utilizando el motor WebKit. Para C++, puede invocarla a través de system() o <