性能 iText 与 PdfBox(2014)

问题描述 投票:0回答:2

我正在尝试将 pdf(我最喜欢的书 Effective Java,如果重要的话)转换为文本,我检查了 iText 和 Apache PdfBox。我看到性能上的巨大差异:使用 iText 需要 2:521,使用 PdfBox:6:117。 如果我的 PdfBOx 代码

PDFTextStripper stripper = new PDFTextStripper();
BUFFER.append(stripper.getText(PDDocument.load(pdf)));

这是给 iText 的

PdfReader reader = new PdfReader(pdf);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
  BUFFER.append(PdfTextExtractor.getTextFromPage(reader, i));
}

我的问题是性能取决于什么,有没有办法让 PdfBox 更快?或者只使用 iText?你能解释更多关于策略如何影响绩效的信息吗?

java performance itext pdfbox
2个回答
18
投票

我的问题是性能取决于什么,有没有办法让 PdfBox 更快?

一个主要区别是 PDFBox 总是逐个字形处理文本字形,而 iText 通常逐块处理它(即文本绘制操作的单个字符串参数);这大大减少了 iText 中所需的资源。此外,iText 文本解析的面向事件的架构意味着比 PDFBox 的资源负担更低。并且 PDFBox 保留纯文本提取不严格需要的信息的可用时间更长,从而消耗更多资源。

但是库最初加载文档的方式也可能有所不同。在这里您可以尝试一下,PDFBox 不仅提供多个

PDDocument.load
重载,还提供一些
PDDocument.loadNonSeq
重载(实际上
PDDocument.loadNonSeq
可以正确读取文档,而
PDDocument.load
可以被欺骗以误解 PDF)。所有这些不同的变体可能具有不同的运行时行为。

更多关于战略如何影响绩效的信息?

iText 带来了简单和更高级的文本提取策略。简单的假定页面内容流中的文本按阅读顺序出现,而更高级的假定排序。默认情况下使用更高级的。因此,您可能可以通过使用简单策略进一步加快 iText 的速度。 PDFBox 总是排序。


1
投票

在 PDFBox - 版本 2.0.12 中,他们将 PDFunctionType3.eval() 优化了 30%,降低了 COSOutputStream 的 RAM 要求,并在合并文件时删除了中间流。所有这些信息都在他们的发行说明中提供。请参阅以下链接以获取更多信息:

https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12343489&styleName=Html&projectId=12310760&Create=Create&atl_token=A5KQ-2QAV-T4JA-FDED%7Cddb31610c9c60486ac6cc58a5800069ddf78ccd

© www.soinside.com 2019 - 2024. All rights reserved.