Generación de PDF en C++: resumen de bibliotecas y herramientas
La generación de documentos PDF es una de las tareas frecuentes en el desarrollo de software en C++. Desde la creación de informes simples hasta la elaboración de documentos complejos de varias páginas con tablas, imágenes y gráficos. En este artículo, revisaremos las bibliotecas y herramientas más populares para trabajar con PDF en C++, sus capacidades, ventajas y desventajas, y proporcionaremos ejemplos prácticos de código.
¿Por qué es necesaria la generación de PDF en C++?
PDF (Portable Document Format) es un formato multiplataforma que conserva el diseño del documento independientemente del dispositivo y del sistema operativo. En C++, la generación de PDF se requiere para:
- Crear informes y facturas en aplicaciones empresariales
- Generar documentación a partir de plantillas
- Exportar datos desde bases de datos
- Generar recibos y albaranes en sistemas de contabilidad
Bibliotecas principales para trabajar con PDF en C++
1. libharu (HARU PDF)
Una de las bibliotecas más populares y fáciles de usar para generar PDF. Está escrita en C, pero tiene una excelente interfaz en C++. Permite crear documentos PDF desde cero, agregar texto, imágenes, líneas, rectángulos, anotaciones.
Características:
- Tamaño pequeño y alto rendimiento
- Soporte para fuentes TrueType
- Compresión de páginas
- Trabajo con imágenes (JPEG, PNG)
- Licencia: ZLIB/Libpng (libre)
Ejemplo de generación de un PDF simple:
#include <hpdf.h>#include <stdio.h>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); // Establecemos el tamaño de página A4 HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE); // Agregamos texto HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 100, 500, "¡Hola, mundo PDF en C++!"); HPDF_Page_EndText(page); // Guardamos el documento HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); return 0;}2. PoDoFo
Una biblioteca moderna de C++ de código abierto para trabajar con PDF. Admite no solo la creación, sino también la edición de archivos PDF existentes. Está bien documentada y cuenta con soporte activo.
Características:
- Código C++ puro (estándares modernos)
- Soporte para Unicode y cirílico
- Trabajo con formularios, marcadores, metadatos
- Lectura y escritura de PDF
- Licencia: LGPL
Ejemplo de creación de PDF con tabla:
#include <podofo/podofo.h>
using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page); // Dibujamos una tabla painter.DrawRect(50, 700, 500, 30); painter.DrawText(60, 710, "Encabezado de la tabla"); // Guardamos painter.FinishPage(); document.Save("table.pdf"); return 0;}3. wkhtmltopdf
No es una biblioteca en el sentido clásico, sino una utilidad de línea de comandos que utiliza el motor WebKit para convertir HTML a PDF. En C++, se puede invocar mediante system() o usar una biblioteca envoltorio.
Características:
- Ideal para generar PDF a partir de plantillas HTML
- Soporte para CSS, JavaScript, SVG
- Maquetación de alta calidad (como en el navegador)
- Encabezados y pies de página, tabla de contenido, numeración de páginas
- Licencia: LGPLv3
Ejemplo de invocación desde C++:
#include <cstdlib>
int main() { // Convertimos un archivo HTML a PDF int result = std::system("w