我是iText Software的首席技术官,所以就像评论部分已Michaël answered一样,我同时也是最权威的来源以及有偏见的来源。
这是一个非常简单的比较图表on the iText web site。
此图表不包含文字提取,因此请允许我列出自iText 5以来的相关改进。
您可能还找到了this page。
如果您想知道错误修复和文本解析的性能改进,这是一个更详尽的列表:
- 5.0.0:文本提取:在用户空间中执行计算的主要大修。这允许解析器正确地确定换行符,即使文本或页面被旋转也是如此。
- 5.0.1:重构回调,因此方法签名不需要随着渲染回调API的发展而改变。
- 5.0.1:重构以使外部用户更容易与内容流处理器交互。还重构了渲染侦听器,因此文本和图像事件侦听发生在同一个界面中(减少了很多非增值复杂性)
- 5.0.1:文本渲染器的新过滤功能。
- 5.0.1:预览PDF内容的附加实用方法。
- 5.0.1:添加了更高级的文本渲染器侦听器,可以根据页面上文本的物理位置重建页面内容
- 5.0.1:添加了对XObject表单处理的支持(现在可以解析通过PdfTemplate添加的文本)
- 5.0.1:为XObject Image回调添加了基本支持
- 5.0.1:错误修复 - 文本提取对于某些页面方向不正确
- 5.0.1:错误修复 - 矩阵以错误的顺序连接。
- 5.0.1:PdfTextExtractor:更改了默认的渲染侦听器(新的位置感知策略)
- 5.0.1:图形状态的getters
- 5.0.2:对文本提取功能的接口进行重大重构:例如引入类PdfReaderContentParser
- 5.0.2:CMapAwareDocumentFont:调整以使处理准无效的PDF文件更加健壮
- 5.0.2:PdfContentReaderTool:空指针处理,以及一些放置良好的刷新调用
- 5.0.2:PdfContentReaderTool:显示有关资源条目的详细信息
- 5.0.2:PdfContentStreamProcessor:调整因此嵌入式图像不会导致解析问题并改进EI检测
- 5.0.2:LocationTextExtractionStrategy:修复了反并行算法,并考虑了负字符间偏移。更改为首先构建文本模型的文本提取策略,然后计算连接要求。
- 5.0.2:对中介实施的调整; Bruno对文本提取所做的更改的最优化;例如:引入类MarkedContentInfo。
- 5.0.2:对文本提取功能的接口进行重大重构:例如引入类PdfReaderContentParser
- 5.0.3:添加了以用户单位获取图像区域的方法
- 5.0.3:更好地解析内嵌图像
- 5.0.3:在解析ToUnicode流时添加对开始/结束序列的额外检查。
- 5.0.4:数组中的内容流应该被解析为好像是用空格分隔
- 5.0.4:Expose CTM
- 5.0.4:重构将内联图像处理引入其自己的类中。如果没有应用过滤器,则添加图像数据的解析(存在一些PDF,其中图像数据的末尾与EI操作符之间没有空白)。最终,最好实际解析图像数据,但这需要对iText解码器进行相当大的重构(从流中工作而不是已知长度的byte [])。
- 5.0.4:处理多级过滤器;纠正将空格作为内嵌图像流的第一个字节的错误。
- 5.0.4:将流过滤器应用于内嵌图像。
- 5.0.4:PdfReader:为任意字节数组(而不仅仅是流)公开滤波器解码器
- 5.0.6:CMapParser:修复以读取损坏的ToUnicode cmaps。
- 5.0.6:处理略有格式的嵌入图像
- 5.0.6:CMapAwareDocumentFont:某些PDF的diff映射大于256个字符。
- 5.0.6:性能:缓存文本提取中使用的字体
- 5.1.2:PRTokeniser:使算法找到startxref更高效的内存。
- 5.1.2:RandomAccessFileOrArray:改进了对无法映射的大型文件的处理
- 5.1.2:CMapAwareDocumentFont:修复NPE,如果映射没有初始化(我宁愿结束垃圾字符而不是引发意外的异常)
- 5.1.3:重构过滤器应用于流的方式,调整解析器以便它可以处理多级过滤器
- 5.1.3:images:允许正确解码1bpc位掩码图像
- 5.1.3:images:添加jbig2流以通过
- 5.1.3:images:处理解码参数中的空值和间接引用,如果无法解码图像则抛出异常
- 5.2.0:更好的错误消息,更好地处理零大小的文件,并尝试读取文件末尾。
- 5.2.0:删除了使用内存映射要求文件小于~2GB的限制。
- 5.2.0:避免在RandomAccessFileOrArray中使用NullPointerException
- 5.2.0:在pdfContentStreamProcessor私有中创建了一个实用工具方法,并阐明了该类的有状态性
- 5.2.0:LocationTextExtractionStrategy:检查字符串长度并重构以使代码更易于阅读。
- 5.2.0:更好地处理图像中的色彩空间词典。
- 5.2.0:改进对准不合适的在线图像内容的处理。
- 5.2.0:不要对内嵌图像流进行解码,直到我们完全需要它们为止。
- 5.2.0:避免提供资源字典的NullPointerException。
- 5.3.0:LocationTextExtractionStrategy:旧的比较方法导致Java 7中的运行时异常
- 5.3.3:合并文本上升参数
- 5.3.3:暴露字形信息
- 5.3.3:修正:文本到用户空间转换被多次应用于子textrenderinfo对象
- 5.3.3:修正错误:纠正基线计算,使其不包含最终字符间距
- 5.3.4:为LocationTextExtractionStrategy添加了低级过滤钩。
- 5.3.5:修正了PRTokeniser中的错误:处理数字位于流末尾的情况。
- 5.3.5:出于性能原因,在PRTokeniser中将StringBuffer替换为StringBuilder。
- 5.4.2:向LocationTextExtractionStrategy添加了一个isChunkAtWordBoundary()方法,以检查是否应在前一个块和当前块之间插入一个空格字符。
- 5.4.2:在LocationTextExtractionStrategy中添加了一个getCharSpaceWidth()方法,以获取空格字符的宽度。
- 5.4.2:在LocationTextExtractionStrategy中添加了getText()方法以获取当前Chunk的文本。
- 5.4.2:向SimpleTextExtractionStrategy添加了appendTextChunk(()方法以公开追加过程,以便子类可以在文本解析操作之外添加文本。
- 5.4.5:为PDF解析器添加了MultiFilteredRenderListener类。
- 5.4.5:添加了GlyphRenderListener和GlyphTextRenderListener类来处理每个字形而不是处理文本块。
- 5.4.5:在TextRenderInfo中添加了getMcid()方法。
- 5.4.5:当许多内嵌图像在内容流中时,固定资源泄漏
- 5.5.0:CMapAwareDocumentFont:如果未定义字体空间宽度,请使用字体的默认宽度。
- 5.5.0:PdfContentReader:显示空字典时避免异常。
如果您不升级,有些事情是您无法做到的。例如,您无法完成these slides中描述的内容。
如果您查看the roadmap for iText,您会发现我们将来会在文本提取上投入更多时间。
说实话:使用5岁版本并不仅仅是重新发明轮子,这也就像落入我们在过去5年中陷入困境的每一个陷阱。我可以向您保证,购买许可证会更便宜。