PDFBox - Extrair Imagens de um PDF

Olá, estou utilizando o PDFBox 1.6.0 na tentativa de obter imagens de uma leva de arquivos de PDF para a conversão em um arquivo de Imagem.

Encontrei aqui pelo fórum mesmo o código que extrai uma página de PDF e a converte em imagem.

http://www.guj.com.br/java/69346-converter-pdf-em-jpeg

O problema é que a API gera um arquivo de imagem da página toda e a transforma em imagem. Como se a imagem fosse a página impressa do documento.

Há alguma forma de extrair a imagem de uma ou mais páginas de um PDF e transformar aquele conteúdo em imagem?

Bem, acabei “solucionando”.

Rodei um pouco da API do PDFBox mas não encontrei nada relacionado.

Acabei por encontrar isto aqui:

http://www.guj.com.br/java/138434-extrair-imagem-de-pdf

e acrescentei uma solução a mais do proposto pelo código original do rapaz que postou.

com aquilo se consegue extrair n imagens de um documento pdf.

com o que eu adicionei faço o java interpretar a imagem e salvar num formato que qualquer visualizador entenda.

Entretanto usa-se o iText para isso.

O problema é um pouco mais chato que parece, porque o PDF não é bem um formato como o Word (onde figuras e texto são bem separados). Na verdade, você pode criar um PDF sem absolutamente texto algum, e outra coisa mais bizarra, que é um PDF feito a partir de imagens escaneadas mas que pode ser indexado como se ele fosse composto de texto.

De qualquer maneira, a busca “extrair imagens de um pdf” no Google me trouxe os nomes de alguns programas, que infelizmente não testei.

bom no meu caso, eu tenho pdfs que são apenas imagens.

Testei também criando um pdf apartir do MS Word 2010.

uma em BMP e outra em JPG.

Inicialmente eu não conseguia visualizar as imagens em BMP com o código original do link que postei.

Adaptei para o meu caso e funcionou cara.

Como no MEU caso os anexos PDF não conterão texto (estou fazendo um trabalho de conversão de dados apenas) eu não tive problemas.

alias, testei com um arquivo real. que no caso continha duas imagens no arquivo pdf. e ele as converteu sem o menor problema.

E usando tanto o iText como o PDFBox é possível extrair o texto separadamente.

O lance é que o PDFBox não é tão eficiente assim com imagens.

Como eu havia dito, o máximo que consegui com ele foi gerar uma página impressa da página com a imagem.

Testei também utilizando outro formato de imagem no ImageIO (como png).

O tamanho aumentou consideravelmente mas a qualidade (padrão da compressão do PDF quando trabalha com imagem) não mudou.

Enfim, para o meu caso funcionou. Cabe a quem for usar fazer mais testes.

Ao menos é possível fazer isso.

Rodei o google quase o dia todo pra caçar essa solução. =)

Só quis acrescentar o que acabei ‘solucionando’ para mim.

enfim! consegui de fato extrair as imagens como queria.

cada documento de pdf dera ao menos duas imagens em jpg.

que são os documentos escaneados que estão por página no pdf.

como eu já suspeitava, e por ter trabalhado antes com pdf e iText, o formato em si é meio… esquisito.

como o ‘entanglement’ disse: pdf não é um formato “like” word.

tive um caso aqui em que dois arquivos são pdfs gerados no iReport diretamente em PDF.

Nesse documento eu tenho uma estrutura com Header, Body e Footer.

No Header eu tenho uma imagem - logo - alinhada na esquerda e na direita um texto.

No corpo uma sequencia de texto que é gerada dinamicamente com o iReport (com tabela e os escambau).

E no Footer tenho uma imagem - logo - alinhada na esquerda com um texto e uns hiperlinks.

E o algorítimo não reconheceu imagens no documento.

No iReport elas tem a mesma propriedade (já que são a mesma página), mas ao tentar extrair a informação da página obtive um

java.lang.IllegalArgumentException: im == null!
	at javax.imageio.ImageIO.write(Unknown Source)
	at javax.imageio.ImageIO.write(Unknown Source)
	at Test.ExtractImagesFromPDF3(Test.java:223)
	at Test.main(Test.java:290)

então, não é garantido que esse código funcione para todos os casos.

mas mesmo assim foi muito útil.