CodeGym /Kursy /Python SELF PL /Tworzenie i strukturalizacja plików PDF do generowania ra...

Tworzenie i strukturalizacja plików PDF do generowania raportów

Python SELF PL
Poziom 44 , Lekcja 0
Dostępny

1. Struktura dokumentów PDF dla raportów

Zacznijmy naukę, jak zapisywać i strukturalizować pliki PDF do generowania raportów, aby Twoje raporty wyglądały tak, jakby stworzył je profesjonalny projektant.

Zacznijmy od podstaw. Jak już wiesz, dobre raporty muszą nie tylko zawierać przydatne informacje, ale także być łatwe do odbioru. To oznacza, że potrzebują właściwej struktury. Omówmy, jak sprawić, aby Twoje raporty były zarówno treściwe, jak i pięknie zaprojektowane.

Jak poprawnie organizować i strukturalizować PDF

Struktura dokumentu — to jak plan Twojego bloku kodu, tylko w świecie tekstu. Dobra struktura obejmuje:

  • Spis treści: Pomaga szybko zrozumieć, co zawiera dokument i gdzie to znaleźć. Jeśli masz duży raport, spis treści to Twój najlepszy przyjaciel.
  • Rozdziały i podrozdziały: Logicznym porządek informacji pomaga czytelnikowi podążać za myślą autora. Jak w życiu: najpierw wstęp, potem kulminacja, a na końcu zakończenie.
  • Elementy wizualne: Tabele, wykresy i obrazy często mogą powiedzieć więcej niż strona tekstu.

Tworzenie spisów treści i rozdziałów dla łatwej nawigacji

Tworzenie spisów treści i rozdziałów to gwarancja, że Twój raport nie stanie się wielką tekstową masą. Rozdzielaj informacje na logiczne bloki i nie zapominaj o nagłówkach.

Python

from PyPDF2 import PdfWriter, PdfReader

# Tworzymy nowy dokument PDF
writer = PdfWriter()

# Dodajemy pustą stronę
writer.add_blank_page(width=210, height=297)  # Standardowy format A4

# Zapisujemy PDF do pliku
with open("report.pdf", "wb") as f:
    writer.write(f)

2. Generowanie raportów w formacie PDF

Teraz, kiedy wiemy, jak strukturalizować raport, czas przejść do jego tworzenia. PyPDF2 to Twój przyjaciel w tej trudnej sprawie.

Używanie PyPDF2 do tworzenia raportów z danych

Tworzenie raportów z danych to nie tylko kopiowanie i wklejanie. Twoje dokumenty powinny być żywe, jak Twój kot, kiedy próbujesz pracować. PyPDF2 pomaga Ci wyciągać dane, dodawać je do dokumentu, a nawet dostosowywać ich wygląd.

Python

import PyPDF2

# Otwieramy istniejący PDF
with open('source.pdf', 'rb') as read_file:
    reader = PdfReader(read_file)
    writer = PdfWriter()

    # Kopiujemy strony do nowego pliku
    for page in reader.pages:
        writer.add_page(page)

    # Dodajemy nagłówek
    writer.add_blank_page()
    page = writer.pages[-1]
    page.content = """Cześć! To mój raport!""" # Błąd!!

    # Zapisujemy do nowego pliku
    with open('structured_report.pdf', 'wb') as write_file:
        writer.write(write_file)

Niestety ten kod nie będzie działać. PyPDF2 nie obsługuje pracy z treścią strony, a nawet zwykłe dodanie tekstu jest niemożliwe. Jeśli musisz dodać tekst do istniejącego PDF, możesz użyć `ReportLab`.

3. Używanie `ReportLab`

W tym poprawionym przykładzie stworzymy PDF za pomocą PyPDF2, a do dodawania tekstu skorzystamy z `ReportLab`. Następnie połączymy wynik w jeden plik PDF.

Poprawiony kod z użyciem `ReportLab` do dodawania tekstu

Python

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

# Tworzymy plik z nagłówkiem za pomocą ReportLab
title_pdf = "title_page.pdf"
c = canvas.Canvas(title_pdf, pagesize=A4)
c.drawString(100, 800, "Cześć! To mój raport!")
c.save()

# Tworzymy połączony PDF
with open("source.pdf", "rb") as source_file, open(title_pdf, "rb") as title_file:
    reader_source = PyPDF2.PdfReader(source_file)
    reader_title = PyPDF2.PdfReader(title_file)
    writer = PyPDF2.PdfWriter()

    # Dodajemy stronę tytułową
    writer.add_page(reader_title.pages[0])

    # Kopiujemy strony z pliku źródłowego
    for page in reader_source.pages:
        writer.add_page(page)

    # Zapisujemy nowy PDF z nagłówkiem
    with open("structured_report.pdf", "wb") as output_file:
        writer.write(output_file)

print("Raport został pomyślnie utworzony i zapisany jako 'structured_report.pdf'.")

Wyjaśnienie poprawek:

  1. Tworzenie strony tytułowej: Używamy `ReportLab` do stworzenia pliku PDF z tekstem "Cześć! To mój raport!".
  2. Łączenie PDF: Za pomocą `PyPDF2` dodajemy stronę tytułową i pozostałe strony z `source.pdf`.
  3. Zapisywanie finalnego pliku: Zapisujemy scalony PDF jako `structured_report.pdf`.

Dodawanie nagłówków i rozdziałów dla lepszej struktury

Teraz, kiedy mamy już podstawy dokumentu, dodajmy odrobinę struktury. Nagłówki i podnagłówki pomogą Ci nie zgubić się w gąszczu informacji. PyPDF2 pozwala osadzać strony, ale jeśli potrzebujesz czegoś bardziej skomplikowanego, na przykład ustawiania czcionek, warto rozważyć użycie biblioteki ReportLab.

Python

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

def create_pdf(filename):
    # Tworzymy płótno PDF
    c = canvas.Canvas(filename, pagesize=letter)
    text = c.beginText(40, 750)

    # Nagłówek
    text.setFont("Helvetica-Bold", 18)
    text.textLine("Raport projektu 'Super Tajny'")

    # Podnagłówek
    text.setFont("Helvetica", 14)
    text.textLine("Rozdziały:")
    text.textLine("1. Wprowadzenie")
    text.textLine("2. Analiza danych")
    text.textLine("3. Wnioski")

    c.drawText(text)
    c.save()

create_pdf("detailed_report.pdf")

Błędy i pułapki

Jak w każdym programowaniu, w obsłudze dokumentów PDF są pułapki. Jednym z głównych źródeł frustracji jest poprawne użycie indeksów stron. W PyPDF2, jak i w Pythonie ogólnie, numeracja stron zaczyna się od zera. Uważaj, aby przypadkowo nie dodać niewłaściwych stron do swojego raportu.

Inny aspekt, który może powodować problemy, to błędne kodowanie tekstów. Dokumenty PDF mogą zawierać tekst zakodowany w różnych formatach. Upewnij się, że Twój kod potrafi poprawnie obsługiwać znaki, szczególnie jeśli raport będzie używany w kilku językach.

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