Generar PDF en Python

Mi biblioteca favorita es pdf-reports

Índice

Generación de informes en PDF usando Python

Python, con sus amplias bibliotecas y módulos, ofrece herramientas poderosas para generar informes en PDF profesionales. Esta guía explora varios métodos para crear documentos PDF usando Python, cubriendo bibliotecas populares como ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports y PdfKit. Es parte de nuestro Herramientas de Documentación en 2026: Markdown, LaTeX, PDF y Flujos de Trabajo de Impresión centro de recursos.

python en el informe

¿Por qué generar informes en PDF con Python?

  • Automatización: Los scripts de Python pueden automatizar la generación de informes, ahorrando tiempo y reduciendo errores humanos.
  • Personalización: Personaliza los informes según necesidades específicas, añadiendo texto, imágenes, tablas y gráficos.
  • Consistencia: Asegura la coherencia de la marca en todos los informes con plantillas estandarizadas.
  • Versatilidad: Genera facturas, informes empresariales, resúmenes de datos o cualquier otro tipo de documento.

Bibliotecas populares de Python para la generación de PDF

ReportLab

ReportLab es una biblioteca versátil que permite crear documentos PDF programáticamente. Soporta la adición de texto, imágenes, tablas y gráficos, lo que la hace adecuada para varios tipos de informes.

Ventajas:

  • Conjunto de características rico
  • API de alto nivel para uso fácil
  • Soporta características avanzadas como anotaciones y formularios interactivos

Desventajas:

  • Curva de aprendizaje más pronunciada en comparación con otras bibliotecas
  • API menos intuitiva para algunas tareas

Uso de ReportLab

Instalación: Instale ReportLab usando pip:

pip install reportlab

Configuración básica:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Añadiendo texto:
python c.drawString(100, 800, "Hello World")
# Guardando el PDF:
python c.save()

FPDF

FPDF es una biblioteca simple pero poderosa para la creación de documentos PDF escrita en Python puro. Es ideal para generar documentos PDF básicos con poco código.

Ventajas:

  • Fácil de aprender y usar
  • Ligera y rápida
  • Soporta caracteres Unicode

Desventajas:

  • Conjunto de características limitado en comparación con ReportLab
  • Menos control sobre la colocación de elementos en la página

Uso de FPDF

Instalación: Instale FPDF usando pip:

pip install fpdf2
Configuración básica:
from fpdf import FPDF pdf = FPDF()

# Añadiendo texto:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Guardando el PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf es un convertidor de HTML/CSS a PDF que utiliza ReportLab en su interior. Es perfecto para generar PDFs desde plantillas HTML, lo que lo convierte en una excelente opción para conversiones de web a PDF.

Ventajas:

  • Convierte HTML y CSS a PDF
  • Soporta diseños y estilos complejos
  • Se integra bien con marcos web como Django

Desventajas:

  • Requiere conocimientos de HTML y CSS
  • Puede no ser adecuado para informes simples no basados en web

Uso de Xhtml2pdf

Instalación: Instale Xhtml2pdf usando pip:

pip install xhtml2pdf

Generar un PDF desde HTML: python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint es una biblioteca versátil de Python que permite a los desarrolladores convertir HTML y CSS en documentos PDF con una alta calidad de renderizado. Es especialmente útil para generar informes, facturas o cualquier otro documento que requiera un formato preciso. A continuación se muestran varios ejemplos que demuestran cómo usar WeasyPrint en diferentes escenarios.

Características

  • Convierte HTML y CSS en documentos PDF.
  • Maneja la renderización dinámica de datos con la ayuda de motores de plantillas como Jinja2.

Instalación:

pip install weasyprint

Aquí hay un ejemplo sencillo de generar un PDF desde una cadena HTML:

from weasyprint import HTML

html_string = """
<html>
<head><title>PDF de muestra</title></head>
<body>
<h1>Hola, WeasyPrint!</h1>
<p>Este es un PDF de muestra generado usando WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

En este ejemplo, se utiliza la clase HTML de WeasyPrint para convertir una cadena HTML en un archivo PDF llamado “sample.pdf”.

Cargando HTML desde archivos

También puedes cargar contenido HTML directamente desde archivos:

from weasyprint import HTML

# Cargar HTML desde un archivo
HTML('sample.html').write_pdf('output.pdf')

Este método es útil cuando tienes tu contenido HTML almacenado en un archivo externo. Usando hojas de estilo CSS

WeasyPrint admite el uso de hojas de estilo CSS para dar estilo a tus documentos PDF. Aquí te mostramos cómo aplicar un archivo CSS:

from weasyprint import HTML

# Cargar HTML y CSS desde archivos
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

Esto permite un mayor estilo complejo, facilitando la creación de PDFs visualmente atractivos.

Jinja2

Jinja2 es un motor de plantillas poderoso para Python que permite generar contenido dinámico incrustando expresiones, condicionales y bucles dentro de plantillas. Esta guía te guiará a través de varios ejemplos de uso de Jinja2 en Python, desde la sustitución básica de variables hasta características más avanzadas como la herencia de plantillas.

Características clave de Jinja2

  • Un motor de plantillas que puede usarse junto con WeasyPrint o ReportLab para generar dinámicamente contenido HTML.
  • Ideal para incrustar datos en plantillas predefinidas.
  • Instalación:
pip install jinja2

ver ejemplos en la página de documentación oficial de jinja2: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit es una biblioteca poderosa de Python que simplifica el proceso de convertir contenido HTML en documentos PDF. Actúa como un envoltorio para la utilidad wkhtmltopdf, aprovechando WebKit para renderizar páginas HTML con precisión en formato PDF. Esta guía te guiará a través de varios ejemplos y casos de uso de generación de PDFs usando pdfkit.

Características clave

Instalación:

# y asegúrate de que wkhtmltopdf esté instalado.

Uso básico - Convertir una cadena HTML a PDF

Puedes convertir una cadena HTML simple en un archivo PDF usando pdfkit.from_string():

import pdfkit

html_sample = """
<html>
<head><title>PDF de muestra</title></head>
<body>
<h1>Este es un encabezado</h1>
<p>Primera línea.</p>
<p>Segunda línea.</p>
<p>Tercera línea.</p>
<p>Cuarta línea.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

Esto generará un archivo PDF llamado output.pdf en el directorio actual.

Convertir un archivo HTML local a PDF

Si tienes un archivo HTML almacenado localmente, usa pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

Biblioteca de informes en PDF (pdf-reports)

Crear informes en PDF usando la biblioteca pdf-reports en Python puede ser una forma poderosa de generar documentos profesionales a partir de plantillas HTML o Pug. Esta biblioteca aprovecha componentes modernos a través del marco Semantic UI y proporciona rutinas para incrustar tablas, gráficos y otros elementos en tus PDFs.

La biblioteca pdf-reports está diseñada para crear informes en PDF visualmente atractivos a partir de plantillas HTML o Pug. Soporta oficialmente Python 3.x, pero también puede ejecutarse en Python 2.x con la versión adecuada de weasyprint. Esto la hace una herramienta versátil para generar documentos dinámicos y bien estructurados de forma programática.

Características clave

  • Componentes modernos: Utiliza el marco Semantic UI para componentes modernos.
  • Incrustación de elementos: Permite incrustar tablas, gráficos y otros elementos en los PDFs.
  • Soporte de plantillas: Soporta plantillas HTML y Pug para un diseño flexible de informes.

Ejemplo de uso de pdf-reports

Instalación:

pip install pdf-reports

Aquí hay un ejemplo básico de cómo usar la biblioteca pdf-reports:

from pdf_reports import PDFReport

# Define tu archivo de plantilla (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p Este es un informe de muestra.
"""

# Crea una instancia de informe en PDF
report = PDFReport(template)

# Establece el contexto para la plantilla
context = {
    'title': 'Informe de muestra'
}

# Genera el PDF
pdf = report.generate(context, output='sample_report.pdf')

Comienzo en la generación de PDF en Python

Python ofrece una variedad de bibliotecas poderosas para generar informes en PDF. Ya estés creando facturas, informes empresariales o resúmenes de datos, estas herramientas te permiten automatizar el proceso, personalizar tus documentos y asegurar la coherencia de la marca. Elige la biblioteca que mejor se adapte a tus necesidades y comienza a crear PDFs profesionales hoy mismo!

Enlaces útiles