Łączenie plików PDF w jeden plik w Pythonie

Kacper Sieradziński
Kacper Sieradziński
18 stycznia 2025Edukacja2 min czytania

Łączenie wielu plików PDF w jeden spójny dokument to jedna z najczęstszych potrzeb w automatyzacji biurowej. Bez względu na to, czy pracujesz z raportami, fakturami, czy dokumentacją projektową — ręczne scalanie plików w narzędziach graficznych jest czasochłonne i podatne na błędy. Python oferuje proste i niezawodne rozwiązanie: możesz zautomatyzować cały proces łączenia plików PDF za pomocą bibliotek takich jak pypdf (następca PyPDF2) lub PyPDF2, oszczędzając godziny pracy przy jednoczesnym zachowaniu spójności dokumentów.

Obraz główny Łączenie plików PDF w jeden plik w Pythonie

Podstawowe łączenie plików PDF

Biblioteka pypdf (wcześniej znana jako PyPDF2) to standardowe narzędzie do pracy z plikami PDF w Pythonie. Oferuje prosty interfejs do łączenia dokumentów, który sprawdza się zarówno w prostych, jak i bardziej złożonych scenariuszach. Najprostszy sposób łączenia plików PDF wygląda następująco:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from pypdf import PdfMerger from pathlib import Path def merge_pdfs(pdf_files: list[str], output_path: str): """Łączy wiele plików PDF w jeden dokument.""" merger = PdfMerger() for pdf_file in pdf_files: merger.append(pdf_file) merger.write(output_path) merger.close() print(f"Połączono {len(pdf_files)} plików PDF w: {output_path}") # Uruchomienie: łączenie trzech plików PDF pdf_files = ["dokument1.pdf", "dokument2.pdf", "dokument3.pdf"] merge_pdfs(pdf_files, "polaczony_dokument.pdf")

Batch merge z sortowaniem

W praktyce często musisz połączyć wszystkie pliki PDF znajdujące się w określonym katalogu. Zamiast ręcznie wybierać każdy plik, możesz zautomatyzować ten proces, przeszukując katalog i łącząc wszystkie znalezione dokumenty. Kluczowe jest tutaj odpowiednie sortowanie — dzięki niemu strony będą w logicznej kolejności. Oto jak to zrobić:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from pypdf import PdfMerger from pathlib import Path import os def batch_merge_pdfs(directory: str, output_path: str): """Łączy wszystkie pliki PDF z katalogu w kolejności alfabetycznej.""" pdf_files = sorted([ os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.pdf') ]) if not pdf_files: print("Nie znaleziono plików PDF w katalogu.") return merger = PdfMerger() for pdf_file in pdf_files: print(f"Dodawanie: {pdf_file}") merger.append(pdf_file) merger.write(output_path) merger.close() print(f"\nPołączono {len(pdf_files)} plików PDF w: {output_path}") # Uruchomienie: batch merge z katalogu batch_merge_pdfs("./pliki_pdf/", "wszystkie_dokumenty.pdf")

Kontrola metadanych

Każdy plik PDF zawiera metadane — informacje o tytule, autorze, dacie utworzenia i innych właściwościach dokumentu. Podczas łączenia plików warto zadbać o to, aby wynikowy dokument miał odpowiednie metadane, które ułatwią późniejszą identyfikację i organizację. Biblioteka pypdf pozwala na łatwe zarządzanie tymi informacjami:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 from pypdf import PdfMerger def merge_with_metadata(pdf_files: list[str], output_path: str, title: str = None, author: str = None): """Łączy pliki PDF z ustawieniem metadanych.""" merger = PdfMerger() for pdf_file in pdf_files: merger.append(pdf_file) # Ustawienie metadanych if title or author: merger.add_metadata({ "/Title": title or "Połączony dokument", "/Author": author or "Automatyzacja Python" }) merger.write(output_path) merger.close() merge_with_metadata( ["dok1.pdf", "dok2.pdf"], "wynik.pdf", title="Raport roczny 2024", author="System automatyzacji" )

Wybór stron z każdego dokumentu

Nie zawsze potrzebujesz wszystkich stron z każdego dokumentu. Czasem chcesz wybrać tylko konkretne strony — na przykład pierwsze trzy strony z każdego raportu lub tylko strony z określonymi rozdziałami. Biblioteka pypdf pozwala na precyzyjne wybieranie stron podczas łączenia dokumentów:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from pypdf import PdfMerger def merge_specific_pages(pdf_files: dict, output_path: str): """ Łączy wybrane strony z plików PDF. pdf_files: dict w formacie {ścieżka: [lista_stron]} Przykład: {"dok1.pdf": [1, 3, 5], "dok2.pdf": [1, 2]} """ merger = PdfMerger() for pdf_file, pages in pdf_files.items(): merger.append(pdf_file, pages=pages) merger.write(output_path) merger.close() merge_specific_pages( { "dokument1.pdf": [1, 3, 5], "dokument2.pdf": [1, 2] }, "wybrane_strony.pdf" )

Obsługa błędów

W rzeczywistych scenariuszach automatyzacji musisz być przygotowany na sytuacje, gdy niektóre pliki mogą być uszkodzone, nieistniejące lub mieć nieprawidłowy format. Bez odpowiedniej obsługi błędów cały proces łączenia może się zatrzymać, a częściowo utworzony dokument zostanie uszkodzony. Oto jak zabezpieczyć swój kod przed takimi problemami:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 from pypdf import PdfMerger from pathlib import Path def safe_merge_pdfs(pdf_files: list[str], output_path: str): """Bezpieczne łączenie plików PDF z obsługą błędów.""" merger = PdfMerger() successful = 0 failed = [] for pdf_file in pdf_files: if not Path(pdf_file).exists(): print(f"Ostrzeżenie: Plik {pdf_file} nie istnieje. Pomijanie.") failed.append(pdf_file) continue try: merger.append(pdf_file) successful += 1 except Exception as e: print(f"Błąd podczas dodawania {pdf_file}: {e}") failed.append(pdf_file) if successful > 0: merger.write(output_path) merger.close() print(f"\nSukces: Połączono {successful} plików PDF w: {output_path}") if failed: print(f"Nie udało się dodać {len(failed)} plików: {failed}") else: merger.close() print("Błąd: Nie udało się połączyć żadnych plików PDF.") safe_merge_pdfs( ["dok1.pdf", "dok2.pdf", "nieistniejacy.pdf"], "bezpieczny_merge.pdf" )

Podsumowanie

Łączenie plików PDF w Pythonie to proste zadanie dzięki bibliotece pypdf. Możesz:

  • Łączyć wiele plików w jeden
  • Automatycznie przetwarzać całe katalogi
  • Kontrolować metadane wynikowego dokumentu
  • Wybierać konkretne strony z każdego dokumentu
  • Obsługiwać błędy bezpiecznie

To narzędzie doskonale sprawdza się w automatyzacji biurowej i przetwarzaniu dokumentów.


➡️ Następny artykuł

Po opanowaniu łączenia plików PDF, poznaj techniki ich rozdzielania i manipulacji stronami:

Rozdzielanie i scalanie stron PDF w Pythonie — wycinanie zakresów stron, dzielenie dokumentów na rozdziały i zaawansowane techniki organizacji dużych dokumentów PDF.