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 También en la biblioteca
Cliente Redis para PHP: Predis y PhpRedis – conexión y ejemplos
Envío de correo electrónico en TypeScript: bibliotecas y ejemplos de código
xUnit / NUnit para C# (.NET): guía completa con ejemplos