我正在尝试将 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?您能否详细解释一下策略如何影响绩效?
我的问题是性能取决于什么,有没有办法让 PdfBox 更快?
一个主要区别是 PDFBox 总是逐字形处理文本字形,而 iText 通常逐块处理它(即文本绘制操作的单个字符串参数);这大大减少了 iText 中所需的资源。此外,iText 文本解析的面向事件的架构意味着比 PDFBox 的资源负担更低。 PDFBox 会将非纯文本提取严格需要的信息保留更长时间,从而消耗更多资源。
但库最初加载文档的方式也可能会产生影响。这里你可以尝试一下,PDFBox不仅提供了多种PDDocument.load
过载,但也有一些PDDocument.loadNonSeq
重载(实际上PDDocument.loadNonSeq
正确读取文档PDDocument.load
可能会被欺骗而误解 PDF)。所有这些不同的变体可能具有不同的运行时行为。
更多关于策略如何影响绩效的信息?
iText 带来了一种简单且更高级的文本提取策略。简单的假设页面内容流中的文本按阅读顺序出现,而更高级的则进行排序。默认情况下使用更高级的一种。因此,您可能可以通过使用简单的策略来进一步加快 iText 的速度。 PDFBox 始终进行排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)