CodeGym /Kurse /Python SELF DE /Grundlagen der PDF-Erstellung mit Text zur Automatisierun...

Grundlagen der PDF-Erstellung mit Text zur Automatisierung der Berichterstattung

Python SELF DE
Level 44, Lektion 2
Verfügbar

1. Grundlagen der Arbeit mit ReportLab

Arbeiten mit Canvas

Das Hauptwerkzeug zur Erstellung von PDF-Dokumenten in ReportLab ist die Klasse canvas. Sie bietet Methoden zum Hinzufügen von Text, Linien, Rechtecken und anderen grafischen Elementen.

Einfaches PDF mit Text erstellen

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Neues PDF erstellen
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4

# Text hinzufügen
pdf_file.setFont("Helvetica", 12)  # Schriftart und Größe setzen
pdf_file.drawString(100, height - 100, "Hallo! Dies ist ein Bericht, erstellt mit ReportLab.")

# Speichern und PDF schließen
pdf_file.save()

In diesem Beispiel wird eine einfache PDF-Datei mit dem Text "Hallo! Dies ist ein Bericht, erstellt mit ReportLab." auf der ersten Seite erstellt.

2. Hinzufügen von Text in die PDF

ReportLab ermöglicht eine flexible Anpassung des Textes, einschließlich Größe, Schriftart und Farbe. Das ist wichtig für strukturierte Berichte, da Überschriften, Unterüberschriften und Haupttext unterschiedlich aussehen können.

Schriftart und Größe einstellen

Nutze die Methode setFont(), um die Schriftart und -größe festzulegen. ReportLab unterstützt Standard-Schriftarten wie Helvetica, Times-Roman und Courier.

Python

pdf_file.setFont("Helvetica-Bold", 16)  # Fette Schrift
pdf_file.drawString(100, height - 50, "Verkaufsbericht")  # Überschrift

Textfarbe ändern

ReportLab unterstützt das Setzen der Textfarbe mithilfe der Methode setFillColorRGB(), die RGB-Werte von 0 bis 1 entgegennimmt.

Python

pdf_file.setFillColorRGB(0, 0, 1)  # Blaue Farbe
pdf_file.drawString(100, height - 150, "Dieser Text ist blau.")

3. Arbeiten mit Textblöcken und mehrzeiligem Text

Wenn der Text länger ist, kann er als Block mit drawString() formatiert werden, indem die Koordinaten für jede Zeile definiert werden. Um den Text jedoch automatisch zu umbrechen, ist es praktischer, drawText() und TextObject zu verwenden.

Mehrzeiligen Text mit TextObject hinzufügen

Python

text = """
Verkaufsbericht für das Jahr 2023.
Dieser Bericht enthält detaillierte Informationen zu Verkäufen, Datenanalysen und Prognosen.
"""

# Textobjekt erstellen
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)

# Text hinzufügen
for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

In diesem Beispiel wird ein Textobjekt TextObject erstellt, das jede Textzeile automatisch umbricht.

4. Erstellung von mehrseitigen Berichten

Mehrseitige Berichte ermöglichen die Darstellung größerer Datenmengen und schaffen eine leserfreundliche Dokumentstruktur. In ReportLab wird der Übergang zu einer neuen Seite mit der Methode showPage() durchgeführt.

Mehrseitiges PDF erstellen

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# PDF erstellen
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4

# Seite 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Seite 1: Einführung")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Dies ist die erste Seite des Berichts.")
pdf_file.showPage()  # Zur nächsten Seite

# Seite 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Seite 2: Daten")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Dies ist die zweite Seite des Berichts.")

# PDF speichern und schließen
pdf_file.save()

In diesem Beispiel wird eine zweiseitige PDF erstellt, bei der jede Seite ihre eigene Überschrift und ihren eigenen Text hat. Die Methode showPage() beendet die aktuelle Seite und beginnt eine neue.

5. Dynamische Daten in die PDF einfügen

Zur Automatisierung der Berichterstattung ermöglicht ReportLab das dynamische Einfügen von Daten, z. B. aus einer Liste oder einem Dictionary. Das ist nützlich, um Berichte mit Tabellen oder Listen von Daten zu erstellen, die regelmäßig aktualisiert werden können.

Daten aus einer Liste hinzufügen

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

data = [
    {"Monat": "Januar", "Verkäufe": 200},
    {"Monat": "Februar", "Verkäufe": 300},
    {"Monat": "März", "Verkäufe": 250},
]

pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4

# Überschrift
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Verkaufsbericht")

# Daten hinzufügen
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
    line = f"{item['Monat']}: Verkäufe = {item['Verkäufe']}"
    pdf_file.drawString(100, y_position, line)
    y_position -= 20

# PDF speichern
pdf_file.save()

Dieser Code erstellt eine PDF-Datei, bei der die Verkaufsdaten für jeden Monat in separaten Zeilen hinzugefügt werden.

6. Bilder hinzufügen

Zusätzlich zum Text können in einer PDF-Dokument auch Bilder und Diagramme enthalten sein. Probieren wir aus, wie wir ein Bild hinzufügen können:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf_with_image(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Hier ist dein Bild:")
    # Pfad zu deinem Bild
    image_path = "example_image.jpg"
    c.drawImage(image_path, 100, height - 300, width=200, height=150)

    c.showPage()
    c.save()

file_path = "image_example.pdf"
create_pdf_with_image(file_path)

Einfach, oder? Jetzt haben wir eine PDF mit einem Bild!

Nun, da du weißt, wie man eine PDF mit Text und Bildern erstellt, lass uns überlegen, wie du das im echten Leben anwenden könntest. Stell dir vor, du arbeitest in einem Analysebüro und musst jeden Monat Verkaufsberichte erstellen. Anstatt jedes Mal das Dokument manuell vorzubereiten, kannst du ein Skript schreiben, das automatisch Daten sammelt und einen PDF-Bericht generiert. Das spart nicht nur Zeit, sondern verbessert auch die Genauigkeit und Konsistenz der Berichtsdaten.

7. Tabellen in eine PDF einfügen

Jetzt machen wir einen kleinen Schritt weg vom einfachen Text. Was, wenn wir Daten hinzufügen wollen, wie z.B. eine Liste von Produkten und deren Preise? Schauen wir uns ein einfaches Beispiel an:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

items = [("Bügeleisen", 42.99), ("Wasserkocher", 15.00), ("Fernseher", 250.00)]

def create_pdf_with_table(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Liste der Produkte und Preise:")
    
    y = height - 150
    for item in items:
        c.drawString(100, y, f"{item[0]} - {item[1]:.2f} $")
        y -= 20

    c.showPage()
    c.save()

file_path = "table_example.pdf"
create_pdf_with_table(file_path)

Hier fügen wir eine einfache Liste von Produkten mit Preisen hinzu. Stell dir die Möglichkeiten vor: Du kannst eine vollständige Tabelle mit Daten erstellen, die aus einer anderen Datenbank kommen, z. B. deinem Lieblings-pandas DataFrame!

8. Verwendung von Vorlagen zur Automatisierung von Berichten

Einer der mächtigsten Ansätze zur Automatisierung von Berichten ist die Verwendung von Vorlagen. Im Grunde kannst du Dokumentvorlagen mit Struktur und Design erstellen und sie dann mit Daten über dein Skript füllen.

Erstellen eines Vorlagendokuments

Erstelle eine Hauptvorlage, die statische Elemente wie Logos und feste Überschriften enthält. Fülle sie dann automatisch mit dynamischen Daten wie Daten, Diagrammen oder Listen. Dies kann beispielsweise mit Jinja2 für Textvorlagen organisiert werden, um daraus das endgültige PDF zu generieren.

Für die Erstellung von Vorlagen mit ReportLab kannst du eine Kombination aus statischen und dynamischen Daten verwenden. Zum Beispiel ein vorbereiteter Hintergrund für einen Bericht mit firmenspezifischen Logos und festen Elementen, die dann mit dynamischen Inhalten aus den Daten deines Programms ergänzt werden.

1
Aufgabe
Python SELF DE, Level 44, Lektion 2
Gesperrt
Erstellung eines einfachen PDF-Dokuments
Erstellung eines einfachen PDF-Dokuments
2
Aufgabe
Python SELF DE, Level 44, Lektion 2
Gesperrt
Hinzufügen von formatiertem Text
Hinzufügen von formatiertem Text
3
Aufgabe
Python SELF DE, Level 44, Lektion 2
Gesperrt
Erstellen eines mehrseitigen PDF-Dokuments
Erstellen eines mehrseitigen PDF-Dokuments
4
Aufgabe
Python SELF DE, Level 44, Lektion 2
Gesperrt
Generierung eines Berichts mit einer Datentabelle
Generierung eines Berichts mit einer Datentabelle
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION