CodeGym /Kursy /Python SELF PL /Łączenie kilku plików PDF w jeden dokument

Łączenie kilku plików PDF w jeden dokument

Python SELF PL
Poziom 43 , Lekcja 3
Dostępny

1. Łączenie PDF za pomocą PyPDF2

Dlaczego warto łączyć pliki PDF

Po pierwsze, zastanówmy się, dlaczego w ogóle zachodzi potrzeba łączenia plików PDF. Jak się mówi, „Jeden PDF jest lepszy niż dziesięć!”. W pracy możesz mieć raporty, wyniki badań, dokumentację techniczną lub prezentacje, które są dostarczane jako oddzielne pliki. Ciągłe przełączanie się między nimi jest nie tylko niewygodne, ale i ryzykowne — coś można przeoczyć. Dzięki połączeniu wszystkich plików w jeden dokument uprościsz pracę z tymi danymi i stworzysz bardziej uporządkowane podejście do ich analizy i dystrybucji.

Ponadto, łączenie plików PDF jest wygodne na potrzeby późniejszego archiwizowania, tworzenia jednego końcowego raportu lub łączenia wielu wersji dokumentu w celu śledzenia zmian. Krótko mówiąc, możliwości są nieskończone!

Podstawy korzystania z PyPDF2 do łączenia PDF

Na początek skorzystajmy z podstaw pracy z PyPDF2. Stworzymy skrypt, który połączy kilka plików PDF w jeden. Oczywiście kod będzie zawierał komentarze, abyś rozumiał, co się dzieje na każdym etapie.

Python

import PyPDF2

# Tworzymy obiekt PdfMerger z biblioteki PyPDF2
pdf_merger = PyPDF2.PdfMerger()

# Lista naszych dokumentów PDF, które chcemy połączyć
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# Pętla do dodania każdego pliku do obiektu PdfMerger
for file in pdf_files:
    pdf_merger.append(file)

# Zapisujemy wynik do nowego pliku PDF
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# Zamykamy obiekt PdfMerger, aby zwolnić zasoby
pdf_merger.close()

print(f"Połączony PDF utworzony: {output_filename}")

Kolejność i struktura połączonego dokumentu

Teraz, gdy nauczyliśmy się łączyć dokumenty PDF, warto pomyśleć o kolejności stron. Pamiętaj, że PyPDF2 dodaje strony w kolejności, w jakiej przekazałeś pliki do metody .append(). Tak więc kolejność w liście pdf_files wpływa na kolejność w końcowym dokumencie.

2. Łączenie pojedynczych stron

Jeśli chcesz nie połączyć całych dokumentów, ale stworzyć końcowy dokument z ich części, musisz skorzystać z klasy PdfWriter zamiast PdfMerger. Oto przykład:

Python

import PyPDF2

# Lista plików PDF, które należy połączyć
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# Tworzenie obiektu PdfWriter do zapisu połączonego PDF
pdf_writer = PyPDF2.PdfWriter()

# Przechodzimy przez każdy plik PDF
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # Dodajemy każdą stronę do PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # Tutaj możesz pominąć strony, które nie chcesz dodawać
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Zapisujemy połączony PDF
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Jak działa ten kod?

  1. Tworzymy listę plików: Lista pdf_files zawiera ścieżki do dokumentów PDF, które należy połączyć.
  2. Inicjalizujemy PdfWriter: pdf_writer jest używany do tworzenia nowego pliku PDF.
  3. Przechodzimy przez każdy plik: Każdy plik PDF jest otwierany w trybie odczytu.
  4. Dodajemy strony: Wszystkie strony pliku są dodawane do obiektu pdf_writer za pomocą add_page().
  5. Zapisujemy wynik: Po dodaniu wszystkich stron nowy plik PDF jest zapisywany jako merged_document.pdf.

3. Stylizacja nowego dokumentu

Dodawanie zakładek i spisu treści

Co zrobić, jeśli twój połączony dokument stał się zbyt duży i trudno się w nim poruszać? W takiej sytuacji z pomocą przychodzą zakładki! PyPDF2 pozwala dodawać podstawowe zakładki, aby ułatwić nawigację po dokumencie. Dodajmy zakładki dla każdego dokumentu, który łączymy.

Python

pdf_merger = PyPDF2.PdfMerger()

# Indeks strony dla zakładek
page_offset = 0

for file in pdf_files:
    # Czytamy bieżący dokument
    pdf_reader = PyPDF2.PdfReader(file)

    # Dodajemy dokument do PdfMerger
    pdf_merger.append(file)

    # Dodajemy zakładkę z nazwą pliku
    pdf_merger.add_bookmark(file, page_offset)

    # Aktualizujemy przesunięcie stron
    page_offset += len(pdf_reader.pages)

with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

pdf_merger.close()

Ten prosty trik pomoże ci zachować spokój i uniknąć zagubienia się w morzu PDF-ów.

Aktualizacja metadanych połączonego pliku

Po połączeniu możesz dodać lub zmienić metadane dokumentu, takie jak autor, tytuł i słowa kluczowe.

Python

import PyPDF2

pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()

for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Dodanie metadanych
pdf_writer.add_metadata({
    "/Title": "Połączony dokument",
    "/Author": "Jan Kowalski",
    "/Subject": "Raport sprzedaży"
})

# Zapisanie połączonego pliku
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Ten kod dodaje metadane, które pomogą identyfikować i uporządkować dokument.

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