1. Grundlagen der Text- und Überschrifteneinfügung in PDFs
In ReportLab wird Text mit einem canvas
-Objekt hinzugefügt, das Methoden zum Festlegen von Schriftarten, Farben, Größen und Textpositionen bereitstellt.
Ein einfaches PDF mit einer Überschrift und Text erstellen
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Erstellen eines neuen PDFs
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# Überschrift hinzufügen
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Verkaufsbericht")
# Haupttext hinzufügen
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Dieses Dokument enthält Informationen zu den Verkäufen des letzten Quartals.")
# PDF speichern
pdf_file.save()
Dieser Code erstellt eine PDF-Datei, die eine Überschrift und Haupttext enthält. Wir legen die Schriftart und -größe mit der Methode setFont()
fest.
2. Textgestaltung und -formatierung
In ReportLab kann man Farbe, Schriftart und Größe des Textes ändern, um stilvolle Überschriften und Hauptinhalte zu erstellen. Dies hilft, das Dokument zu strukturieren und es leserfreundlicher zu machen.
Schriftart und -größe ändern
ReportLab unterstützt Standard-Schriftarten wie Helvetica
, Times-Roman
und Courier
. Du kannst den Schriftstil (normal, fett oder kursiv) und die Größe mit setFont()
angeben.
pdf_file.setFont("Helvetica-Bold", 18) # Überschrift in Fettschrift
pdf_file.drawString(100, height - 50, "Hauptüberschrift")
pdf_file.setFont("Helvetica-Oblique", 14) # Unterüberschrift kursiv
pdf_file.drawString(100, height - 80, "Unterüberschrift: Quartalsübersicht")
Textfarbe ändern
Du kannst die Textfarbe mit der Methode setFillColorRGB()
ändern, die RGB-Werte von 0 bis 1 akzeptiert.
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # Blaue Farbe
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Dieser Text ist blau.")
Du kannst auch vordefinierte Farben aus reportlab.lib.colors
verwenden.
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Roter Text")
3. Textausrichtung und mehrzeiliger Text
Wenn der Text lang ist, ist es besser, ihn in einem mehrzeiligen Format darzustellen. ReportLab stellt die Klasse TextObject
bereit, die automatischen Zeilenumbruch unterstützt.
Mehrzeiliger Text mit TextObject
text = """
Der Bericht enthält eine Analyse der Verkäufe der letzten drei Monate.
Wir betrachten Veränderungen und deren Einfluss auf das allgemeine Unternehmenswachstum.
"""
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)
Dieser Code erstellt einen Textblock mit mehreren Zeilen, von denen jede zur PDF hinzugefügt wird. Die Verwendung von TextObject
ist praktisch für langen Text, da dies eine Autoformatierung ermöglicht.
4. Verwendung von Absätzen zur Textgestaltung
Die Klasse Paragraph
aus dem Modul reportlab.platypus
ermöglicht das Hinzufügen von stilisiertem Text mit Unterstützung von HTML-Tags wie <b>
, <i>
und <u>
. Paragraph
unterstützt auch Ausrichtung und Einrückungen, was ihn ideal für die Erstellung formatierten Textes macht.
Absätze mit Paragraph
erstellen
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF Setup
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Absatz mit fettgedrucktem und kursivem Text erstellen
text = "Verkaufsbericht
Quartalsbericht 2023"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# Haupttext hinzufügen
main_text = """
Dieser Bericht enthält wichtige Daten zu den Verkäufen des letzten Quartals
sowie eine Analyse des Einflusses der Verkäufe auf die Gesamteinnahmen des Unternehmens.
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# PDF erstellen
doc.build(elements)
Hier verwenden wir Paragraph
, um formatierten Text hinzuzufügen, der HTML-Tags zur Gestaltung (fettgedruckter und kursiver Text) enthält. getSampleStyleSheet()
stellt Basisstile wie Title
und BodyText
bereit, die angepasst werden können.
5. Textstile anwenden
ReportLab ermöglicht die Erstellung und Anpassung eigener Stile, die zur Textformatierung verwendet werden können. Dies ist besonders nützlich beim Erstellen von Berichten, in denen wiederkehrende Stile für Überschriften, Unterüberschriften und Haupttext verwendet werden.
Benutzerdefinierten Stil anpassen
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF Setup
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []
# Benutzerdefinierten Stil erstellen
custom_style = ParagraphStyle(
name="CustomStyle",
fontName="Helvetica-Bold",
fontSize=14,
leading=18,
textColor=colors.darkgreen,
spaceAfter=10,
)
# Absatz mit benutzerdefiniertem Stil erstellen
paragraph = Paragraph("Dies ist eine Überschrift mit benutzerdefiniertem Stil", custom_style)
elements.append(paragraph)
# Haupttext hinzufügen
default_style = ParagraphStyle(
name="Default",
fontName="Helvetica",
fontSize=12,
leading=14,
textColor=colors.black,
spaceAfter=10,
)
paragraph = Paragraph("Dies ist Haupttext mit Verwendung des Standardstils.", default_style)
elements.append(paragraph)
# PDF erstellen
doc.build(elements)
In diesem Beispiel erstellen wir einen benutzerdefinierten Stil CustomStyle
mit einer grünen Textfarbe und größerer Schrift, die auf die Überschrift angewendet wird.
6. Dokument mit Überschriften und Text erstellen
Um ein PDF-Dokument strukturierter zu machen, kann man einen mehrseitigen Bericht mit Abschnitten erstellen, von denen jeder seine eigene Überschrift und stilisierten Text hat.
Strukturierten mehrseitigen Bericht erstellen
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak
# PDF Setup
doc = SimpleDocTemplate("structured_report.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Stil für die Überschrift
title_style = ParagraphStyle("TitleStyle", parent=styles["Title"], fontSize=18, spaceAfter=12)
# Überschrift der ersten Seite
title = Paragraph("Verkaufsbericht 2023", title_style)
elements.append(title)
# Haupttext
main_text = """
Dieser Bericht stellt detaillierte Informationen zu den Verkäufen des Unternehmens im ersten Quartal 2023 bereit.
Es werden Daten zu Regionen, Produktkategorien und wichtigen Kennzahlen einbezogen.
"""
elements.append(Paragraph(main_text, styles["BodyText"]))
# Wechsel zur nächsten Seite
elements.append(PageBreak())
# Überschrift der zweiten Seite
subtitle = Paragraph("Verkaufsanalyse nach Kategorien", title_style)
elements.append(subtitle)
# Text für die zweite Seite
category_text = """
Auf Seite zwei werden Daten zu den Verkäufen nach Produktkategorien dargestellt.
Jede Kategorie wird mit Blick auf die Verkaufsdynamik und Marktveränderungen analysiert.
"""
elements.append(Paragraph(category_text, styles["BodyText"]))
GO TO FULL VERSION