Blog

Postado em em 17 de agosto de 2023

Extrair Imagens de PDF com Python – Aprenda Passo a Passo!

Quer aprender extrair imagens de PDF com Python? Hoje, vou te ensinar um método fácil e automático, passo a passo, para você fazer isso!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Extrair imagens de PDF com Python

Nesta aula, vou te ensinar como extrair imagens de PDF com Python! De forma rápida, simples e o melhor de tudo, automática!

Além de aprender essa nova integração entre Python e PDF, você poderá utilizar esse aprendizado para desenvolver outras automações em Python que irão agilizar suas atividades diárias ou de trabalho.

Os arquivos necessários para realizar este projeto estão disponíveis para download, junto com o gabarito.

Além dos arquivos, também precisaremos usar algum editor de código. Você pode usar o editor com o qual está mais acostumado ou, se preferir, pode usar o mesmo editor que estarei utilizando ao longo desta aula, o Jupyter Notebook.

Como Extrair Imagens de PDF com Python – Pikepdf

Instalando a Biblioteca Pikepdf:

Para este projeto, vamos utilizar a biblioteca pikepdf, que nos permite manipular arquivos PDF e extrair as imagens contidas neles de forma eficiente.

Vamos utilizar o arquivo PDF de resultados da Vale como modelo para o nosso exemplo. Esse mesmo arquivo foi utilizado em uma outra aula para aprender a extrair tabelas de PDF utilizando Python.

O primeiro passo para conseguirmos extrair imagens de PDF com Python é instalar a biblioteca que iremos utilizar. Para isso, abra o terminal do seu editor de códigos e execute o comando pip install pikepdf.

Instalando pikepdf

Como estou utilizando o Jupyter também é possível fazer a instalação diretamente pela célula dele executando:

!pip install pikepdf

Desenvolvendo nosso programa para extrair imagens PDF com Python:

Com a biblioteca instalada, podemos importá-la para o nosso código. Atente-se para as letras maiúsculas e minúsculas ao fazer o import.

from pikepdf import Pdf, PdfImage

A funcionalidade Pdf permite abrir um arquivo PDF existente em modo de leitura, enquanto a PdfImage cria e salva uma imagem em PDF. Neste caso, só precisamos importar essas duas funcionalidades específicas ao invés da biblioteca inteira.

O próximo passo na construção do nosso programa, que irá extrair imagens de PDF com Python, é abrir nosso arquivo PDF em modo de leitura.

Se o arquivo estiver na mesma pasta que o código, basta passar o nome do arquivo como parâmetro para o método Pdf.open(). Caso contrário, será necessário passar o caminho completo do diretório onde o arquivo PDF está.

arquivo = Pdf.open(“ResultadoVale.pdf”)

Agora podemos extrair todas as imagens contidas no PDF. Para fazer isso, usaremos um loop for para percorrer cada página do arquivo.

for pagina in arquivo.pages:

A função arquivo.pages retorna uma lista com todas as páginas do PDF, e em cada iteração a variável pagina receberá uma página individual.

A partir disso, podemos obter as imagens contidas nessas páginas usando o método pagina.images.items(). Esse método retorna um objeto Python contendo o nome da imagem e a própria imagem.

Apenas para visualizarmos isso, vamos criar e dar um print na variável imagem.

from pikepdf import Pdf, PdfImage

arquivo = Pdf.open("ResultadoVale.pdf")

for pagina in arquivo.pages:
    imagem = pagina.images.items()
    print(imagem)
Objeto imagem

Repare que cada objeto imagem contém uma string (str), que representa o nome do arquivo, e o objeto da imagem em si (QPDFObjectHandle). Para trabalhar com essas informações individualmente, faremos o unpacking do objeto imagem, atribuindo-o a duas variáveis: nome e imagem.

Além disso, precisamos lidar com o fato de que podem existir mais de uma imagem em uma mesma página. Portanto, vamos criar um segundo for que irá iterar sobre cada um dos nossos objetos (nossas imagens) e, em seguida, faremos o unpacking deles.

for pagina in arquivo.pages:
    for nome, imagem in pagina.images.items():

Agora que já conseguimos acessar cada uma das imagens no nosso arquivo, vamos criar um PdfImage a partir das nossas imagens e atribuí-lo à variável imagem_salvar.

for pagina in arquivo.pages:
    for nome, imagem in pagina.images.items():
        imagem_salvar = PdfImage(imagem)

Por fim, podemos salvar nossas imagens utilizando o método extract_to e passando para ele um parâmetro chamado fileprefix. Esse parâmetro representa o nome do arquivo que queremos salvar.

for pagina in arquivo.pages:
    for nome, imagem in pagina.images.items():
        imagem_salvar = PdfImage(imagem)
        imagem_salvar.extract_to(fileprefix= “nome do arquivo”)

Entretanto, para ficar mais organizado, em vez de passarmos apenas o nome do arquivo, iremos criar uma pasta chamada “imagens” no diretório onde estamos executando nosso código.

Pasta imagens

Agora, podemos passar para o fileprefix o caminho dessa pasta, seguido pelo nome das nossas imagens. E como o nome é uma variável, faremos uso das f-string para isso.

from pikepdf import Pdf, PdfImage

arquivo = Pdf.open("ResultadoVale.pdf")

for pagina in arquivo.pages:
    for nome, imagem in pagina.images.items():
        imagem_salvar = PdfImage(imagem)
        imagem_salvar.extract_to(fileprefix=f"imagens/{nome}")

Ao executar nosso código, todas as imagens do arquivo PDF serão salvas dentro da pasta imagens. E você pode fazer isso para quantos PDFs quiser.

Imagens salvas na pasta imagens

Cuidados ao Salvar as Imagens:

Quando realizamos o unpacking do nosso objeto nas variáveis nome e imagem, o nome que ele recebe sempre contém uma barra (/) antes do nome da imagem.

print variável nome

Portanto, se você for salvar a imagem fora de uma pasta específica, como fizemos, o ideal é remover essa barra do nome antes. Isso pode ser feito utilizando uma manipulação de string, como o método replace, por exemplo.

Conclusão – Extrair Imagens de PDF com Python

Nesta aula, mostrei como extrair imagens de PDF com Python através da biblioteca Pikepdf. Com um processo simples, foi possível extrairmos as imagens do PDF de forma eficiente e automática, salvando-as em uma pasta separada.

Com base nesse conhecimento, você pode aprofundar suas aplicações com essa biblioteca e seus conhecimentos em Python para criar automações capazes de auxiliar em suas tarefas cotidianas ou em seu trabalho.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador