Generación de PDF en C++: bibliotecas, herramientas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations