iTextSharp 4.1.6和5.x版本之间的区别

Sha*_*nky 6 pdf licensing itext itextsharp pdf-parsing

我们正在开发一个与我们的系统一起使用的Pdf解析器.要求是这样的,我们将所有信息存储在任何pdf文档上,并且应该能够复制文档(与原始文档的更改很少).

我们做了一些谷歌搜索,发现iTextSharp是我们目的的最佳伴侣.我们正在使用.net开发我们的项目.

您可能已经猜到了我在标题中提到要求比较特定版本的iTextSharp(4.1.6 vs 5.x).我们知道4.1.6是具有LGPL/MPL许可证的iTextSharp的最后一个版本.5.x版本是AGPL.

我们希望在选择LGPL版本之前对版本进行很好的比较,或者我们购买AGPL的许可证(我们不想发布我们的代码).

我做了一些浏览iTextSharp中的修订更改,但我想知道是否存在任何内容,在版本之间进行了很好的比较.

提前致谢!

Bru*_*gie 3

我是iText Software的 CTO ,所以就像评论部分已经回答的Micha\xc3\xabl一样,我同时是最权威的消息来源,也是一个有偏见的消息来源。

\n\n

iText 网站上有一个非常简单的比较图表。

\n\n

此图表不涵盖文本提取,因此请允许我列出自 iText 5 以来的相关改进。

\n\n

您可能也找到了此页面

\n\n

如果您想了解有关文本解析的错误修复和性能改进,这是一个更详尽的列表:

\n\n
    \n
  • 5.0.0:文本提取:进行了重大修改,以在用户空间中执行计算。这使得解析器能够正确确定换行符,即使文本或页面发生旋转也是如此。
  • \n
  • 5.0.1:重构回调,因此方法签名不需要随着渲染回调 API 的发展而更改。
  • \n
  • 5.0.1:重构以使外部用户更容易与内容流处理器交互。还重构了渲染侦听器,以便文本和图像事件侦听发生在同一界面中(减少了大量非增值复杂性)
  • \n
  • 5.0.1:文本渲染器的新过滤功能。
  • \n
  • 5.0.1:用于预览 PDF 内容的附加实用方法。
  • \n
  • 5.0.1:添加了更高级的文本渲染器侦听器,可以根据页面上文本的物理位置重建页面内容
  • \n
  • 5.0.1:添加了对 XObject Form 处理的支持(现在可以解析通过 PdfTemplate 添加的文本)
  • \n
  • 5.0.1:添加了对 XObject 图像回调的基本支持
  • \n
  • 5.0.1:错误修复 - 文本提取对于某些页面方向不正确
  • \n
  • 5.0.1:错误修复 - 矩阵以错误的顺序连接。
  • \n
  • 5.0.1:PdfTextExtractor:更改了默认渲染侦听器(新的位置感知策略)
  • \n
  • 5.0.1:GraphicsState 的吸气剂
  • \n
  • 5.0.2:文本提取功能接口的主要重构:例如引入类 PdfReaderContentParser
  • \n
  • 5.0.2:CMapAwareDocumentFont:进行调整以使处理准无效 PDF 文件更加稳健
  • \n
  • 5.0.2:PdfContentReaderTool:空指针处理,加上一些放置良好的刷新调用
  • \n
  • 5.0.2:PdfContentReaderTool:显示资源条目的详细信息
  • \n
  • 5.0.2:PdfContentStreamProcessor:进行调整,使嵌入图像不会导致解析问题并改进 EI 检测
  • \n
  • 5.0.2:LocationTextExtractionStrategy:修复了反并行算法,并考虑了负字符间偏移。更改文本提取策略,首先构建文本模型,然后计算串联要求。
  • \n
  • 5.0.2:线段实施的调整;优化布鲁诺对文本提取所做的更改;例如:MarkedContentInfo类的引入。
  • \n
  • 5.0.2:文本提取功能接口的主要重构:例如引入类 PdfReaderContentParser
  • \n
  • 5.0.3:添加了以用户单位获取图像面积的方法
  • \n
  • 5.0.3:更好地解析内嵌图像
  • \n
  • 5.0.3:在解析 ToUnicode 流时添加对开始/结束序列的额外检查。
  • \n
  • 5.0.4:数组中的内容流应该被解析为用空格分隔
  • \n
  • 5.0.4:暴露CTM
  • \n
  • 5.0.4:重构以将内联图像处理引入到它自己的类中。添加了在未应用过滤器的情况下对图像数据的解析(有些 PDF 的图像数据末尾和 EI 运算符之间没有空格)。最终,最好是实际解析图像数据,但这将需要对 iText 解码器进行相当大的重构(从流而不是已知长度的 byte[] 进行工作)。
  • \n
  • 5.0.4:处理多级过滤器;纠正将空格拉为内联图像流的第一个字节的错误。
  • \n
  • 5.0.4:将流过滤器应用于内嵌图像。
  • \n
  • 5.0.4:PdfReader:公开任意字节数组的过滤器解码器(而不仅仅是流)
  • \n
  • 5.0.6:CMapParser:修复读取损坏的 ToUnicode cmap。
  • \n
  • 5.0.6:处理稍微畸形的嵌入图像
  • \n
  • 5.0.6:CMapAwareDocumentFont:某些 PDF 的差异映射大于 256 个字符。
  • \n
  • 5.0.6:性能:缓存文本提取中使用的字体
  • \n
  • 5.1.2:PRTokeniser:使查找 startxref 的算法更加内存高效。
  • \n
  • 5.1.2:RandomAccessFileOrArray:改进了对无法映射的大文件的处理
  • \n
  • 5.1.2:CMapAwareDocumentFont:如果映射未初始化,则修复 NPE(我宁愿以垃圾字符结束,也不愿在路上抛出意外异常)
  • \n
  • 5.1.3:重构过滤器如何应用于流,调整解析器以便它可以处理多级过滤器
  • \n
  • 5.1.3:图像:允许正确解码 1bpc 位掩码图像
  • \n
  • 5.1.3:images:添加jbig2流通过
  • \n
  • 5.1.3:图像:处理解码参数中的空引用和间接引用,如果无法解码图像则抛出异常
  • \n
  • 5.2.0:更好的错误消息,更好地处理零大小的文件以及尝试读取文件末尾之后的内容。
  • \n
  • 5.2.0:删除了使用内存映射要求文件小于 ~2GB 的限制。
  • \n
  • 5.2.0:避免 RandomAccessFileOrArray 中出现 NullPointerException
  • \n
  • 5.2.0:将 pdfContentStreamProcessor 中的实用方法设为私有,并阐明了该类的有状态性质
  • \n
  • 5.2.0:LocationTextExtractionStrategy:对字符串长度进行边界检查并进行重构以使代码更易于阅读。
  • \n
  • 5.2.0:更好地处理图像中的颜色空间字典。
  • \n
  • 5.2.0:改进对准不正确内联图像内容的处理。
  • \n
  • 5.2.0:除非我们绝对需要它们,否则不要解码内联图像流。
  • \n
  • 5.2.0:避免未提供资源字典的NullPointerException。
  • \n
  • 5.3.0:LocationTextExtractionStrategy:旧的比较方法导致 Java 7 中的运行时异常
  • \n
  • 5.3.3:合并text-rise参数
  • \n
  • 5.3.3:公开字形信息
  • \n
  • 5.3.3:错误修正:文本到用户空间的转换被多次应用于子textrenderinfo对象
  • \n
  • 5.3.3:错误修正:正确的基线计算,因此它不包括最终的字符间距
  • \n
  • 5.3.4:向 LocationTextExtractionStrategy 添加了低级过滤挂钩。
  • \n
  • 5.3.5:修复了 PRTokeniser 中的错误:处理数字位于流末尾的情况。
  • \n
  • 5.3.5:出于性能原因,在 PRTokeniser 中将 StringBuffer 替换为 StringBuilder。
  • \n
  • 5.4.2:向 LocationTextExtractionStrategy 添加了 isChunkAtWordBoundary() 方法,以检查是否应在前一个块和当前块之间插入空格字符。
  • \n
  • 5.4.2:LocationTextExtractionStrategy 添加了 getCharSpaceWidth() 方法,用于获取空格字符的宽度。
  • \n
  • 5.4.2:LocationTextExtractionStrategy 新增 getText() 方法,用于获取当前 Chunk 的文本。
  • \n
  • 5.4.2:向 SimpleTextExtractionStrategy 添加了appendTextChunk(() 方法以公开追加过程,以便子类可以从文本解析操作之外添加文本。
  • \n
  • 5.4.5:为 PDF 解析器添加了 MultiFilteredRenderListener 类。
  • \n
  • 5.4.5:添加了 GlyphRenderListener 和 GlyphTextRenderListener 类,用于处理每个字形而不是处理文本块。
  • \n
  • 5.4.5:在TextRenderInfo中添加了方法getMcid()。
  • \n
  • 5.4.5:修复了内容流中存在许多内联图像时的资源泄漏问题
  • \n
  • 5.5.0:CMapAwareDocumentFont:如果未定义字体空间宽度,则使用字体的默认宽度。
  • \n
  • 5.5.0:PdfContentReader:避免显示空字典时出现异常。
  • \n
\n\n

如果不升级,有些事情将无法执行。例如,您将无法执行这些幻灯片中描述的操作。

\n\n

如果您查看iText 的路线图,您会发现我们将来会在文本提取上投入更多时间。

\n\n

老实说:使用 5 年前的版本不仅就像重新发明轮子,而且还就像陷入过去 5 年来我们所陷入的每一个陷阱。我可以向您保证,购买许可证会更便宜。

\n