CodeGym /Kurs Javy /Python SELF PL /Podstawy tworzenia PDF z tekstem do automatyzacji raportó...

Podstawy tworzenia PDF z tekstem do automatyzacji raportów

Python SELF PL
Poziom 44 , Lekcja 2
Dostępny

1. Podstawy pracy z ReportLab

Praca z Canvas

Głównym narzędziem do tworzenia dokumentów PDF w ReportLab jest klasa canvas. Udostępnia ona metody umożliwiające dodawanie tekstu, linii, prostokątów i innych elementów graficznych.

Tworzenie prostego pliku PDF z tekstem

Python

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

# Tworzymy nowy plik PDF
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4

# Dodajemy tekst
pdf_file.setFont("Helvetica", 12)  # Ustawiamy czcionkę i rozmiar
pdf_file.drawString(100, height - 100, "Cześć! To jest raport utworzony za pomocą ReportLab.")

# Zapisujemy i zamykamy PDF
pdf_file.save()

W tym przykładzie tworzony jest prosty plik PDF z tekstem "Cześć! To jest raport utworzony za pomocą ReportLab." na pierwszej stronie.

2. Dodawanie tekstu do PDF

ReportLab pozwala elastycznie dostosowywać tekst, w tym czcionkę, rozmiar i kolor. Jest to ważne przy tworzeniu uporządkowanych raportów, gdyż nagłówki, podtytuły i główny tekst mogą wyglądać inaczej.

Ustawienie czcionki i rozmiaru tekstu

Użyj metody setFont(), aby ustawić czcionkę i rozmiar tekstu. ReportLab obsługuje standardowe czcionki, takie jak Helvetica, Times-Roman oraz Courier.

Python

pdf_file.setFont("Helvetica-Bold", 16)  # Pogrubiona czcionka
pdf_file.drawString(100, height - 50, "Raport sprzedaży")  # Nagłówek

Zmiana koloru tekstu

ReportLab obsługuje ustawianie koloru tekstu za pomocą metody setFillColorRGB(), która przyjmuje wartości RGB od 0 do 1.

Python

pdf_file.setFillColorRGB(0, 0, 1)  # Niebieski kolor
pdf_file.drawString(100, height - 150, "Ten tekst jest niebieski.")

3. Praca z blokami tekstowymi i wielowierszowym tekstem

Jeżeli tekst jest długi, można go sformatować jako blok, używając drawString() i podając współrzędne dla każdej linii. Jednak do automatycznego łamania tekstu lepiej użyć drawText() i TextObject.

Dodanie wielowierszowego tekstu za pomocą TextObject

Python

text = """
Raport sprzedaży za 2023 rok.
Ten raport zawiera szczegółowe informacje o sprzedaży, analizę danych i prognozy.
"""

# Tworzenie obiektu tekstowego
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)

# Dodawanie tekstu
for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

W tym przykładzie tworzony jest obiekt tekstowy TextObject, który automatycznie łamie każdą linię tekstu.

4. Tworzenie raportów wielostronicowych

Raporty wielostronicowe pozwalają zawrzeć więcej danych i stworzyć strukturę dokumentu, która jest wygodna do czytania. W ReportLab do przechodzenia na nową stronę używana jest metoda showPage().

Tworzenie wielostronicowego pliku PDF

Python

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

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

# Strona 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Strona 1: Wprowadzenie")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "To jest pierwsza strona raportu.")
pdf_file.showPage()  # Przejście na nową stronę

# Strona 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Strona 2: Dane")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "To jest druga strona raportu.")

# Zapisanie i zamknięcie PDF
pdf_file.save()

W tym przykładzie tworzony jest PDF z dwiema stronami, z których każda ma swój nagłówek i tekst. Metoda showPage() kończy bieżącą stronę i rozpoczyna nową.

5. Dodawanie dynamicznych danych do PDF

Dla automatyzacji raportów ReportLab pozwala dynamicznie dodawać dane, na przykład z listy czy słownika. Jest to przydatne przy tworzeniu raportów z tabelami lub listami danych, które mogą być regularnie aktualizowane.

Dodawanie danych z listy

Python

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

data = [
    {"Miesiąc": "Styczeń", "Sprzedaż": 200},
    {"Miesiąc": "Luty", "Sprzedaż": 300},
    {"Miesiąc": "Marzec", "Sprzedaż": 250},
]

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

# Nagłówek
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Raport sprzedaży")

# Dodawanie danych
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
    line = f"{item['Miesiąc']}: Sprzedaż = {item['Sprzedaż']}"
    pdf_file.drawString(100, y_position, line)
    y_position -= 20

# Zapisanie PDF
pdf_file.save()

Ten kod tworzy plik PDF, dodając dane o sprzedaży za każdy miesiąc jako osobne linie.

6. Dodawanie obrazów

Poza tekstem w dokumencie PDF mogą być również obrazy i grafiki. Spróbujmy dodać obraz:

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, "Tutaj będzie Twój obraz:")
    # Ścieżka do obrazu
    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)

Proste, prawda? Teraz mamy PDF z obrazem!

Teraz, kiedy wiesz, jak tworzyć PDF z tekstem i obrazami, pomyśl, jak możesz to wykorzystać w prawdziwym życiu. Wyobraź sobie, że pracujesz w firmie analitycznej i co miesiąc musisz przygotowywać raporty sprzedażowe. Zamiast ręcznie tworzyć dokument za każdym razem, możesz napisać skrypt, który automatycznie zbierze dane i wygeneruje raport PDF. Zaoszczędzi to Twój czas i zwiększy dokładność oraz spójność danych w raporcie.

7. Dodawanie tabel do PDF

Teraz zróbmy mały krok w stronę czegoś bardziej skomplikowanego niż zwykły tekst. Co, jeśli chcemy dodać dane, takie jak lista produktów i ich cena? Weźmy prosty przykład:

Python

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

items = [("Żelazko", 42.99), ("Czajnik", 15.00), ("Telewizor", 250.00)]

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

    c.drawString(100, height - 100, "Lista produktów i ich ceny:")
    
    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)

W tym przykładzie dodajemy prostą listę produktów z cenami. Wyobraź sobie możliwości: możesz stworzyć pełnoprawną tabelę z danymi pochodzącymi z bazy danych, na przykład z Twojego ulubionego pandas DataFrame!

8. Korzystanie z szablonów do automatyzacji raportów

Jednym z najpotężniejszych podejść do automatyzacji raportów jest korzystanie z szablonów. Możesz tworzyć szablony dokumentów z określoną strukturą i projektowaniem, a następnie wypełniać je danymi za pomocą swojego skryptu.

Tworzenie szablonowego dokumentu

Stwórz podstawowy szablon, który będzie zawierał elementy statyczne, takie jak logotypy i stałe nagłówki. Następnie automatycznie wypełnij go dynamicznymi danymi, takimi jak daty, wykresy czy listy. Można to zorganizować, używając np. Jinja2 do szablonowego tekstu, a następnie generować finalny dokument PDF.

Do tworzenia szablonów z ReportLab można używać kombinacji danych statycznych i dynamicznych. Na przykład wcześniej przygotowane tło dla raportu z firmowymi logotypami i stałymi elementami, które są nakładane na dynamiczną treść generowaną z danych aplikacji.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION