PDFBox:将PDF转换为图像比预期慢

5

我目前正在使用以下代码将PDF转换为图像:

@SuppressWarnings("unchecked")
public static Image convertPDFtoImage(ByteArrayInputStream bais) {

    Image convertedImage = null;

    try {

        PDDocument document = PDDocument.load(bais);
        List<PDPage> list = document.getDocumentCatalog().getAllPages();
        PDPage page = list.get(0);

        BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_RGB, 64);
        convertedImage = SwingFXUtils.toFXImage(image, null);

        document.close();

    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    return convertedImage;
}

然后,我在JavaFX ImageView中展示了转换后的图像。

此外,我需要导入这两个包,尽管我没有使用它们:

import org.apache.commons.logging.LogFactory;
import org.apache.fontbox.afm.AFMParser;

有两个问题:

  • 将DPI设置为64(在我看来并不算很高),将一个简单的单页PDF转换为图像通常需要2到3秒钟。这似乎有点慢,是正常的吗?
  • 我为什么需要导入这两个包而我并没有使用它们? 如果我不导入它们,就会出现很多错误,转换就无法完成。

我想在JavaFX中快速显示PDF,但两到三秒钟实在太长了。欢迎提供除将其转换为图像外,在JavaFX中显示PDF的其他方法。

非常感谢任何帮助!


关于所需的导入:如果解析器和记录器使用动态方式按名称搜索实现类,它们只能在初始化后才能找到它们。如果您导入这些类,将会触发静态初始化程序的执行...这只是一个猜测... - Jens-Peter Haack
导入某些东西并不会导致代码被执行;它只是一种编译时命名空间的便利。 - James_D
虽然更高的dpi意味着执行速度较慢,但渲染PDF所需的时间也取决于PDF本身的复杂性。 - Tilman Hausherr
1个回答

1
  1. 我在将pdf转换为图像时也遇到了类似的问题,我通过将PDFBox从1.8升级到2.0来解决这个问题。这使我的性能提高了50%。以前我的应用程序需要大约10秒钟才能将pdf转换为图像,现在只需要5秒钟。 请使用以下链接作为升级PDFBox的参考-
    https://pdfbox.apache.org/2.0/migration.html

  2. PDFBox不需要额外导入。

问候,
Yogesh


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接