Generación de PDF en C++: revisión de bibliotecas y herramientas

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++: revisión de bibliotecas y herramientas



La generación de documentos PDF es una de las tareas comunes en el desarrollo de software. Informes, facturas, certificados, documentación: todo esto requiere una herramienta confiable y flexible para crear PDF. En el ecosistema de C++, existen varias soluciones probadas, cada una con sus propias fortalezas. En este artículo, revisaremos las principales bibliotecas y herramientas que le ayudarán a implementar la generación de PDF en C++, y también proporcionaremos ejemplos de código para cada una de ellas.



1. PoDoFo — una potente biblioteca para trabajar con PDF



PoDoFo es una biblioteca multiplataforma en C++ diseñada para crear, editar y analizar documentos PDF. Proporciona control total sobre la estructura del archivo, admite fuentes, imágenes, anotaciones y formularios.



Características principales:

  • Creación de PDF desde cero y edición de documentos existentes
  • Soporte para TrueType, Type1 y fuentes PDF estándar
  • Inserción de imágenes (PNG, JPEG, TIFF)
  • Trabajo con tablas y documentos de varias páginas
  • Soporte para compresión y cifrado


Ejemplo de código: creación de un PDF simple con texto

#include <podofo/podofo.h>using namespace PoDoFo;

int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetPage(page);

// Establecer la fuente PdfFont* font = document.CreateFont("Arial"); painter.SetFont(font, 12.0);

// Dibujar texto painter.DrawText("¡Hola, mundo PDF!", 50, 700);

painter.FinishPage(); document.Save("output_podofo.pdf"); return 0;}


2. libharu — una biblioteca ligera y rápida



libharu (o HPDF) es una biblioteca minimalista en C para la generación de PDF. A pesar de estar escrita en C, funciona perfectamente con C++ y no requiere dependencias complejas. libharu es ideal para tareas simples donde no se necesita soporte completo del estándar PDF.



Características principales:

  • Soporte para texto, imágenes, líneas y rectángulos
  • Trabajo con caracteres cirílicos mediante codificaciones
  • Compresión de páginas
  • Licencia Zlib (libre)


Ejemplo de código: creación de un PDF con una imagen

#include <hpdf.h>#include <stdio.h>

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);

// Cargar imagen HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, "example.jpg"); HPDF_Page_DrawImage(page, image, 50, 500, 200, 150);

// Texto HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 14); HPDF_Page_TextOut(page, 50, 700, "Ejemplo con imagen"); HPDF_Page_EndText(page);

HPDF_SaveToFile(pdf, "output_libharu.pdf"); HPDF_Free(pdf); return 0;}


3. wkhtmltopdf — conversión de HTML a PDF



wkhtmltopdf no es una biblioteca en el sentido clásico, sino una utilidad de línea de comandos basada en WebKit. Sin embargo, se puede llamar fácilmente desde código C++ mediante system() o popen(). Es la opción ideal si necesita convertir una plantilla HTML en un documento PDF conservando los estilos y el diseño.



Características principales:

  • Soporte para CSS, JavaScript, tablas e imágenes
  • Configuración de márgenes, orientación, encabezados y pies de página
  • Alta calidad de renderizado
  • Facilidad de integración


Ejemplo de código: llamada a wkhtmltopdf desde C++

#include <cstdlib>#include <string>

int main() { std::string input = "report.html"; std::string output = "report.pdf"; std::string

Recommendations