Generación de PDF en C++: resumen de bibliotecas 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 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 install


Ejemplo: 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-dev


Ejemplo: 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 <

Recommendations