Last modified: November 19, 2024

This article is written in: 馃嚨馃嚤

Manipulacja i analiza plik贸w PDF

Praca z plikami PDF w Pythonie jest mo偶liwa dzi臋ki kilku dost臋pnym bibliotekom. Jednym z najpopularniejszych narz臋dzi s艂u偶膮cych do tego celu jest PyPDF2.

Wprowadzenie do PyPDF2

Instalacja biblioteki PyPDF2

Aby rozpocz膮膰 prac臋 z PyPDF2, najpierw nale偶y j膮 zainstalowa膰 przy u偶yciu mened偶era pakiet贸w pip, co mo偶na zrobi膰 za pomoc膮 polecenia:

pip install PyPDF2

Otwieranie i odczytywanie pliku PDF

Mo偶emy 艂atwo otworzy膰 plik PDF w trybie odczytu binarnego ('rb'), kt贸ry jest wymagany do prawid艂owego przetwarzania plik贸w PDF.

from PyPDF2 import PdfFileReader

with open('plik.pdf', 'rb') as plik:
  czytnik = PdfFileReader(plik)

Eksploracja informacji o pliku PDF

liczba_stron = czytnik.getNumPages()
print(f"Liczba stron: {liczba_stron}")

Metoda getDocumentInfo() zwraca obiekt zawieraj膮cy informacje o dokumencie, kt贸re mo偶na wy艣wietli膰 lub przetworzy膰.

informacje = czytnik.getDocumentInfo()
print(f"Autor: {informacje.author}")
print(f"Tytu艂: {informacje.title}")

Metadane mog膮 by膰 przydatne przy katalogowaniu dokument贸w lub wy艣wietlaniu informacji w interfejsie u偶ytkownika.

Odczytywanie zawarto艣ci stron

Aby uzyska膰 dost臋p do tre艣ci konkretnej strony, u偶ywamy metody getPage(nr_strony), kt贸ra zwraca obiekt reprezentuj膮cy dan膮 stron臋.

strona = czytnik.getPage(0)  # Pobiera pierwsz膮 stron臋

Mo偶emy nast臋pnie wyodr臋bni膰 tekst ze strony za pomoc膮 metody extractText().

tekst = strona.extractText()
print(tekst)

Iterowanie przez wszystkie strony dokumentu

Je艣li chcemy przetworzy膰 ca艂y dokument, mo偶emy iterowa膰 przez wszystkie strony za pomoc膮 p臋tli for.

for nr_strony in range(liczba_stron):
  strona = czytnik.getPage(nr_strony)
  tekst = strona.extractText()
  print(f"Strona {nr_strony + 1}:")
  print(tekst)

Modyfikowanie dokument贸w PDF

Do modyfikacji dokument贸w PDF u偶ywamy obiektu PdfFileWriter, kt贸ry pozwala na tworzenie nowych dokument贸w lub modyfikowanie istniej膮cych.

from PyPDF2 import PdfFileWriter

pisarz = PdfFileWriter()

Mo偶emy dodawa膰 strony do nowego dokumentu za pomoc膮 metody addPage().

strona = czytnik.getPage(0)
pisarz.addPage(strona)

PdfFileWriter nie modyfikuje istniej膮cego dokumentu, ale tworzy nowy, co jest wa偶ne dla zachowania integralno艣ci oryginalnych plik贸w.

Dodawanie nowej strony z tekstem

Aby doda膰 now膮 stron臋 z w艂asnym tekstem, potrzebujemy dodatkowej biblioteki, takiej jak ReportLab, kt贸ra umo偶liwia generowanie stron PDF.

pip install reportlab

Nast臋pnie tworzymy now膮 stron臋 za pomoc膮 canvas z ReportLab.

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

packet = BytesIO()
can = canvas.Canvas(packet, pagesize=A4)
can.drawString(100, 750, "Hello, World!")
can.save()

Po utworzeniu nowej strony, integrujemy j膮 z istniej膮cym dokumentem za pomoc膮 PyPDF2.

packet.seek(0)
nowy_pdf = PdfFileReader(packet)
pisarz.addPage(nowy_pdf.getPage(0))

Proces ten pozwala na tworzenie z艂o偶onych dokument贸w z w艂asnymi tre艣ciami i istniej膮cymi stronami.

Zapisywanie zmodyfikowanego dokumentu

Aby zapisa膰 nowy lub zmodyfikowany dokument, u偶ywamy metody write() obiektu PdfFileWriter.

with open('nowy_plik.pdf', 'wb') as plik_wyjsciowy:
  pisarz.write(plik_wyjsciowy)

艁膮czenie wielu plik贸w PDF w jeden dokument

Do 艂膮czenia wielu plik贸w PDF u偶ywamy klasy PdfFileMerger z biblioteki PyPDF2.

from PyPDF2 import PdfFileMerger

merger = PdfFileMerger()

Mo偶emy dodawa膰 pliki do obiektu merger za pomoc膮 metody append().

pliki_do_polaczenia = ['plik1.pdf', 'plik2.pdf', 'plik3.pdf']
for plik_pdf in pliki_do_polaczenia:
  merger.append(plik_pdf)

Na koniec zapisujemy po艂膮czony dokument do nowego pliku.

with open('polaczony_dokument.pdf', 'wb') as plik_wyjsciowy:
  merger.write(plik_wyjsciowy)

艁膮czenie plik贸w jest szczeg贸lnie przydatne przy tworzeniu raport贸w zbiorczych lub kompilacji dokument贸w.

Dodatkowe funkcje PyPDF2

Mo偶emy zabezpieczy膰 dokument has艂em za pomoc膮 metody encrypt().

pisarz.encrypt(user_pwd='haslo_uzytkownika', owner_pwd='haslo_wlasciciela', use_128bit=True)

Mo偶emy podzieli膰 dokument na mniejsze cz臋艣ci, wybieraj膮c konkretne strony do nowego dokumentu.

# Dodajemy strony od 2 do 5
for nr_strony in range(1, 5):
  strona = czytnik.getPage(nr_strony)
  pisarz.addPage(strona)

Chocia偶 PyPDF2 ma ograniczone wsparcie dla zak艂adek, mo偶emy dodawa膰 prosty tekst lub adnotacje.

# Dodanie adnotacji na pierwszej stronie
page = reader.pages[0]  # Pobieramy pierwsz膮 stron臋

# Tworzymy adnotacj臋 (przyk艂ad prostego tekstu)
annotation = AnnotationBuilder.text(
    "To jest przyk艂adowa adnotacja tekstowa!",
    rect=(100, 700, 300, 720),  # Wsp贸艂rz臋dne (x1, y1, x2, y2) prostok膮ta
    open=True  # Domy艣lnie otwarta adnotacja
)

# Dodajemy adnotacj臋 do strony
page.add_annotation(annotation)

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

Mo偶emy obr贸ci膰 stron臋 o okre艣lony k膮t za pomoc膮 metody rotateClockwise().

strona = czytnik.getPage(0)
strona.rotateClockwise(90)
pisarz.addPage(strona)

Obs艂uga wyj膮tk贸w i b艂臋d贸w

Podczas pracy z plikami PDF mog膮 wyst膮pi膰 r贸偶ne b艂臋dy, dlatego wa偶ne jest, aby implementowa膰 obs艂ug臋 wyj膮tk贸w.

try:
  with open('plik.pdf', 'rb') as plik:
      czytnik = PdfFileReader(plik)
except FileNotFoundError:
  print("Plik nie zosta艂 znaleziony.")
except Exception as e:
  print(f"Wyst膮pi艂 b艂膮d: {e}")

Alternatywne biblioteki do manipulacji plikami PDF

Praktyczne zastosowania manipulacji plikami PDF

Dobre praktyki

Spis Tre艣ci

    Manipulacja i analiza plik贸w PDF
    1. Wprowadzenie do PyPDF2
    2. Instalacja biblioteki PyPDF2
    3. Otwieranie i odczytywanie pliku PDF
    4. Eksploracja informacji o pliku PDF
    5. Odczytywanie zawarto艣ci stron
    6. Iterowanie przez wszystkie strony dokumentu
    7. Modyfikowanie dokument贸w PDF
    8. Dodawanie nowej strony z tekstem
    9. Zapisywanie zmodyfikowanego dokumentu
    10. 艁膮czenie wielu plik贸w PDF w jeden dokument
    11. Dodatkowe funkcje PyPDF2
    12. Obs艂uga wyj膮tk贸w i b艂臋d贸w
    13. Alternatywne biblioteki do manipulacji plikami PDF
    14. Praktyczne zastosowania manipulacji plikami PDF
    15. Dobre praktyki