CodeGym /Cursos /Python SELF PT /Unindo vários arquivos PDF em um único documento

Unindo vários arquivos PDF em um único documento

Python SELF PT
Nível 43 , Lição 3
Disponível

1. Juntando PDFs com PyPDF2

Por que juntar arquivos PDF

Primeiro, vamos entender por que pode ser necessário juntar arquivos PDF. Afinal, como dizem, "Um PDF é melhor do que dez!". No trabalho, você pode ter relatórios, resultados de pesquisa, documentação técnica ou apresentações que são fornecidos como arquivos separados. Ficar alternando entre eles não é só inconveniente, mas também arriscado — você pode acabar perdendo algo. Juntando todos os arquivos em um único documento, você facilita o trabalho com essas informações e cria uma abordagem mais organizada para análise e compartilhamento.

Além disso, juntar arquivos PDF é útil para arquivamento posterior, criação de um relatório final unificado ou até para juntar várias versões do documento e acompanhar alterações. Resumindo, as possibilidades são muitas!

O básico do uso do PyPDF2 para unir PDFs

Para começar, vamos nos familiarizar com os conceitos básicos do PyPDF2. Vamos criar um script que junta vários PDFs em um só. Claro, o código será acompanhado de comentários para você entender o que está acontecendo em cada etapa.

Python

import PyPDF2

# Criamos um objeto PdfMerger da biblioteca PyPDF2
pdf_merger = PyPDF2.PdfMerger()

# Lista dos nossos PDFs que queremos unir
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# Loop para adicionar cada arquivo ao objeto PdfMerger
for file in pdf_files:
    pdf_merger.append(file)

# Salvamos o resultado em um novo arquivo PDF
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# Fechamos o objeto PdfMerger para liberar recursos
pdf_merger.close()

print(f"PDF combinado criado: {output_filename}")

Ordem e estrutura do documento combinado

Agora que aprendemos a juntar documentos PDF, é importante pensar na ordem das páginas. Lembre-se de que o PyPDF2 adiciona as páginas na mesma ordem em que você passou os arquivos para o método .append(). Assim, a ordem na lista pdf_files influencia a ordem final no documento.

2. Juntando páginas individuais

Se você não quer apenas juntar documentos, mas criar um documento final a partir de partes deles, então precisa usar a classe PdfWriter no lugar de PdfMerger. Veja o exemplo:

Python

import PyPDF2

# Lista dos arquivos PDF que precisamos unir
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# Criando objeto PdfWriter para escrever o PDF final
pdf_writer = PyPDF2.PdfWriter()

# Iteramos sobre cada arquivo PDF
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # Adicionamos cada página ao PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # Aqui você pode pular páginas que não quer incluir
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Salvando o PDF combinado
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Como esse código funciona?

  1. Criamos a lista de arquivos: A lista pdf_files contém os caminhos dos PDFs que queremos unir.
  2. Inicializamos o PdfWriter: O pdf_writer é usado para criar o novo arquivo PDF.
  3. Iteramos sobre cada arquivo: Cada PDF é aberto no modo de leitura.
  4. Adicionamos páginas: Todas as páginas do arquivo são adicionadas ao objeto pdf_writer com o método add_page().
  5. Salvamos o resultado: Após adicionar todas as páginas, o novo PDF é salvo em merged_document.pdf.

3. Estilizando o novo documento

Adicionando marcadores e índice

O que fazer se o documento combinado ficou muito grande e difícil de navegar? Nessa situação, marcadores são a solução! O PyPDF2 permite adicionar marcadores básicos para facilitar a navegação no documento. Vamos adicionar marcadores para cada documento que unirmos.

Python

pdf_merger = PyPDF2.PdfMerger()

# Índice de página para os marcadores
page_offset = 0

for file in pdf_files:
    # Lemos o documento atual
    pdf_reader = PyPDF2.PdfReader(file)

    # Adicionamos o documento ao PdfMerger
    pdf_merger.append(file)

    # Adicionamos um marcador com o nome do arquivo
    pdf_merger.add_bookmark(file, page_offset)

    # Atualizamos o deslocamento das páginas
    page_offset += len(pdf_reader.pages)

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

pdf_merger.close()

Este pequeno truque vai salvar sua sanidade e evitar que você se perca no mar de documentos PDF.

Atualizando os metadados do arquivo combinado

Depois de juntar os documentos, você pode adicionar ou alterar os metadados do arquivo, como autor, título e palavras-chave.

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)

# Adicionando metadados
pdf_writer.add_metadata({
    "/Title": "Documento combinado",
    "/Author": "João Silva",
    "/Subject": "Relatório de vendas"
})

# Salvando o arquivo combinado
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Esse código adiciona metadados que ajudam a identificar e organizar o documento.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION