Generación de informes PDF en C++: biblioteca libHaru

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 informes PDF en C++ con libHaru



En la programación moderna, a menudo surge la necesidad de crear documentos en formato PDF de forma programática. Estos pueden ser informes, facturas, albaranes, resúmenes analíticos o simplemente guardar datos en un formato universal. En el lenguaje C++, existen varias bibliotecas para este propósito, y una de las más populares es libHaru (también conocida como Haru PDF).



libHaru es una biblioteca multiplataforma de código abierto, escrita en C y con una interfaz C++ conveniente. Permite crear documentos PDF sin dependencias externas (no requiere instalar Ghostscript, LaTeX u otros sistemas). La biblioteca admite trabajo con texto (incluyendo Unicode a través de codificaciones), incrustación de imágenes (PNG, JPEG), dibujo de líneas, rectángulos, círculos, así como la creación de anotaciones e hipervínculos.



Instalación y configuración



Puede descargar los fuentes de libHaru desde el repositorio oficial en GitHub. Para la compilación se utiliza CMake. Ejemplo de instalación en Linux:



git clone https://github.com/libharu/libharu.gitcd libharumkdir build && cd buildcmake ..makesudo make install


Después de la instalación, incluya el archivo de cabecera y la biblioteca en su proyecto:



#include <hpdf.h>

// Enlace: -lhpdf


Creación de un documento PDF simple



Veamos un ejemplo básico: crear un documento con una página y texto. Código en C++:



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

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); if (!pdf) { fprintf(stderr, "Error al crear PDF"); return 1; }

HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE);

HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", NULL); HPDF_Page_SetFontAndSize(page, font, 20);

HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 100, 400, "¡Hola, mundo! Este es un informe PDF en C++."); HPDF_Page_EndText(page);

HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("PDF creado: output.pdf"); return 0;}


Este código crea una hoja A4 apaisada, muestra texto en color azul (por defecto negro) y guarda el resultado. Tenga en cuenta: libHaru no admite cirílico directamente en fuentes como Helvetica — para texto en ruso se necesita una fuente TrueType, como se muestra a continuación.



Trabajo con texto en ruso y fuentes



Para mostrar correctamente el cirílico, es necesario cargar una fuente que admita Unicode (por ejemplo, Arial o Times New Roman). Ejemplo:



// Cargar fuente TrueType (el archivo debe estar disponible)const char* font_path = "/usr/share/fonts/truetype/arial.ttf";HPDF_Font font = HPDF_GetFont(pdf, font_path, NULL);

// O usar una fuente incorporada con codificación UTF-8HPDF_UseUTFEncodings(pdf);HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", "UTF-8");


El primer método es más fiable, pero requiere que el archivo de fuente esté presente en el sistema de destino. El segundo método solo funciona con algunas fuentes incorporadas y no garantiza soporte completo para cirílico.



Dibujo de tablas y elementos gráficos



Para crear informes, a menudo es necesario dibujar tablas. libHaru permite dibujar líneas y rectángulos:



HPDF_Page_SetLineWidth(page, 1);HPDF_Page_SetRGBStroke(page, 0, 0, 0);

// Dibujar un rectángulo (x, y, width, height)HPDF_Page_Rectangle(page, 50, 500, 200, 30);HPDF_Page_Stroke(page);

// Dibujar una líneaHPDF_Page_MoveTo(page, 50, 500);HPDF_Page_LineTo(page, 250, 500);HPDF_Page_Stroke(page);


Se pueden combinar líneas y texto para crear una tabla completa. Para informes complejos con datos dinámicos, es conveniente escribir una función auxiliar que reciba un array de cadenas

Recommendations