【发布时间】:2017-07-18 15:46:09
【问题描述】:
有没有一种有效的方法可以使用 pdfbox 2.x 获取 pdf 中的页数?目前,我从我们的 java web 应用程序中执行 shell 命令 pdfinfo 以获取此信息。当我用 pdfbox 做同样的事情时,下面的代码可以让我得到正确的页数,但是对于大文件来说它比 pdfinfo 慢得多。一个 670 MB 的 pdf 文件在 pdfinfo 中需要 270 毫秒,在 pdfbox 中需要 7300 毫秒。
public static void main(String[] args) {
Date startDate = new Date();
PDDocument document = null;
try (FileInputStream in = new FileInputStream("D:\\pdftest\\test.pdf")){
MemoryUsageSetting memoryUsageSetting = MemoryUsageSetting.setupMixed(1024*1024*500);
document = PDDocument.load(in, memoryUsageSetting);
System.out.println(String.format("number of pages: %d", document.getNumberOfPages()));
} catch (IOException e) {
System.out.println(e.getMessage());
}
finally {
if (document != null) {
try {
document.close();
} catch (IOException e) {
System.out.println("error closing the pdf file.");
}
}
}
Date endDate = new Date();
System.out.println(endDate.getTime() - startDate.getTime());
}
【问题讨论】:
-
您的问题类似于这个问题:“为什么奔驰 S500 在行驶 200 米以将一封信放入邮箱时比尼桑 Micra 消耗更多的油?”
-
PDFBox 专为处理完整文件而设计。加载 PDF 时,它确实是完全加载的。但是,对于大多数 info 目的,您实际上只需要加载 PDF 对象的一小部分。因此,专门的 info 工具自动比 PDFBox 等通用库更快。
标签: java performance pdf pdfbox