1. Fundamentos para añadir texto y encabezados en PDF
En ReportLab el texto se añade usando el objeto canvas
, que proporciona métodos para
definir fuentes, colores, tamaños y posiciones del texto.
Creación de un PDF simple con encabezado y texto
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Creación de un nuevo PDF
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# Añadiendo el encabezado
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Informe de ventas")
# Añadiendo el texto principal
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Este documento contiene información sobre las ventas del último trimestre.")
# Guardar el PDF
pdf_file.save()
Este código crea un archivo PDF que contiene un encabezado y texto principal. Definimos la fuente y el tamaño del texto usando el método setFont()
.
2. Estilización y formato del texto
En ReportLab puedes cambiar colores, fuentes y tamaños del texto, creando encabezados y contenido principal estilizados. Esto ayuda a estructurar el documento y hacerlo más fácil de leer.
Cambiar la fuente y tamaño del texto
ReportLab soporta fuentes estándar como Helvetica
, Times-Roman
y Courier
. Puedes definir el estilo de la fuente (normal, negrita o cursiva) y el tamaño usando setFont()
.
pdf_file.setFont("Helvetica-Bold", 18) # Encabezado en negrita
pdf_file.drawString(100, height - 50, "Encabezado principal")
pdf_file.setFont("Helvetica-Oblique", 14) # Subtítulo en cursiva
pdf_file.drawString(100, height - 80, "Subtítulo: Resumen del trimestre")
Cambiar el color del texto
Puedes cambiar el color del texto usando el método setFillColorRGB()
, que acepta valores RGB de 0 a 1.
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # Color azul
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Este texto tiene color azul.")
También se pueden usar colores predefinidos de reportlab.lib.colors
.
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Texto rojo")
3. Alineación y texto multi-línea
Si el texto es largo, es mejor presentarlo en formato multi-línea. ReportLab proporciona la clase TextObject
, que soporta la división automática de líneas.
Texto multi-línea con TextObject
text = """
El informe contiene un análisis de las ventas de los últimos tres meses.
Analizamos los cambios y su impacto en el crecimiento general de la empresa.
"""
text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
Este código crea un bloque de texto con múltiples líneas, cada línea se añade al PDF.
Usar TextObject
es útil para texto largo, ya que asegura un formato automático.
4. Usar párrafos para estilizar texto
La clase Paragraph
del módulo reportlab.platypus
permite añadir texto estilizado con soporte para etiquetas HTML como <b>
, <i>
y <u>
. Paragraph
también soporta alineación y márgenes, lo que lo hace perfecto para crear texto formateado.
Creación de párrafos con Paragraph
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# Configuración del PDF
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Creación de un párrafo con texto en negrita y cursiva
text = "Informe de ventas
Informe trimestral del año 2023"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# Añadiendo el texto principal
main_text = """
Este informe contiene datos clave sobre las ventas del último trimestre,
así como un análisis del impacto de las ventas en los ingresos generales de la empresa.
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# Construcción del PDF
doc.build(elements)
Aquí usamos Paragraph
para añadir texto formateado que incluye etiquetas HTML para estilización (texto en negrita y cursiva). getSampleStyleSheet()
proporciona estilos básicos como Title
y BodyText
, que pueden ser modificados.
GO TO FULL VERSION