Última Atualização: 29 Jan, 2025

Título - Trabalhando com arquivos PDF em Python

Neste artigo, vamos guiá-lo sobre como trabalhar com arquivos PDF usando Python. Para isso, utilizaremos a biblioteca pypdf.

Usando a biblioteca pypdf, demonstraremos como realizar as seguintes operações em Python:

  • Extração de texto de PDFs
  • Rotação de páginas de PDF
  • Mesclagem de múltiplos PDFs
  • Divisão de PDFs em arquivos separados
  • Adição de marcas d’água a páginas de PDF

Nota: Este artigo cobre muitos detalhes valiosos, então fique à vontade para pular para as seções que mais lhe interessam! O conteúdo é organizado para fácil navegação, permitindo que você se concentre rapidamente no que for mais relevante.

Ilustração - Trabalhando com arquivos PDF em Python

Códigos de Exemplo

Você pode baixar todo o código de exemplo usado neste artigo a partir do link a seguir. Ele inclui o código, arquivos de entrada e de saída.

Instalar pypdf

Para instalar o pypdf, basta executar o seguinte comando no seu terminal ou prompt de comando:

pip install pypdf

Nota: O comando acima diferencia maiúsculas de minúsculas.

1. Extraindo Texto de um Arquivo PDF Usando Python

Explicação do Código

1. Criando um Objeto Leitor de PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) carrega o arquivo PDF em um objeto leitor.
  • Este objeto permite acesso às páginas e seu conteúdo.

2. Percorrendo Páginas

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages retorna uma lista de páginas no PDF.
  • enumerate(..., start=1) atribui um número de página começando em 1.

3. Imprimindo Texto Extraído

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Separador para legibilidade
  • page.extract_text() extrai texto da página atual.
  • O script imprime o texto extraído juntamente com o número da página.
  • "-" * 50 imprime uma linha separadora (--------------------------------------------------) para melhor legibilidade.

Arquivo PDF de Entrada Usado no Código

Saída do Código

2. Girando Páginas de PDF Usando Python

Explicação do Código

O código basicamente gira a primeira página por 90° no sentido horário e salva o PDF modificado sem afetar outras páginas.

1. Importar Classes Necessárias

from pypdf import PdfReader, PdfWriter
  • PdfReader: Lê o PDF de entrada.
  • PdfWriter: Cria um novo PDF com modificações.

2. Definir Caminhos de Arquivo de Entrada e Saída

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • O script lê de input.pdf e salva o arquivo modificado como rotated_output.pdf.

3. Ler o PDF e Criar um Objeto Writer

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader carrega o PDF existente.
  • writer é usado para armazenar as páginas modificadas.

4. Girar a Primeira Página em 90 Graus

page = reader.pages[0]
page.rotate(90)  # Girar 90 graus no sentido horário
writer.add_page(page)
  • Página 1 é extraída, rotacionada 90 graus, e adicionada ao novo PDF.

5. Adicionar Páginas Restantes Sem Mudanças

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Percorre as páginas restantes e as adiciona como estão.

6. Salvar o Novo PDF

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Abre rotated_output.pdf em modo binário de escrita e salva o novo PDF.

7. Imprimir Confirmação

print(f"Rotated page saved to {output_pdf}")
  • Exibe uma mensagem de sucesso.

PDF de Entrada Usado no Código e Sua Saída Girada

Captura de Tela Captura de Tela da Página Girada no PDF Usando Python

3. Mesclando Arquivos PDF Usando Python

Este script Python demonstra como mesclar múltiplos arquivos PDF de um diretório em um único PDF usando a biblioteca PyPDF.

Explicação do Código

  • Este script mescla automaticamente todos os arquivos PDF encontrados no diretório especificado (pdfs-to-merge) em um único arquivo de saída (merged_output.pdf).
  • Ele garante que o diretório de saída exista e adiciona as páginas de cada PDF na ordem em que são listadas.
  • Ele salva o arquivo final mesclado no subdiretório output-dir.

Desmembramento do Código

1. Importar Bibliotecas

import os
from pypdf import PdfReader, PdfWriter
  • os: Usado para interagir com o sistema de arquivos, como ler diretórios e gerenciar caminhos de arquivo.
  • PdfReader: Lê o conteúdo de um arquivo PDF.
  • PdfWriter: Cria e escreve um novo arquivo PDF.

2. Definir Diretório e Arquivo de Saída

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Especifica a pasta onde os arquivos PDF estão armazenados.
  • output_file: Define o caminho e o nome de saída do PDF mesclado.

3. Criar Diretório de Saída se Não Existir

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Isso garante que o diretório de saída exista, e se não, ele o cria.

4. Criar um Objeto PdfWriter

writer = PdfWriter()
  • writer é usado para coletar e combinar todas as páginas dos PDFs.

5. Iterar Sobre Todos os Arquivos PDF no Diretório

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • Este loop percorre todos os arquivos no diretório especificado, verificando por arquivos com extensão .pdf. Ele usa sorted() para processá-los em ordem alfabética.

6. Ler Cada PDF e Adicionar Páginas ao Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Para cada PDF, PdfReader lê o arquivo, e então todas as páginas daquele PDF são adicionadas a writer.

7. Escrever o PDF Mesclado em um Arquivo de Saída

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Após coletar todas as páginas, writer.write() escreve o PDF mesclado no caminho de saída especificado.

8. Imprimir Confirmação

print(f"Merged PDF saved as: {output_path}")
  • Imprime uma mensagem de sucesso confirmando a localização do PDF mesclado salvo.

Arquivos PDF de Entrada Usados no Código e o PDF de Saída Mesclado

4. Dividindo um PDF Usando Python

Explicação do Código

O script Python acima divide um PDF em páginas separadas usando a biblioteca PyPDF. Ele primeiro garante que o diretório de saída exista, depois lê o arquivo PDF de entrada. O script percorre cada página, cria um novo objeto PdfWriter e salva cada página como um arquivo PDF individual. Os arquivos de saída são nomeados sequencialmente (por exemplo, page_1.pdf, page_2.pdf) e armazenados na pasta output-dir. Por fim, ele imprime uma mensagem de confirmação para cada arquivo criado e notifica quando o processo é concluído.

PDF de Entrada e Arquivos de Saída Individuais

5. Adicionando uma Marca d’Água a um PDF Usando Python

Você pode adicionar uma marca d’água a um PDF usando a biblioteca PyPDF sobrepondo um PDF de marca d’água a um PDF existente. Certifique-se de que o PDF de marca d’água tenha apenas uma página para que ele seja aplicado corretamente a cada página do PDF principal.

Explicação do Código

O script Python acima lê um PDF de entrada, extrai um PDF de marca d’água de uma página, sobrepõe a marca d’água em cada página do PDF de entrada, e salva o PDF final com a marca d’água.

Desmembramento do Código

Aqui está uma breve explicação de cada parte

1. Importar Classes Necessárias

from pypdf import PdfReader, PdfWriter
  • PdfReader é usado para ler PDFs existentes.
  • PdfWriter é usado para criar e escrever um novo PDF.

2. Definir Caminhos de Arquivo

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: O PDF original ao qual a marca d’água será adicionada.
  • watermark_pdf: Um PDF de uma página separado que serve como a marca d’água.
  • output_pdf: O arquivo de saída que conterá as páginas com a marca d’água.

3. Ler PDFs

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Lê o PDF de entrada.
  • watermark: Lê o PDF da marca d’água.

4. Criar um Objeto Writer

writer = PdfWriter()
  • Isso será usado para criar o PDF final com a marca d’água.

5. Extrair Página da Marca d’Água

watermark_page = watermark.pages[0]
  • Assume-se que o PDF da marca d’água tenha apenas uma página, que é usada para sobrepor em todas as páginas.

6. Percorrer Páginas do PDF de Entrada & Mesclar Marca d’Água

for page in reader.pages:
    # Mesclar a marca d'água com a página atual
    page.merge_page(watermark_page)
    
    # Adicionar a página mesclada ao writer
    writer.add_page(page)
  • Itera por cada página do input_pdf.
  • merge_page(watermark_page) sobrepõe a marca d’água sobre a página atual.
  • Adiciona a página modificada ao writer.

7. Salvar o PDF com Marca d’Água

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Escreve as páginas modificadas em um novo arquivo PDF.

8. Imprimir Confirmação

print(f"Watermarked PDF saved as: {output_pdf}")
  • Imprime o caminho do arquivo de saída para confirmação.

PDF de Entrada, PDF de Marca d’Água e PDF de Saída com Marca d’Água

Captura de Tela Captura de Tela do PDF com Marca d’Água Usando Python

Conclusão

Neste guia, exploramos operações essenciais de PDF em Python, incluindo extração de texto, rotação de páginas, mesclagem, divisão e adição de marcas d’água. Com essas habilidades, você pode agora construir seu próprio gerenciador de PDF e automatizar várias tarefas de PDF de maneira eficiente.