java – 性能iText vs.PdfBox
我正在尝试将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总是按字形处理文本字形,而iText通常按块处理它的块(即文本绘制操作的单字符串参数);这大大减少了iText所需的资源.此外,面向事件的iText文本解析架构意味着资源负担比PDFBox低.并且PDFBox保留了较长时间可用于纯文本提取的严格要求的信息,从而花费更多资源. 但是库最初加载文档的方式也可能有所不同.在这里你可以试验一下,PDFBox不仅提供了多个PDDocument.load重载,还提供了一些PDDocument.loadNonSeq重载(实际上PDDocument.loadNonSeq正确读取文档,而PDDocument.load可能被欺骗以误解PDF).所有这些不同变体可能具有不同的运行时行为
iText带来了一种简单而更高级的文本提取策略.简单的假设页面内容流中的文本以阅读顺序显示,而更高级的文本排序.默认情况下,使用更高级的一个.因此,您可以通过使用简单的策略来加速iText甚至更多. PDFBox总是排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |