1

我使用 Ghostscript 使用命令通过 java 渲染 PDF 中的图像,但是我正在尝试使用 ghost4j-0.5.0.jar 运行 Ghoscript 以从 PDF 中渲染图像,下面的代码是我从这个网站获取的。

问题是渲染过程需要两分钟以上才能生成一个图像,虽然通过命令行需要一秒钟,但我试图通过 java 运行所有东西,我想停止使用 imagemagick 和 ghostscript一个工具,请注意我对使用 ghoscript 很满意,我不想使用任何其他工具,因为它为我提供了我需要的图像质量和大小,我使用的代码是:

    public class SimpleRendererExample {

public static void main(String[] args) {
    imageRenderingFromPdf();
}

public static void imageRenderingFromPdf() {

    try {

         PDFConverter converter = new PDFConverter();
         PDFDocument doc;
        // load PDF document
        PDFDocument document = new PDFDocument();
        document.load(new File("d:/cur/outputfile.pdf"));
        // create renderer
        SimpleRenderer renderer = new SimpleRenderer();
        // set resolution (in DPI)
        renderer.setResolution(100);
        System.out.println("started");
        // render
        long before = System.currentTimeMillis();
        List<Image> images = renderer.render(document);
        long after = System.currentTimeMillis();

        System.out.println("reder " + (after - before) / 1000);
        // write images to files to disk as PNG
        try {
            before = System.currentTimeMillis();
            ImageIO.write((RenderedImage) images.get(0), "png", new File(
                    "d:/dd" + ".png"));
            after = System.currentTimeMillis();

            System.out.println("write " + (after - before) / 1000);
        } catch (IOException e) {
            System.out.println("ERROR: " + e.getMessage());
        }
    } catch (Exception e) {
        System.out.println("ERROR: " + e.getMessage());
    }

     }
4

1 回答 1

1

有几件事会减慢“渲染”过程。

首先,这不是由于Ghostscript,Ghostscript本身的工作原理是一样的,无论是通过命令行还是API执行都没有关系。

速度差异是ghost4j渲染实现的结果。我刚刚检查了 ghost4j 的源代码,发现它是 iText 和 Ghostscript 实现的混合体。

那么,您使用的代码是如何工作的:

  1. 首先,pdf 文档由 iText 加载和解析。
  2. 然后通过将加载的 pdf 文档写回磁盘到新位置来制作完整文档的副本。
  3. 然后初始化 Ghostscript。
  4. 然后 Ghostscript 再次从新位置加载、解析和渲染文档。
  5. 对于每个页面,Ghostscript 都在调用 ghost4j 显示设备回调。
  6. 对于每个显示设备回调,ghost4j 从内存中获取光栅化页面并将其存储到磁盘。
  7. 结束。

周部分是 iText 和使用的显示设备回调。我认为可以通过让 Ghostscript 处理光栅化结果存储而不是从 Java 手动执行来获得速度......

我想现在你可以明白为什么你注意到速度差异了。

于 2013-09-26T08:11:28.780 回答