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!

Para extrair imagens de PDF com Python, use bibliotecas como pikepdf ou PyMuPDF, que abrem o arquivo, percorrem cada página e salvam as imagens embutidas em arquivos separados. O pikepdf acessa os objetos de imagem internos do PDF e os exporta diretamente, sem perda de qualidade, de forma automática e reaproveitável em lote.

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

O que você aprende neste vídeo

Resposta rápida: A aula ensina a extrair as imagens de um PDF com Python usando a biblioteca pikepdf. Você aprende a abrir o arquivo com Pdf.open(), percorrer as páginas, listar as imagens com images.items() e salvá-las com PdfImage e extract_to() numa pasta própria. Imagem repetida entre páginas vira um arquivo só: tem o mesmo nome e cada gravação sobrescreve a anterior.

Neste vídeo (11 min):

  • 1:10 - A biblioteca pikepdf para exportar imagens e o PDF de exemplo: o relatório de resultados trimestrais da Vale
  • 2:05 - Instalação com !pip install pikepdf no Jupyter, ou sem a exclamação quando o comando vai no terminal
  • 2:30 - Importar Pdf para abrir o arquivo em modo leitura e PdfImage para transformar o objeto em imagem salvável
  • 3:10 - O paralelo com a PyPDF2, que segue a mesma lógica de ler com PdfReader e gravar com PdfWriter
  • 3:40 - Abrir o arquivo com Pdf.open(), passando só o nome quando ele está na pasta do código ou o caminho completo quando não está
  • 4:30 - Não há comando que extraia todas as imagens do PDF de uma vez: o loop for pagina in arquivo.pages percorre as 16 páginas
  • 5:25 - pagina.images.items() devolve, para cada imagem, um par com o nome do arquivo e o objeto da imagem
  • 6:15 - Desempacotar o par em nome, imagem e percorrer todas as imagens de cada página num segundo for
  • 7:05 - Criar PdfImage(imagem) e gravar com extract_to(fileprefix=nome), que por padrão salva na pasta do próprio código
  • 8:10 - Salvar numa pasta imagens com a f-string f"imagens/{nome}" e conferir os gráficos, o fundo da capa e a logo extraídos
  • 9:15 - A imagem que se repete em todas as páginas aparece uma vez na pasta, e o print(nome) mostra por quê: o mesmo nome em toda página, começando com uma barra
  • 10:00 - Por que a barra no nome faz o caminho ser lido como pasta, e por que rodar de novo só substitui as imagens já exportadas

Trechos do vídeo:

  • O pikepdf não tem um comando que exporte todas as imagens do documento de uma vez: a extração é por página, então o código percorre arquivo.pages e, dentro de cada página, as imagens dela
  • Cada item de pagina.images.items() traz duas informações, o nome interno da imagem e o objeto da imagem, e por isso pode ser desempacotado direto em duas variáveis
  • Gráficos inseridos no PDF como imagem saem na extração junto com logos e fundos; uma imagem repetida em várias páginas é extraída em cada uma com o mesmo nome e, por isso, sobra num único arquivo
  • O nome que o PDF dá a cada imagem começa com uma barra; salvar direto com ele faz o caminho ser interpretado como uma pasta, então o jeito simples é prefixar uma pasta de destino, como imagens/

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

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Começar agoraSeta para a direita
Fundo PythonTelas Python
Luz Python

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:

Codigo
!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.

Python
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á.

Codigo
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.

Codigo
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.

Python
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.

Codigo
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.

Codigo
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.

Codigo
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.

Python
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.

Perguntas frequentes

1. Qual biblioteca do Python extrai imagens de um PDF?

As mais usadas são pikepdf e PyMuPDF (importada como fitz), que acessam as imagens embutidas em cada página. Há ainda a pdf2image, mas ela converte a página inteira em imagem, e não separa as figuras originais. Para extrair as imagens de fato, prefira pikepdf ou PyMuPDF.

2. Como instalar a biblioteca pikepdf no Python?

Basta rodar pip install pikepdf no terminal ou prompt de comando. Depois é só importá-la no script com import pikepdf. Ela funciona em Windows, macOS e Linux e não exige o Adobe instalado, pois lê a estrutura interna do arquivo PDF diretamente pelo Python.

3. Dá para extrair texto e imagens de um PDF ao mesmo tempo?

Sim. A PyMuPDF extrai tanto texto quanto imagens do mesmo documento: use page.get_text() para o texto e page.get_images() para as figuras de cada página. Assim você automatiza a leitura completa do PDF em um único script, separando conteúdo textual e visual conforme a necessidade do projeto.

4. Como salvar as imagens extraídas de um PDF em uma pasta?

Depois de acessar cada imagem com a biblioteca escolhida, use o método de gravação em disco (por exemplo, extract() no pikepdf ou Pixmap.save() no PyMuPDF) apontando para o caminho desejado. Combine isso com um laço que numere os arquivos para exportar todas as figuras de uma vez, organizadas em uma pasta.

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?