性能 iText 与 PdfBox (2014)

2023-11-22

我正在尝试将 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(使用前将#替换为@)

性能 iText 与 PdfBox (2014) 的相关文章

随机推荐

  • Python 列表理解,具有独特的项目

    有没有办法在 Python 中创建仅包含唯一项的列表理解 我最初的想法是使用这样的东西 new items unicode item for item in items 然而 我后来意识到我需要省略重复的项目 所以我最终得到了这个丑陋的怪物
  • android - 如何使用 achartengine 更改图表的背景颜色

    我使用 achartengine 实现了折线图 但我想改变折线图的背景颜色 有人建议使用以下代码来更改背景颜色 mRenderer setApplyBackgroundColor true mRenderer setBackgroundCo
  • 用于创建尚不存在的内容的函数名称

    我有时会编写一个函数 如果尚不存在 则只创建一些东西 否则不执行任何操作 名字像CreateFooIfNecessary or EnsureThereIsAFoo 做工作 但他们感觉有点笨拙 也可以说GetFoo 但这个名字并不意味着foo
  • 捕获另一个表单抛出的异常

    我正在尝试这样做 我正在创建另一个表单 它的 FormClosed 方法会抛出一个异常 该异常应该由主表单捕获 主要形式 try frmOptions frm new frmOptions frm ShowDialog catch Exce
  • 循环内的 JavaScript 闭包 – 简单的实际示例

    var funcs let s create 3 functions for var i 0 i lt 3 i and store them in funcs funcs i function each should log its val
  • 在 TensorFlow 张量上调用 Keras 模型但保留权重

    In Keras 作为 TensorFlow 的简化接口 教程他们描述了如何在 TensorFlow 张量上调用 Keras 模型 from keras models import Sequential model Sequential m
  • WebRTC 对等协商工作流程如何?

    我需要开发一个自定义的 WebRTC 对等点 我需要在网络浏览器和非浏览器之间建立音频或 和数据连接 然而 我很难找到对握手阶段的正确 清晰的描述 诸如此类的问题的答案如何在WebRTC对等连接中创建数据通道 并不完全有帮助 因为它们不太详
  • keras lstm层中的多个内核是什么意思?

    On https keras io layers recurrent 我看到 LSTM 层有一个kernel and a recurrent kernel 它们的意义是什么 根据我的理解 我们需要 LSTM 单元的 4 个门的权重 然而 在
  • 如何加密和解密 PHP 字符串?

    我的意思是 Original String Salt or Key gt Encrypted String Encrypted String Salt or Key gt Decrypted Original String 也许是这样的 h
  • 何时调用 NSURLConnection 委托的release?

    当将委托传递给 a 时NSUrlConnection像这样的对象 NSURLConnection alloc initWithRequest request delegate handler 什么时候应该调用代表的release 应该是在c
  • Oracle执行计划中的访问和过滤谓词

    Oracle执行计划中的Access谓词和Filter谓词有什么区别 如果我理解正确的话 访问 用于确定需要读取哪些数据块 而 过滤 则在读取块后应用 因此 过滤是 邪恶的 在下面执行计划的谓词信息部分的示例中 10 access DOMA
  • '-[__NSDictionaryI length]: 无法识别的选择器发送到实例' - 试图找出原因

    I ve a UITableView与定制UILabel标题和副标题 以使文本右对齐 我的数据来自网络服务 我解析并存储在其中NSArray of NSDictionary 某些标题或副标题可以是 nil 空文本 为此 我将其放入 try
  • 将自定义功能区组添加到 Word 2007 中的现有自定义功能区组

    如何将新组添加到现有 第 3 方 自定义功能区选项卡加载项 我知道我可以通过指定选项卡 idMSo 值来添加到现成的功能区 但如何为自定义功能区选项卡执行此操作 我已经尝试过自定义功能区的 ID 值 但它只是重复功能区 还尝试过传递所需的自
  • 有没有办法检查状态栏的可见性?

    我有一项服务 当某些顶级活动处于 或不 处于全屏模式时 应该定期检查状态栏的可见性 是否可以 最后我发现了如何检查状态栏是否可见 它是某种黑客 但它对我有用 我在我的服务中创建了该方法 private void createHelperWn
  • GetRoomLists 成功但没有返回任何数据

    我正在使用 Exchange Web 服务调用 GetRoomLists 我们正在运行 Exchange 2010 以下代码是通过控制台应用程序执行的 根据 XML 响应 无错误 调用成功 但没有返回任何数据 当您尝试通过 Outlook
  • 在 iOS 设备上本地保存游戏分数...需要安全性吗?

    我是否需要用哈希值存储分数 即保护它不被用户编辑 欺骗 根据我的新手知识 用户无法查看和操作本地存储的数据 例如 plist 文件 谁能详细说明一下吗 编辑 我在本地存储分数并定期将其上传到游戏中心排行榜 即使设备已越狱 我也希望具有安全性
  • 在javascript中为什么使用“var that = this”[重复]

    这个问题在这里已经有答案了 嗨 我是 JavaScript 新手 使用这条线有什么好处 var that this 一个例子 function Person firstname lastname age this firstname fir
  • Mocha 如何知道done 已被指定?

    如果我使用 Mocha 编写异步测试 我需要做的就是在测试函数上指定 did 参数 test foo function done 我的问题是 Mocha 如何知道是否已完成 测试函数的定义应该是这样的 function test title
  • InvalidCastException 尝试从装箱 int 转换为可为 null 的枚举

    我有一个枚举 Foo public enum Foo Alpha Bravo Charlie 如果我尝试从盒装中进行以下转换int to a Foo 我得到一个InvalidCastException var x Foo object 1
  • 性能 iText 与 PdfBox (2014)

    我正在尝试将 pdf 我最喜欢的书 Effective Java 如果重要的话 转换为文本 我检查了 iText 和 Apache PdfBox 我发现性能有很大差异 使用 iText 需要 2 分 521 秒 使用 PdfBox 需要 6