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
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().
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.
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.
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
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
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
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.
GO TO FULL VERSION