1. Divisione di un documento PDF in pagine
Basi della divisione dei documenti PDF con PyPDF2
PyPDF2 fornisce la classe PdfReader per aprire i file PDF e leggere le pagine, e la classe PdfWriter per scrivere le pagine in un nuovo documento PDF. Per dividere il documento in pagine separate, si usa add_page() in PdfWriter per salvare le pagine desiderate in file separati.
Salvare ogni pagina di un PDF come documento separato
Questo codice divide il documento, creando un file PDF separato per ogni pagina del file originale.
import PyPDF2
# Apriamo il file PDF
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Iteriamo su ogni pagina
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
# Estraiamo la pagina e la aggiungiamo al nuovo PDF
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Salviamo la pagina corrente come file PDF separato
output_filename = f"page_{page_num + 1}.pdf"
with open(output_filename, "wb") as output_file:
pdf_writer.write(output_file)
print("Ogni pagina è stata salvata come file separato.")
In questo esempio, ogni pagina del documento originale viene salvata in un file separato page_1.pdf, page_2.pdf e così via.
2. Estrazione di un intervallo di pagine
A volte è necessario salvare non tutte le pagine, ma un intervallo specifico di pagine, ad esempio dalla 1 alla 5. Per questo, è possibile specificare le pagine desiderate in un ciclo.
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
# Definiamo l'intervallo di pagine, ad esempio, dalla pagina 1 alla 5
start_page = 1
end_page = 5
for page_num in range(start_page - 1, end_page): # La numerazione delle pagine inizia da 0
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Salviamo l'intervallo di pagine come nuovo PDF
with open("pages_1_to_5.pdf", "wb") as output_file:
pdf_writer.write(output_file)
print("Intervallo di pagine salvato con successo.")
Questo codice estrae le pagine dalla 1 alla 5 e le salva nel file pages_1_to_5.pdf.
3. Salvataggio di più intervalli
Se è necessario estrarre più intervalli di pagine e salvarli in file separati, è possibile utilizzare una funzione che accetta l'inizio e la fine dell'intervallo.
import PyPDF2
def save_page_range(input_pdf, output_pdf, start_page, end_page):
with open(input_pdf, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
for page_num in range(start_page - 1, end_page):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
with open(output_pdf, "wb") as output_file:
pdf_writer.write(output_file)
print(f"Pagine {start_page}–{end_page} salvate in {output_pdf}")
# Uso della funzione per estrarre diversi intervalli
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)
Questo codice crea due funzioni per salvare le pagine dalla 1 alla 3 e dalla 4 alla 6, che vengono salvate rispettivamente in section_1.pdf e section_2.pdf.
4. Elaborazione di massa dei documenti PDF
Automazione della divisione dei PDF per tutte le pagine in una cartella
Se è necessario dividere ogni pagina di tutti i documenti PDF in una determinata cartella, è possibile creare uno script che elabori automaticamente ogni file.
import PyPDF2
import os
# Percorso della cartella con i file PDF
folder_path = "pdf_folder"
# Divisione automatica di tutti i file PDF nella cartella
for filename in os.listdir(folder_path):
if filename.endswith(".pdf"):
file_path = os.path.join(folder_path, filename)
with open(file_path, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Dividiamo il file in pagine separate
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Creazione del nome del file di output
output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
output_path = os.path.join(folder_path, output_filename)
# Salvataggio della pagina
with open(output_path, "wb") as output_file:
pdf_writer.write(output_file)
print("Tutte le pagine di ogni file PDF nella cartella sono state salvate con successo.")
Questo script passa automaticamente su ogni file PDF nella cartella pdf_folder e salva ogni pagina come PDF separato con il nome <nome_file>_page_<numero>.pdf.
5. Quando dividere i file PDF?
Come diceva un grande sviluppatore, dopo lunghe ore di coding, proprio come noi, spesso ci si chiede: "Perché?". La divisione dei documenti PDF può essere necessaria in diverse situazioni:
- Evidenziare le pagine chiave: Condividi solo le pagine necessarie senza inviare tutta "Guerra e Pace" ai colleghi.
- Creazione di raccolte: Salva i capitoli importanti di diversi documenti in un unico file per scopi didattici o lavorativi.
- Archiviazione: Conserva un archivio di dati importanti pagina per pagina, in modo da non perdere informazioni preziose tra pagine inutili.
È qui che entra in scena il nostro eroe PyPDF2, che renderà la tua vita più semplice!
6. Difficoltà casuali e come evitarle
Lavorando con i documenti PDF, potresti incontrare alcune difficoltà. Ad esempio, la numerazione delle pagine in PyPDF2 inizia da zero, quindi ricordati di tenerne conto quando specifichi le pagine desiderate. Non c’è niente di peggio che perdere tempo per estrarre le pagine sbagliate!
Inoltre, lavorando con file aperti e chiusi, assicurati che tutti i close() siano eseguiti correttamente. Un libro non chiuso può diventare una seccatura, specialmente se è un manuale su Oracle.
Applicazioni nella vita reale
L’uso di questo metodo è utile non solo per gestire documenti personali. Ad esempio, se lavori in uno studio legale e devi preparare rapidamente specifiche sezioni di un caso voluminoso per il tribunale, dividere i PDF in parti può risparmiare molto tempo e fatica.
Tecniche simili possono essere utilizzate anche per preparare materiali didattici, evidenziare sezioni importanti in rapporti tecnici e molto altro. La vera magia sta nella facilità con cui queste attività ripetitive possono essere automatizzate!
GO TO FULL VERSION