Pular para o conteúdo

Como Usar o PyPDF Facilmente?

[

Como Trabalhar com PDFs no Python

O formato de documento portátil, ou PDF, é um formato de arquivo que pode ser usado para apresentar e trocar documentos de forma confiável em diferentes sistemas operacionais. Embora o PDF tenha sido originalmente desenvolvido pela Adobe, agora é um padrão aberto mantido pela Organização Internacional de Normalização (ISO). É possível trabalhar com arquivos PDF existentes no Python usando a biblioteca PyPDF2.

O PyPDF2 é uma biblioteca em Python pura que pode ser usada para várias operações em documentos PDF.

Ao final deste artigo, você aprenderá a fazer o seguinte:

  • Extrair informações do documento de um PDF em Python
  • Rotacionar páginas
  • Mesclar PDFs
  • Dividir PDFs
  • Adicionar marcas d’água
  • Criptografar um PDF

Vamos começar!

História do pyPdf, PyPDF2 e PyPDF4

A biblioteca original pyPdf foi lançada em 2005. A última versão oficial do pyPdf foi em 2010. Após cerca de um ano, uma empresa chamada Phasit patrocinou uma bifurcação do pyPdf chamada de PyPDF2. O código foi escrito para ser compatível com as versões anteriores e funcionou muito bem por vários anos, com a última versão lançada em 2016.

Houve uma série breve de lançamentos de uma biblioteca chamada PyPDF3, e então o projeto foi renomeado para PyPDF4. Todos esses projetos fazem praticamente a mesma coisa, mas a maior diferença entre pyPdf e PyPDF2+ é que as versões posteriores adicionaram suporte para Python 3. Existe também uma versão do pyPdf para Python 3, no entanto, não foi mantida por muitos anos.

Embora o PyPDF2 tenha sido abandonado em 2016, ele foi revivido em 2022 e está atualmente sendo mantido ativamente. A nova versão do PyPDF4 não é completamente compatível com o PyPDF2. A maioria dos exemplos neste artigo funcionará perfeitamente com o PyPDF4, mas alguns não funcionarão, por isso o PyPDF4 não é utilizado com tanta frequência neste artigo. Sinta-se à vontade para substituir os imports do PyPDF2 pelo PyPDF4 e ver como funciona para você.

pdfrw: Uma Alternativa

Patrick Maupin criou uma biblioteca chamada pdfrw que pode fazer muitas das mesmas coisas que o PyPDF2. Você pode usar o pdfrw para realizar as mesmas tarefas apresentadas neste artigo usando o PyPDF2, com exceção da criptografia.

A maior diferença ao usar o pdfrw é que ele integra-se à biblioteca ReportLab, permitindo que você pegue um PDF existente e construa um novo com o ReportLab, usando parte ou todo o PDF existente.

Instalação

A instalação do PyPDF2 pode ser feita usando o pip ou o conda, caso esteja usando o Anaconda em vez do Python comum.

Aqui está como você pode instalar o PyPDF2 com o pip:

Terminal window
$ pip install pypdf2

A instalação é rápida, já que o PyPDF2 não possui dependências. Provavelmente, você gastará tanto tempo baixando o pacote quanto instalando-o.

Agora, vamos ver como podemos trabalhar com PDFs em Python usando o PyPDF2.

Como Extrair Informações de um Documento PDF em Python

Para extrair informações de um PDF em Python usando o PyPDF2, siga estes passos:

  1. Importe a classe PdfFileReader do PyPDF2.
  2. Abra o arquivo PDF em modo de leitura binária usando a função open().
  3. Crie uma instância da classe PdfFileReader passando o arquivo aberto como argumento.
  4. Use o método getNumPages() para obter o número total de páginas do PDF.
  5. Utilize o método getDocumentInfo() para obter informações do documento, como o título, autor e palavras-chave.
  6. Por fim, feche o arquivo usando o método close().

Aqui está o código para realizar essas etapas:

from PyPDF2 import PdfFileReader
# Abra o arquivo PDF em modo de leitura binária
with open('documento.pdf', 'rb') as file:
# Crie uma instância de PdfFileReader
pdf_reader = PdfFileReader(file)
# Obtenha o número total de páginas do PDF
total_pages = pdf_reader.getNumPages()
# Obtenha informações do documento
document_info = pdf_reader.getDocumentInfo()
# Imprima o número total de páginas
print(f"Número total de páginas: {total_pages}")
# Imprima as informações do documento
print(f"Título: {document_info.title}")
print(f"Autor: {document_info.author}")
print(f"Palavras-chave: {document_info.keywords}")
# Feche o arquivo PDF
file.close()

Certifique-se de substituir 'documento.pdf' pelo caminho do arquivo PDF que você deseja extrair informações.

Depois de executar este código, você deverá ver o número total de páginas do PDF e as informações do documento impressas no console.

Como Rotacionar Páginas de um PDF

Com o PyPDF2, é possível rotacionar páginas específicas de um PDF. Aqui está um exemplo de como fazer isso:

from PyPDF2 import PdfFileReader, PdfFileWriter
# Abra o arquivo PDF em modo de leitura binária
with open('documento.pdf', 'rb') as file:
# Crie uma instância de PdfFileReader
pdf_reader = PdfFileReader(file)
# Crie uma instância de PdfFileWriter
pdf_writer = PdfFileWriter()
# Percorra todas as páginas do PDF
for page_num in range(pdf_reader.getNumPages()):
# Obtenha a página atual
page = pdf_reader.getPage(page_num)
# Rotacione a página em 90 graus no sentido horário
page.rotateClockwise(90)
# Adicione a página rotacionada ao PdfFileWriter
pdf_writer.addPage(page)
# Crie um novo arquivo PDF com páginas rotacionadas
with open('documento_rotacionado.pdf', 'wb') as output_file:
# Salve o conteúdo do PdfFileWriter no novo arquivo PDF
pdf_writer.write(output_file)
# Feche o arquivo PDF
file.close()

Certifique-se de substituir 'documento.pdf' pelo caminho do arquivo PDF que você deseja rotacionar e 'documento_rotacionado.pdf' pelo nome desejado para o novo arquivo PDF com as páginas rotacionadas.

Após executar este código, você deve encontrar um novo arquivo PDF com as páginas rotacionadas de 90 graus.

Como Mesclar PDFs

O PyPDF2 também permite mesclar vários arquivos PDF em um único arquivo. Veja como fazer isso:

from PyPDF2 import PdfFileMerger
# Crie uma instância de PdfFileMerger
merger = PdfFileMerger()
# Adicione os arquivos PDF que deseja mesclar
merger.append('arquivo1.pdf')
merger.append('arquivo2.pdf')
merger.append('arquivo3.pdf')
# Salve a mesclagem em um novo arquivo PDF
merger.write('arquivo_mesclado.pdf')
# Feche a mesclagem
merger.close()

Certifique-se de substituir 'arquivo1.pdf', 'arquivo2.pdf' etc. pelos caminhos dos arquivos PDF que você deseja mesclar. Substitua 'arquivo_mesclado.pdf' pelo nome desejado para o arquivo de saída que conterá a mesclagem dos PDFs.

Após executar esse código, você terá um arquivo PDF único que contém todas as páginas dos arquivos PDF mesclados.

Como Dividir PDFs

Usando o PyPDF2, você também pode dividir um arquivo PDF em vários arquivos menores. Aqui está um exemplo de como fazer isso:

from PyPDF2 import PdfFileReader, PdfFileWriter
# Abra o arquivo PDF em modo de leitura binária
with open('documento.pdf', 'rb') as file:
# Crie uma instância de PdfFileReader
pdf_reader = PdfFileReader(file)
# Crie uma instância de PdfFileWriter
pdf_writer = PdfFileWriter()
# Percorra todas as páginas do PDF
for page_num in range(pdf_reader.getNumPages()):
# Crie um novo PdfFileWriter para cada página
new_pdf_writer = PdfFileWriter()
# Obtenha a página atual
page = pdf_reader.getPage(page_num)
# Adicione a página ao novo PdfFileWriter
new_pdf_writer.addPage(page)
# Crie um novo arquivo PDF com a página atual
with open(f'documento_pagina_{page_num + 1}.pdf', 'wb') as output_file:
# Salve o conteúdo do novo PdfFileWriter no arquivo PDF
new_pdf_writer.write(output_file)
# Feche o arquivo PDF
file.close()

Certifique-se de substituir 'documento.pdf' pelo caminho do arquivo PDF que você deseja dividir. O código criará um arquivo PDF separado para cada página do PDF original, nomeados como 'documento_pagina_1.pdf', 'documento_pagina_2.pdf', e assim por diante.

Após executar este código, você terá vários arquivos PDF, cada um contendo uma página do PDF original.

Como Adicionar Marcas d’Água aos PDFs

É possível adicionar marcas d’água aos arquivos PDF usando o PyPDF2. Aqui está um exemplo de como fazer isso:

from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.pdfgen import canvas
# Abra o arquivo PDF em modo de leitura binária
with open('documento.pdf', 'rb') as file:
# Crie uma instância de PdfFileReader
pdf_reader = PdfFileReader(file)
# Crie uma instância de PdfFileWriter
pdf_writer = PdfFileWriter()
# Percorra todas as páginas do PDF
for page_num in range(pdf_reader.getNumPages()):
# Obtenha a página atual
page = pdf_reader.getPage(page_num)
# Crie um novo arquivo PDF temporário para adicionar a marca d'água
watermark_pdf = f'marca_dagua_pagina_{page_num + 1}.pdf'
# Crie um novo arquivo PDF com a marca d'água
with open(watermark_pdf, 'wb') as output_file:
# Crie uma instância de canvas do ReportLab
c = canvas.Canvas(output_file)
# Defina a fonte e o tamanho para a marca d'água
c.setFont("Helvetica", 40)
# Defina o texto da marca d'água
c.drawString(100, 100, "MARCA D'ÁGUA")
# Salve o canvas no arquivo PDF
c.save()
# Crie uma instância de PdfFileReader para o arquivo PDF com a marca d'água
watermark_reader = PdfFileReader(watermark_pdf)
# Obtenha a primeira página do arquivo PDF com a marca d'água
watermark_page = watermark_reader.getPage(0)
# Mescle a página do arquivo PDF original com a página do arquivo PDF com a marca d'água
page.mergePage(watermark_page)
# Adicione a página mesclada ao PdfFileWriter
pdf_writer.addPage(page)
# Salve o PDF com a marca d'água em um novo arquivo
with open('documento_com_marca_dagua.pdf', 'wb') as output_file:
pdf_writer.write(output_file)
# Feche o arquivo PDF
file.close()

Certifique-se de substituir 'documento.pdf' pelo caminho do arquivo PDF ao qual você deseja adicionar a marca d’água. O código criará um arquivo PDF separado para cada página do PDF original com a marca d’água, nomeados como 'marca_dagua_pagina_1.pdf', 'marca_dagua_pagina_2.pdf', e assim por diante. Em seguida, as páginas do PDF original serão mescladas com as páginas do PDF com a marca d’água, criando um novo arquivo PDF com a marca d’água.

Após executar este código, você terá um novo arquivo PDF com a marca d’água adicionada em cada página.

Como Criptografar um PDF

O PyPDF2 permite criptografar arquivos PDF com uma senha. Aqui está um exemplo de como fazer isso:

from PyPDF2 import PdfFileReader, PdfFileWriter
# Abra o arquivo PDF em modo de leitura binária
with open('documento.pdf', 'rb') as file:
# Crie uma instância de PdfFileReader
pdf_reader = PdfFileReader(file)
# Crie uma instância de PdfFileWriter
pdf_writer = PdfFileWriter()
# Percorra todas as páginas do PDF
for page_num in range(pdf_reader.getNumPages()):
# Obtenha a página atual
page = pdf_reader.getPage(page_num)
# Adicione a página ao PdfFileWriter
pdf_writer.addPage(page)
# Defina a senha para criptografar o PDF
pdf_writer.encrypt('senha')
# Salve o PDF criptografado em um novo arquivo
with open('documento_criptografado.pdf', 'wb') as output_file:
pdf_writer.write(output_file)
# Feche o arquivo PDF
file.close()

Certifique-se de substituir 'documento.pdf' pelo caminho do arquivo PDF que você deseja criptografar. Substitua 'senha' pela senha desejada para criptografar o PDF.

Após executar esse código, você terá um novo arquivo PDF criptografado com a senha fornecida.

Conclusão

Neste artigo, você aprendeu como trabalhar com arquivos PDF no Python usando a biblioteca PyPDF2. Você viu como extrair informações de um PDF, rotacionar páginas, mesclar PDFs, dividir PDFs, adicionar marcas d’água e criptografar PDFs. Essas são apenas algumas das operações possíveis que você pode realizar com PDFs usando o PyPDF2.

Para aprender mais sobre o PyPDF2 e a manipulação de arquivos PDF no Python, você pode consultar a documentação oficial do PyPDF2 e o livro “Automate the Boring Stuff with Python” de Al Sweigart.

Esperamos que este artigo tenha sido útil e que você agora tenha uma compreensão melhor de como trabalhar com PDFs no Python. Divirta-se explorando mais recursos e funcionalidades do PyPDF2 em seus projetos!