1. Dividindo um documento PDF em páginas
Introdução à divisão de PDFs com o PyPDF2
O PyPDF2 fornece a classe PdfReader para abrir arquivos PDF e ler páginas, assim como a classe PdfWriter para gravar páginas em um novo documento PDF. Para dividir o documento em páginas separadas, utiliza-se add_page() no PdfWriter, para salvar as páginas desejadas em arquivos separados.
Salvando cada página do PDF como um documento separado
Este código divide o documento, criando um arquivo PDF separado para cada página do arquivo original.
import PyPDF2
# Abrindo o arquivo PDF
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Iterando por cada página
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
# Extraindo a página e adicionando ao novo PDF
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Salvando a página atual como um arquivo PDF separado
output_filename = f"page_{page_num + 1}.pdf"
with open(output_filename, "wb") as output_file:
pdf_writer.write(output_file)
print("Cada página foi salva como um arquivo separado.")
Neste exemplo, cada página do documento original é salva em um arquivo separado page_1.pdf, page_2.pdf e assim por diante.
2. Extraindo um intervalo de páginas
Às vezes, você quer salvar não todas as páginas, mas um intervalo específico de páginas, como da 1 à 5. Para isso, basta especificar as páginas no loop.
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
# Definindo o intervalo de páginas, por exemplo, páginas 1 a 5
start_page = 1
end_page = 5
for page_num in range(start_page - 1, end_page): # Numeração de páginas começa do 0
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Salvando o intervalo de páginas como um novo PDF
with open("pages_1_to_5.pdf", "wb") as output_file:
pdf_writer.write(output_file)
print("O intervalo de páginas foi salvo com sucesso.")
Este código extrai as páginas da 1 à 5 e as salva no arquivo pages_1_to_5.pdf.
3. Salvando múltiplos intervalos
Se precisar extrair vários intervalos de páginas e salvá-los em arquivos separados, você pode criar uma função que aceite o início e o fim do intervalo.
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"Páginas {start_page}–{end_page} salvas em {output_pdf}")
# Usando a função para extrair diferentes intervalos
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)
Este código cria dois arquivos contendo as páginas de 1 a 3 e de 4 a 6, que são salvos como section_1.pdf e section_2.pdf, respectivamente.
4. Processando PDFs em massa
Automatizando a divisão de PDFs para todas as páginas em uma pasta
Se for necessário dividir cada página de todos os PDFs em uma pasta especificada, você pode criar um script que automaticamente processe cada arquivo.
import PyPDF2
import os
# Caminho da pasta com os arquivos PDF
folder_path = "pdf_folder"
# Dividindo automaticamente todos os arquivos PDF na pasta
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)
# Dividindo o arquivo em páginas individuais
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Criando o nome do arquivo de saída
output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
output_path = os.path.join(folder_path, output_filename)
# Salvando a página
with open(output_path, "wb") as output_file:
pdf_writer.write(output_file)
print("Todas as páginas de cada arquivo PDF na pasta foram salvas com sucesso.")
Este script automaticamente processa cada arquivo PDF na pasta pdf_folder e salva cada página como um PDF separado com um nome como <nome_do_arquivo>_page_<número>.pdf.
5. Quando dividir arquivos PDF?
Como diz um grande desenvolvedor, que depois de horas de codificação, tem a mesma dúvida que nós: "Por quê?". Dividir documentos PDF pode ser necessário em várias situações:
- Destacar páginas importantes: Compartilhe apenas as páginas necessárias, sem enviar "Guerra e Paz" inteira para os colegas.
- Criar compilações: Salve capítulos importantes de documentos diferentes em um único arquivo para estudos ou trabalho.
- Arquivamento: Armazene arquivos de dados importantes página por página, para não perder informações valiosas em meio a páginas desnecessárias.
É aí que nosso herói PyPDF2 entra em cena para facilitar sua vida!
6. Dificuldades comuns e como evitá-las
Ao trabalhar com documentos PDF, você pode enfrentar alguns problemas. Por exemplo, a numeração de páginas no PyPDF2 começa em zero, então não esqueça de considerar isso ao especificar as páginas necessárias. Afinal, não há nada pior do que perder tempo extraindo páginas erradas!
Além disso, ao trabalhar com arquivos abertos e fechados, certifique-se de que todas as chamadas close() sejam feitas corretamente. Um arquivo não fechado pode se tornar um pesadelo, especialmente se for um manual técnico.
Aplicações no mundo real
Usar este método é útil não apenas para processar documentos pessoais. Por exemplo, se você trabalha em um escritório de advocacia e precisa preparar rapidamente seções específicas de um caso volumoso para o tribunal, dividir PDF em partes pode economizar tempo e esforço significativamente.
Técnicas como essas também podem ser usadas para preparar materiais educacionais, destacar seções importantes de relatórios técnicos e muito mais. A verdadeira magia está em quão fácil é automatizar essas tarefas repetitivas!
GO TO FULL VERSION