2014-03-28 104 views
1

这让我困扰了整整一天的下午。 我遇到很多问题,现在我无法克服它们。如何使用GhostScript将PDF转换为JPG

我的代码:

public void pdf2jpg(){ 
    try { 
     File pdfFile =new File("c://tmp//1.pdf"); 
     PDFDocument document = new PDFDocument(); 
     document.load(pdfFile); 

     SimpleRenderer renderer = new SimpleRenderer(); 
     renderer.setResolution(300); 

     List<Image> images = renderer.render(document); 

     for (int i = 0; i < images.size(); i++) { 
      Image img= images.get(i); 
       ImageIO.write((RenderedImage)img, "jpg", new File(i+".jpg")); 
     } 

    } catch (IOException | RendererException | DocumentException e) { 
     e.printStackTrace(); 
    } 

    } 

我的盒子:Windows 7中,JDK:1.7.0_45(64位),GPL的ghostscript 9.0.4。 当我使用ghost4j 0.4.4,我得到了错误 “net.sf.ghost4j.renderer.RendererException: net.sf.ghost4j.GhostscriptException: Cannot initialize Ghostscript interpreter. Error code is -20

List<Image> images = renderer.render(document);

有些线程这里提到它是关于ghost4j版本。所以我改为0.4.6,error 20消失了,但是在同一句话上来了Warning: An error occurred while reading an XREF table.

我无法弄清楚如何走出这个“泥”的,

非常感谢您的帮助。

+0

这很奇怪,它成功地将pdf文件转换为jpg。但错误remain.'java.lang.reflect.InvocationTargetException \t在sun.reflect.GeneratedMethodAccessor4.invoke(来源不明) \t在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明) \t在java.lang.reflect中。 Method.invoke(Unknown Source) \t .... 引起:java.lang.OutOfMemoryError:Java堆空间。有什么问题。任何建议。 – Ron

+1

你绑定到ghost4j吗?当不尝试PDFBox时:http://stackoverflow.com/questions/7063324/extract-image-from-pdf-using-java。 – PeterMmm

+0

这是伟大的!我会尝试 。谢谢!!! – Ron

回答

1

我猜想返回的位图对于内存来说太大了,因为你得到了内存不足的错误。

你应该尝试直接使用的Ghostscript从2个原因在命令行中,首先你会看到,如果有关于外部参照,这表明你的PDF文件,一个真正的错误信息被损坏,二来你很可能会只运行shell命令调用GhostScript将PDF直接呈现为JPEG,而不是通过内存中的位图。除了别的,它可能更快。

gswin32c -sDEVICE=jpeg -o out.jpg input.pdf 
相关问题