CodeGym /Kursy /Python SELF PL /Stylizacja tekstu i nagłówków w dokumentach PDF za pomocą...

Stylizacja tekstu i nagłówków w dokumentach PDF za pomocą ReportLab

Python SELF PL
Poziom 44 , Lekcja 3
Dostępny

1. Podstawy dodawania tekstu i nagłówków do PDF

W ReportLab tekst jest dodawany za pomocą obiektu canvas, który udostępnia metody do określania czcionek, kolorów, rozmiarów oraz pozycji tekstu.

Tworzenie prostego PDF z nagłówkiem i tekstem

Python

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

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

# Dodajemy nagłówek
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Raport ze sprzedaży")

# Dodajemy główny tekst
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Ten dokument zawiera informacje o sprzedaży za ostatni kwartał.")

# Zapisanie PDF
pdf_file.save()

Ten kod tworzy plik PDF zawierający nagłówek oraz główny tekst. Czcionkę i rozmiar tekstu ustawiamy za pomocą metody setFont().

2. Stylizacja i formatowanie tekstu

W ReportLab można zmieniać kolor, czcionkę oraz rozmiar tekstu, tworząc stylowe nagłówki i treść. To pomaga w strukturze dokumentu i sprawia, że staje się on bardziej czytelny.

Zmiana czcionki i rozmiaru tekstu

ReportLab obsługuje standardowe czcionki, takie jak Helvetica, Times-Roman i Courier. Można wskazać styl czcionki (normalny, pogrubiony lub kursywa) oraz jej rozmiar, używając setFont().

Python

pdf_file.setFont("Helvetica-Bold", 18)  # Nagłówek pogrubioną czcionką
pdf_file.drawString(100, height - 50, "Główny nagłówek")

pdf_file.setFont("Helvetica-Oblique", 14)  # Podnagłówek kursywą
pdf_file.drawString(100, height - 80, "Podnagłówek: Wyniki kwartalne")

Zmiana koloru tekstu

Kolor tekstu można zmienić za pomocą metody setFillColorRGB(), która przyjmuje wartości RGB od 0 do 1.

Python

pdf_file.setFillColorRGB(0.2, 0.4, 0.6)  # Niebieski kolor
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Ten tekst jest w kolorze niebieskim.")

Można także używać predefiniowanych kolorów z reportlab.lib.colors.

Python

from reportlab.lib import colors

pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Czerwony tekst")

3. Wyrównanie i wielowierszowy tekst

Jeżeli tekst jest długi, lepiej przedstawić go w formacie wielowierszowym. ReportLab udostępnia klasę TextObject, która obsługuje automatyczne łamanie wierszy.

Wielowierszowy tekst za pomocą TextObject

Python

text = """
Raport zawiera analizę sprzedaży za ostatnie trzy miesiące.
Rozważamy zmiany i ich wpływ na ogólny rozwój firmy.
"""

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)

Ten kod tworzy blok tekstowy z kilkoma liniami, z których każda jest dodawana do PDF. Korzystanie z TextObject jest wygodne dla długiego tekstu, ponieważ zapewnia automatyczne formatowanie.

4. Użycie akapitów do stylizacji tekstu

Klasa Paragraph z modułu reportlab.platypus pozwala dodawać stylizowany tekst z obsługą znaczników HTML, takich jak <b>, <i> i <u>. Paragraph obsługuje także wyrównanie i wcięcia, co czyni go idealnym do tworzenia sformatowanego tekstu.

Tworzenie akapitów za pomocą Paragraph

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Konfiguracja PDF
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []

# Tworzenie akapitu z pogrubionym i kursywnym tekstem
text = "Raport ze sprzedaży
Raport kwartalny 2023" paragraph = Paragraph(text, styles["Title"]) elements.append(paragraph) # Dodanie głównego tekstu main_text = """ Ten raport zawiera kluczowe dane o sprzedaży za ostatni kwartał, a także analizę wpływu sprzedaży na ogólny dochód firmy. """ paragraph = Paragraph(main_text, styles["BodyText"]) elements.append(paragraph) # Budowanie PDF doc.build(elements)

Tutaj używamy Paragraph do dodania sformatowanego tekstu, który zawiera znaczniki HTML do stylizacji (pogrubienie i kursywa). getSampleStyleSheet() dostarcza podstawowe style, takie jak Title i BodyText, które można zmieniać.

5. Zastosowanie stylów tekstu

ReportLab umożliwia tworzenie i dostosowywanie własnych stylów, które można używać do formatowania tekstu. Jest to szczególnie przydatne przy tworzeniu raportów, gdzie używa się powtarzających się stylów dla nagłówków, podnagłówków i głównego tekstu.

Dostosowywanie stylu użytkownika

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Konfiguracja PDF
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []

# Tworzenie stylu użytkownika
custom_style = ParagraphStyle(
    name="CustomStyle",
    fontName="Helvetica-Bold",
    fontSize=14,
    leading=18,
    textColor=colors.darkgreen,
    spaceAfter=10,
)

# Tworzenie akapitu ze stylem użytkownika
paragraph = Paragraph("To jest nagłówek z niestandardowym stylem", custom_style)
elements.append(paragraph)

# Dodanie głównego tekstu
default_style = ParagraphStyle(
    name="Default",
    fontName="Helvetica",
    fontSize=12,
    leading=14,
    textColor=colors.black,
    spaceAfter=10,
)
paragraph = Paragraph("To jest główny tekst korzystający z domyślnego stylu.", default_style)
elements.append(paragraph)

# Budowanie PDF
doc.build(elements)

W tym przykładzie tworzymy niestandardowy styl CustomStyle z zielonym kolorem tekstu i większą czcionką, który stosujemy do nagłówka.

1
Zadanie
Python SELF PL, poziom 44, lekcja 3
Niedostępne
Podstawowe tworzenie PDF przy użyciu ReportLab
Podstawowe tworzenie PDF przy użyciu ReportLab
2
Zadanie
Python SELF PL, poziom 44, lekcja 3
Niedostępne
Wieloliniowy tekst z różnymi stylami
Wieloliniowy tekst z różnymi stylami
3
Zadanie
Python SELF PL, poziom 44, lekcja 3
Niedostępne
Użycie Paragraph do formatowania tekstu
Użycie Paragraph do formatowania tekstu
4
Zadanie
Python SELF PL, poziom 44, lekcja 3
Niedostępne
Personalizowany raport ze stylami niestandardowymi
Personalizowany raport ze stylami niestandardowymi
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION