Eu estou usando uma biblioteca chamda Java Renderer para converter documentos PDF para imagem. Porém esta biblioteca não converte corretamente arquivos de grande área.
Alguém conhece outra biblioteca freeware para Java que faça este trabalho?
Eu estou usando uma biblioteca chamda Java Renderer para converter documentos PDF para imagem. Porém esta biblioteca não converte corretamente arquivos de grande área.
Alguém conhece outra biblioteca freeware para Java que faça este trabalho?
acho que vc consegue isso com itext.
Já tentei usá-lo mas não consegui nada.
tem um referencia o itext in action vai la no 4shared que vc encontra e nessa referencia vc consegue resolver o seu problema.
Achei o documento e estou baixando-o. Não acredito q o iText vá ajudar, mas esse documento é novo, não ouvi falar dele antes! Obrigado pela esperança! =) Vou testar e logo falo o resultado!
bo brother eu te digo que sim, pq tem tres formas de se gerar relatorio com itext uma é pdf outra imagem e HTML.
se vc quiser converter vc pega o pdf converte para bytearray e devolve a imagem…
mais ou menos assim.
espero ter ajudado.
Bom dia Alan!!
Eu consegui chegar bem perto com a solução que você ofereceu!! Realmente é possível fazer esse trabalho com o iText!!
Só estou com problemas no seguinte item:
Eu pego o conteúdo da página do documento em forma de byte[] e quando vou converter pra BufferedImage ele converte pra null!! Não estou conseguindo achar o melhor jeito pra essa conversão.
Depois de mtas tentativas com voltas e sem voltas, o meu código para essa conversão ficou congelado assim:
public static BufferedImage toImage(byte[] data) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
BufferedImage image = ImageIO.read(bais);
return image;
} catch (Exception ex) {
System.out.println("Erro: " + ex.getMessage());
return null;
}
}
E nesse código ele está retornando null sem cair na excessão!! O ImageIO.read não consegue ler! O BufferedImage recebe nullo.
Você ou mais alguém pode me ajudar a resolver esse problema?
eu acredito que vc esta indo pelo lado diferente, faz o seguinte pega o fonte do JBoleto que la tem isso ja pronto.
Oi Alan!!
Eu pesquisei o JBoleto mas não encontrei nada… Ele tem código de captura de imagens no disco e escrita das mesmas num documento PDF. Ele foi na contra-mão do que preciso.
da uma olhada nisso e ve se te ajuda
http://www.coderanch.com/t/63481/Other-Open-Source-Projects/iText-pdf-image-conversion
A resposta se chama PDFBox
ainda é dev mas é um excelente projeto.
E tem exemplos sobre como converter PDF para imagem
A resposta se chama PDFBoxainda é dev mas é um excelente projeto.
E tem exemplos sobre como converter PDF para imagem
Eu baixei esta ferramenta, a implementei e estou trabalhando nela. Porém ela não está convertendo o projeto por não encontrar uma classe da própria biblioteca. Você já utilizou esta ferramenta para este propósito?
Eis a solução!! O PDFBox não funciona corretamente sem o FontBox!! Precisei baixá-lo também!! Já está tudo funcionando como precisava!!!
Muito obrigado a vocês, Alan e Felagund, pela ajuda!!!
Usando o PDFBox e o FontBox na pasta de biblioteca, eis o código para a conversão:
/*
* Classe de conversão de arquivo PDF para Imagem
*/
package conversao;
import java.awt.image.BufferedImage;
import java.util.List;
import java.util.Vector;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.PDPage;
/**
*
* @author Márcio Raphael Rigues
*
*/
public class PdfToBufferedImage {
public Vector<BufferedImage> Convert(String caminho){
try {
Vector<BufferedImage> paginas = new Vector<BufferedImage>();
PDDocument document = PDDocument.load(caminho);
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
for (int i = 0; i < pages.size(); i++) {
PDPage singlePage = pages.get(i);
BufferedImage buffImage = singlePage.convertToImage();
paginas.add(buffImage);
}
return paginas;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
Abraços!!!
Eu fiz assim tambem ams ta dando erro no = PDDocument document = PDDocument.load(caminho);
o erro é esse:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.pdfbox.pdfparser.BaseParser.(BaseParser.java:58)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:861)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:829)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:754)
at teste.Convert(teste.java:20)
at teste.main(teste.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Boa tarde barradas,
minhas pesquisas avançaram muito depois deste tópico. Este componente se mostrou insuficiente pra mim e usei outro mais profissional: o JPedal (http://www.jpedal.org/). Lá tem duas versões: a free e a paga. Nós aqui precisamos da paga. Valeu muiiito a pena! É excelente e suporta todas as fontes que precisamos.
Você pode usar a versão gratuita que também é muito boa. O site te informa de tudo e ainda tem um código de exemplo que te ajuda a fazer uma conversão básica. =)
Abraços e boa sorte! =)
mas você não sabe o que é esse erro que esta dando no meu codigo ?
ou pelo menos tem um exemplo com JPanel ?
Não sei, amigo. Eu larguei mão da PDFBox pq dava mto problema na época.
E um exemplo com JPedal ? Não consigo fazer o do site funcionar !
Jovem,
Um tempo atrás precisei adotar uma solução semelhante, mas o iText não atendia minhas necessidades então acabei montando uma biblioteca para tal funcionalidade.
Abs,
Fal mrapha blz???
então eu estava usando o pdf box tbm sem problemas… o problema é q os pdfs que estão sendo inseridos no nosso sistema aqui para serem convertidos em imagens,… estão vindo com fotos e com letras muito pequenas … o pdf box não está conseguindo converter as imagem tão bem… esse jpedal consegue fazer isso ??? eu baixei um jar nesse link que vc deixou… e testei em um pdf que tenho aqui com imagens e font bem pequena … as imagens sairam bem parecidas com as do pdfbox, não senti muita melhora… tem alguma forma no código pra melhorar a conversão ??? a versão paga consegue fazer isso ???
vlwwww mesmo!!!
Oi Edward,
nós utilizamos a versão paga do JPedal e recebemos matérias diariamente para um sistema governamental que trabalha especificamente através desse processamento.
Tanto a versão paga quanto a free nos foi satisfatória. Compramos a ferramenta para ter um uso com suporte mais amplo e sem limitações. Talvez esse limite de fonte possa ser um plus do pago que não sei te mencionar.
Nós precisamos sempre desse processamento eficaz pois trabalhamos usando as medidas do conteúdo a ser impresso nas páginas e precisamos das imagens perfeitas. Então posso te passar que o JPedal é 100% eficaz. Segue o algoritmo que usamos para isso:
public String[] convert(String nome) throws Exception
{
//Carregamento das classes de trabalho
Mensuracao mens = new Mensuracao();
PdfDecoder decode_pdf = new PdfDecoder(true);
PdfDecoder.setFontReplacements(decode_pdf);
BufferedImage pagina = null;
try
{
//Abertura do arquivo PDF gravado em disco
decode_pdf.openPdfFile(nome);
//Varredura de páginas do arquivo PDF
for(int page = 1; page <= decode_pdf.getPageCount(); page++)
{
//Conversão da página em imagem
pagina = decode_pdf.getPageAsImage(page);
//Mensuração da página
mens.calcular(pagina); //
//Limpeza de memória e fechamento das conexões
pagina = null;
decode_pdf.closePdfFile();
decode_pdf.openPdfFile(nome);
}
decode_pdf.closePdfFile();
//Retorno do resultado final
return mens.getResultado();
}
catch (Exception e)
{
throw new Exception("Erro ao gerar imagens: " + e.getMessage());
}
}
Ressalto que descarto o lixo dentro do laço pois recebemos documentos com X páginas. Se eu converter todas as páginas em imagem guardando tudo em um Vector eu terei um Estouro de Memória. Então processe cada página e tente guardar as imagens em disco, ao invés de memória, para não estourar a memória. Acho que é só.
Boa sorte! ;)