1

它困扰了我一整天的下午。我遇到了很多问题,现在我无法克服它们。

我的代码:

  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(64bit),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.在同一句话上。

我无法弄清楚如何摆脱这种“泥浆”,

非常感谢您的帮助。

4

1 回答 1

2

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

您应该尝试直接从命令行使用 Ghostscript 有两个原因,首先,您将能够查看是否有关于外部参照的真实错误消息,这表明您的 PDF 文件已损坏,其次您可以合理地运行 shell 命令调用 GhostScript 将 PDF 直接呈现为 JPEG,而不是通过内存中的位图。除了其他任何东西之外,它可能更快。

gswin32c -sDEVICE=jpeg -o out.jpg input.pdf
于 2014-03-28T10:59:39.647 回答