为什么 PDFBox PDFRenderer 很慢? [英] Why is PDFBox PDFRenderer slow?
问题描述
我想使用 PDFBox 2.x 和 PDFRenderer 类将 PDF 转换为 TIFF.
I want to convert a PDF to a TIFF using PDFBox 2.x and the PDFRenderer Class.
但与 ghostscript 相比,它的运行速度非常慢.
But it runs very slowly compared to ghostscript.
这是我的示例代码
public class SpeedTest
{
static long startTime = System.currentTimeMillis ();
public static void logTime (String msg)
{
long now = System.currentTimeMillis ();
System.out.println (String.format ("%.3f: %s", (now - startTime) / 1000.0, msg));
startTime = now;
}
public static void main (String[] args) throws Exception
{
//System.setProperty ("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider");
String pdfFileName = args[0];
String tiffFileName = args[1];
PDDocument document = PDDocument.load (new File (pdfFileName));
logTime (pdfFileName + " loaded.");
PDFRenderer pdfRenderer = new PDFRenderer (document);
logTime ("intitalized renderer.");
BufferedImage img = pdfRenderer.renderImageWithDPI (0, 600, ImageType.RGB);
logTime ("page rendered as image.");
ImageIO.write (img, "TIFF", new File (tiffFileName));
logTime ("image saved as TIFF.");
}
}
输出如下
0.521: sample.pdf loaded.
0.013: intitalized renderer.
2.910: page rendered as image.
2.005: image saved as TIFF.
如您所见,对 pdfRenderer.renderImageWithDPI
的调用需要近 3 秒(同样 ImageIO.write
-call 也需要 2 秒).
As you can see, the call to pdfRenderer.renderImageWithDPI
takes almost 3 secs (also ImageIO.write
-call takes 2 secs, too).
当使用 ghostscript 完成相同的任务时,整个任务在 0.4 秒内完成.
When done the same using ghostscript the complete task finishes in 0.4secs.
time gs -dQUIET -dBATCH -dNOPAUSE -sstdout=/dev/null -sDEVICE=tifflzw -r600 -dFirstPage=1 -dLastPage=1 -sOutputFile=sample.tif sample.pdf
real 0m0.389s
user 0m0.340s
sys 0m0.048s
我也试过了
System.setProperty("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider");
因为我运行的是 Java 8(准确地说是 1.8.0_161),但这没什么区别.
as I'm running Java 8 (1.8.0_161 to be precise) but that makes no difference.
感谢您的每一个想法,问候
Thanks for every idea, regards
托马斯
推荐答案
升级到2018年10月发布的JDK 1.8.0_191或JDK 9.0.4.
Upgrade to JDK 1.8.0_191 which was released on Oct, 2018, or JDK 9.0.4.
来自 Pdfbox 文档,
From Pdfbox docs,
PDFBox 和 Java 8
在 Java 8 中使用 PDFBox 时的重要通知1.8.0_191 之前或 Java 9 9.0.4 之前
Important notice when using PDFBox with Java 8 before 1.8.0_191 or Java 9 before 9.0.4
由于java颜色管理模块向LittleCMS",用户体验色彩表现缓慢操作.一个解决方案是禁用 LittleCMS 以支持旧的KCMS(柯达色彩管理系统)由:
Due to the change of the java color management module towards "LittleCMS", users can experience slow performance in color operations. A solution is to disable LittleCMS in favor of the old KCMS (Kodak Color Management System) by:
从 -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider 开始
或打电话
System.setProperty("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider")
来源:
https://bugs.openjdk.java.net/browse/JDK-8041125
这篇关于为什么 PDFBox PDFRenderer 很慢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!