Manipulando Arquivos PDF com Python

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Download do Artigo

Salve salve Pythonista!

Neste artigo, vamos explorar como manipular arquivos PDF usando a linguagem de programação Python.

Veremos como criar arquivos PDF, ler texto de arquivos existentes, combinar vários arquivos PDF em um único e até mesmo dividir um arquivo PDF em páginas separadas.

Vamos nessa!

Vá Direto ao Assunto…

Os arquivos PDF são amplamente utilizados para compartilhar documentos eletrônicos, como relatórios, e-books, manuais, entre outros.

Saber manipular esses arquivos usando programação pode trazer muitos benefícios, como automatizar tarefas relacionadas a documentos, extrair informações de arquivos, criar relatórios personalizados e até mesmo modificar documentos existentes para atender a requisitos específicos.

Felizmente, a biblioteca pypdf oferece uma maneira fácil de trabalhar com arquivos PDF em Python.

:warning: Você ainda usa PyPDF2? O PyPDF2 foi descontinuado e fundido no pypdf - métodos antigos como PdfFileReader, .numPages e .extractText() foram removidos. Neste artigo usamos a biblioteca atual, pypdf. Consulte a documentação oficial.

:white_check_mark: Testado em Python 3.13 / pypdf 5.x. Todos os exemplos abaixo foram validados e funcionam em conjunto.

Antes de mergulhar nos detalhes, aqui está um mapa rápido das principais operações e o código pypdf correspondente:

Operação Código pypdf
Ler / extrair texto texto = PdfReader("a.pdf").pages[0].extract_text()
Contar páginas total = len(PdfReader("a.pdf").pages)
Juntar PDFs writer.append("a.pdf"); writer.append("b.pdf")
Extrair uma página writer.add_page(reader.pages[0])
Girar uma página reader.pages[0].rotate(90)
Criar PDF (página em branco) writer.add_blank_page(width=595, height=842)
Salvar no disco with open("saida.pdf", "wb") as f: writer.write(f)

Vamos explorar cada um desses recursos em detalhes!

Como criar um arquivo PDF do zero com Python?

Vamos começar criando um arquivo PDF do zero!

Para fazer isso, precisamos instalar a biblioteca pypdf usando o gerenciador de pacotes pip.

Primeiro, crie e ative um Ambiente Virtual para esse projeto.

E se ainda não sabe o que é um Ambiente Virtual, pare tudo e leia esse artigo onde vou te mostrar como criar e utilizar Ambientes Virtuais com Virtualenv

Com seu ambiente virtual ativo, abra o terminal e execute o seguinte comando:

1
pip install pypdf

Agora, vamos ao código! O processo tem 3 passos:

  1. Importar a classe PdfWriter da biblioteca pypdf e criar um objeto PdfWriter.
  2. Adicionar uma página em branco ao arquivo PDF.
  3. Salvar o arquivo final no disco.
1
2
3
4
5
6
7
8
9
10
11
from pypdf import PdfWriter

# Criando um objeto PdfWriter
pdf_writer = PdfWriter()

# Adicionando uma página em branco no tamanho A4 (em points)
pdf_writer.add_blank_page(width=595, height=842)

# Salvando o arquivo PDF no disco
with open("meu_arquivo.pdf", "wb") as output_pdf:
    pdf_writer.write(output_pdf)

No código acima, criamos um objeto PdfWriter usando PdfWriter() e, em seguida, adicionamos uma página em branco ao arquivo PDF usando o método add_blank_page(), informando a largura e a altura em points (595 x 842 corresponde ao tamanho A4).

Por fim, salvamos o arquivo final usando write(output_pdf) e especificando o nome do arquivo como "meu_arquivo.pdf".

Ao executar esse código, um PDF com uma página em branco será criado e salvo no diretório atual.

:warning: Atenção: chamar pdf_writer.add_page() sem argumento lança TypeError, pois esse método espera uma página já existente (de um PdfReader). Para criar uma página nova use add_blank_page().

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Como ler e extrair texto de um arquivo PDF?

Agora que sabemos como criar um arquivo PDF, vamos aprender como ler o texto de um arquivo PDF existente.

Para isso, usamos a classe PdfReader da biblioteca pypdf.

Vamos abrir um arquivo PDF existente, extrair o texto dele e exibi-lo no console. São 4 passos:

  1. Criar um objeto PdfReader apontando para o arquivo.
  2. Descobrir quantas páginas o PDF tem com len(reader.pages).
  3. Percorrer as páginas e chamar extract_text() em cada uma.
  4. Imprimir o texto resultante.
1
2
3
4
5
6
7
8
9
10
11
12
13
from pypdf import PdfReader

# Abrindo um arquivo PDF existente
pdf_reader = PdfReader("meu_arquivo.pdf")

# Obtendo o número de páginas do arquivo PDF
num_pages = len(pdf_reader.pages)

# Lendo o texto de cada página
for page_number in range(num_pages):
    page = pdf_reader.pages[page_number]
    text = page.extract_text()
    print("Texto da página", page_number + 1, ":", text)

No código acima, criamos um objeto PdfReader passando o caminho do arquivo diretamente - o pypdf cuida de abrir e fechar o arquivo para nós.

Usamos len(pdf_reader.pages) para obter o número total de páginas do arquivo PDF.

Depois, usamos um loop for para iterar sobre cada página do arquivo PDF.

Acessamos pdf_reader.pages[page_number] para obter uma página específica e extract_text() para extrair o texto dessa página.

Finalmente, imprimimos o texto resultante no console.

:information_source: A extração de texto depende de o PDF conter texto “de verdade”. PDFs que são apenas imagens escaneadas não retornam texto - nesse caso você precisaria de OCR (por exemplo, com pytesseract).

:bulb: Estou construindo o Ebookr.ai, uma plataforma onde você cria ebooks profissionais com IA sobre qualquer assunto - do zero ao PDF pronto, com capas e infográficos gerados automaticamente. Dá uma olhada!

Como juntar (combinar) vários arquivos PDF em um só?

Às vezes, é necessário combinar vários arquivos PDF em um único arquivo.

Felizmente, a biblioteca pypdf oferece suporte a essa funcionalidade através do próprio PdfWriter (o antigo PdfFileMerger foi descontinuado).

Vamos criar um exemplo simples para combinar dois arquivos PDF em um único arquivo, em 3 passos:

  1. Criar um objeto PdfWriter.
  2. Anexar cada PDF com writer.append().
  3. Salvar o arquivo combinado no disco.
1
2
3
4
5
6
7
8
9
10
11
12
from pypdf import PdfWriter

# Criando um objeto PdfWriter
pdf_writer = PdfWriter()

# Anexando os arquivos PDF ao objeto PdfWriter
pdf_writer.append("arquivo1.pdf")
pdf_writer.append("arquivo2.pdf")

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

No código acima, criamos um objeto PdfWriter e anexamos dois arquivos PDF usando o método append(), que aceita o caminho do arquivo diretamente.

Em seguida, salvamos o arquivo combinado usando write(output_pdf).

Como dividir um PDF e extrair páginas separadas?

Às vezes, temos um arquivo PDF grande e precisamos dividi-lo em várias páginas separadas. Vamos ver como fazer isso usando a biblioteca pypdf, em 4 passos:

  1. Abrir o arquivo original com PdfReader.
  2. Descobrir o número de páginas com len(reader.pages).
  3. Para cada página, criar um PdfWriter e adicionar essa página com add_page().
  4. Salvar cada página em um arquivo separado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pypdf import PdfReader, PdfWriter

# Abrindo o arquivo PDF original
pdf_reader = PdfReader("arquivo_grande.pdf")

# Obtendo o número de páginas do arquivo PDF
num_pages = len(pdf_reader.pages)

# Dividindo o arquivo em várias páginas separadas
for page_number in range(num_pages):
    # Criando um objeto PdfWriter
    pdf_writer = PdfWriter()

    # Copiando a página atual para o novo arquivo
    page = pdf_reader.pages[page_number]
    pdf_writer.add_page(page)

    # Salvando a página separada
    with open(f"pagina_{page_number + 1}.pdf", "wb") as output_pdf:
        pdf_writer.write(output_pdf)

No código acima, criamos um objeto PdfReader a partir do arquivo original e usamos len(pdf_reader.pages) para obter o número total de páginas.

Usamos um loop for para iterar sobre cada página do arquivo PDF original.

Em cada iteração, criamos um novo objeto PdfWriter e copiamos a página atual (pdf_reader.pages[page_number]) para esse novo arquivo usando add_page().

Em seguida, salvamos a página separada no disco usando write(output_pdf).

Como girar uma página de um PDF?

Outra operação comum é girar uma página - útil para corrigir documentos escaneados de lado. No pypdf, basta chamar rotate() na página (o ângulo precisa ser múltiplo de 90):

1
2
3
4
5
6
7
8
9
10
11
12
13
from pypdf import PdfReader, PdfWriter

pdf_reader = PdfReader("arquivo.pdf")
pdf_writer = PdfWriter()

# Girando a primeira página em 90 graus no sentido horário
page = pdf_reader.pages[0]
page.rotate(90)
pdf_writer.add_page(page)

# Salvando o resultado
with open("arquivo_girado.pdf", "wb") as output_pdf:
    pdf_writer.write(output_pdf)

Aqui usamos page.rotate(90) para girar a página em 90 graus e, em seguida, adicionamos a página girada ao PdfWriter antes de salvar.

Conclusão

Neste artigo, vimos como manipular arquivos PDF usando Python.

Aprendemos como criar arquivos PDF do zero, ler texto de arquivos existentes, combinar vários arquivos PDF em um único e dividir um arquivo PDF em páginas separadas.

Essas habilidades podem ser úteis em uma variedade de cenários, desde automatizar tarefas relacionadas a documentos até extrair informações úteis de arquivos PDF existentes.

A biblioteca pypdf é uma ferramenta poderosa e fácil de usar para o trabalho com arquivos PDF em Python - e, por ser a sucessora oficial do antigo PyPDF2, é a escolha recomendada hoje.

Recomendo que você explore mais recursos dessa biblioteca na documentação oficial do pypdf e experimente diferentes manipulações de arquivo PDF por conta própria.

Até a próxima!

Perguntas frequentes

Como ler e extrair texto de um PDF com Python?

Para ler e extrair texto de um PDF, use a biblioteca pypdf: abra o arquivo com reader = PdfReader('arquivo.pdf'), acesse a página com reader.pages[0] e chame page.extract_text(). Para todas as páginas, percorra reader.pages em um for.

Como juntar (combinar) vários PDFs em um só com Python?

Crie um PdfWriter, use writer.append('arquivo1.pdf') e writer.append('arquivo2.pdf') para anexar cada PDF e salve com with open('saida.pdf', 'wb') as f: writer.write(f). No pypdf atual, o PdfWriter substitui o antigo PdfFileMerger.

O PyPDF2 ainda funciona em 2026?

Não use mais o PyPDF2: ele foi descontinuado e fundido no pypdf. Métodos antigos como PdfFileReader, .numPages e .extractText() foram removidos. Instale a versão atual com pip install pypdf e use PdfReader, len(reader.pages) e extract_text().

Como extrair uma página específica de um PDF com pypdf?

Para extrair uma página específica, indexe reader.pages[i] (a contagem começa em 0). Para salvá-la isolada, adicione-a a um PdfWriter com writer.add_page(reader.pages[i]) e grave o arquivo com writer.write().

Como criar e escrever um arquivo PDF do zero com Python?

Crie um PdfWriter, adicione uma página em branco com writer.add_blank_page(width=595, height=842) (tamanho A4 em points) e salve com with open('novo.pdf', 'wb') as f: writer.write(f). Chamar add_page() sem argumento gera TypeError.

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.