6

私たちは、私たちのシステムと一緒に使用する Pdf パーサーを開発しています。要件は、すべての情報を pdf ドキュメントに保存し、ドキュメントをそのまま (元のドキュメントからの変更を最小限に抑えて) 複製できるようにすることです。

グーグルで調べたところ、iTextSharp が私たちの目的に最適なパートナーであることがわかりました。.net を使用してプロジェクトを開発しています。

タイトルで述べたように、iTextSharp の特定のバージョン (4.1.6 と 5.x) の比較が必要であると推測したかもしれません。4.1.6 が LGPL/MPL ライセンスを持つ iTextSharp の最後のバージョンであることはわかっています。5.x バージョンは AGPL です。

LGPL バージョンを選択する前、または AGPL のライセンスを購入する前に、バージョンをよく比較したいと考えています (コードを公開したくありません)。

iTextSharp のリビジョンの変更をブラウジングしましたが、コンテンツが存在するかどうかを知りたいので、バージョン間の比較を行います。

前もって感謝します!

4

1 に答える 1

3

私はiText Softwareの CTO であるため、コメント セクションで既に回答したMichaëlと同じように、私は最も信頼できる情報源であると同時に偏った情報源でもあります。

iText の Web サイト に非常に簡単な比較表があります。

このチャートはテキスト抽出をカバーしていないため、iText 5 以降の関連する改善点をリストアップさせてください.

おそらくこのページも見つけたでしょう。

テキストの解析に関するバグ修正とパフォーマンスの改善について知りたい場合は、次のリストを参照してください。

  • 5.0.0: テキスト抽出: ユーザー空間で計算を実行するための大幅なオーバーホール。これにより、テキストまたはページが回転されている場合でも、パーサーは改行を正しく判断できます。
  • 5.0.1: コールバックをリファクタリングしたため、レンダー コールバック API が進化してもメソッド シグネチャを変更する必要はありません。
  • 5.0.1: 外部ユーザーがコンテンツ ストリーム プロセッサと対話しやすくするためのリファクタリング。また、レンダー リスナーをリファクタリングして、テキストと画像のイベント リスニングが同じインターフェイスで行われるようにしました (付加価値のない多くの複雑さを軽減します)。
  • 5.0.1: テキスト レンダラーの新しいフィルタリング機能。
  • 5.0.1: PDF コンテンツをプレビューするための追加のユーティリティ メソッド。
  • 5.0.1: ページ上のテキストの物理的な位置に基づいてページ コンテンツを再構築できる、より高度なテキスト レンダラー リスナーを追加しました。
  • 5.0.1: XObject Form 処理のサポートを追加 (PdfTemplate を介して追加されたテキストを解析できるようになりました)
  • 5.0.1: XObject Image コールバックの基本的なサポートを追加
  • 5.0.1: バグ修正 - 特定のページの向きでテキスト抽出が正しく行われなかった
  • 5.0.1: バグ修正 - 行列が間違った順序で連結されていました。
  • 5.0.1: PdfTextExtractor: デフォルトのレンダリング リスナーを変更しました (新しい位置認識戦略)
  • 5.0.1: GraphicsState のゲッター
  • 5.0.2: テキスト抽出機能へのインターフェースの大幅なリファクタリング: たとえば、クラス PdfReaderContentParser の導入
  • 5.0.2: CMapAwareDocumentFont: 準無効な PDF ファイルの処理をより堅牢にするための微調整
  • 5.0.2: PdfContentReaderTool: null ポインターの処理と、適切に配置されたいくつかのフラッシュ呼び出し
  • 5.0.2: PdfContentReaderTool: リソース エントリの詳細を表示する
  • 5.0.2: PdfContentStreamProcessor: 埋め込まれた画像が解析の問題を引き起こさないように調整し、EI 検出を改善
  • 5.0.2: LocationTextExtractionStrategy: アンチパラレル アルゴリズムを修正し、負の文字間オフセットを考慮しました。最初にテキスト モデルを構築し、次に連結要件を計算するテキスト抽出戦略に変更します。
  • 5.0.2: 線分実装の調整。ブルーノがテキスト抽出に加えた変更の最適化。例: MarkedContentInfo クラスの導入。
  • 5.0.2: テキスト抽出機能へのインターフェースの大幅なリファクタリング: たとえば、クラス PdfReaderContentParser の導入
  • 5.0.3: ユーザー単位で画像の領域を取得するメソッドを追加
  • 5.0.3: インライン画像のより良い解析
  • 5.0.3: ToUnicode ストリームの解析時に、開始/終了シーケンスの追加チェックを追加します。
  • 5.0.4: 配列内のコンテンツ ストリームは、空白で区切られているかのように解析する必要があります
  • 5.0.4: CTM の公開
  • 5.0.4: インライン画像処理を独自のクラスにプルするようにリファクタリングします。フィルターが適用されていない場合の画像データの解析が追加されました (画像データの末尾と EI 演算子の間に空白がない PDF がいくつかあります)。最終的には、実際に画像データを解析するのが最善ですが、これには iText デコーダーのかなり大きなリファクタリングが必要になります (既知の長さの byte[] ではなくストリームから作業するため)。
  • 5.0.4: 多段フィルターを処理します。インライン イメージ ストリームの最初のバイトとして空白を取得するバグを修正します。
  • 5.0.4: ストリーム フィルターをインライン イメージに適用します。
  • 5.0.4: PdfReader: 任意のバイト配列のフィルター デコーダーを公開します (ストリームのみではなく)
  • 5.0.6: CMapParser: 壊れた ToUnicode cmap を読み取るように修正しました。
  • 5.0.6: わずかに不正な埋め込み画像を処理する
  • 5.0.6: CMapAwareDocumentFont: 一部の PDF には 256 文字を超える差分マップがあります。
  • 5.0.6: パフォーマンス: テキスト抽出で使用されるフォントをキャッシュする
  • 5.1.2: PRTokeniser: startxref を見つけるアルゴリズムをより効率的なメモリにしました。
  • 5.1.2: RandomAccessFileOrArray: マップできない巨大なファイルの処理の改善
  • 5.1.2: CMapAwareDocumentFont: マッピングが初期化されない場合の NPE を修正 (途中で予期しない例外をスローするよりも、ジャンク文字で終わるほうがよい)
  • 5.1.3: フィルターがストリームに適用される方法のリファクタリング、多段階フィルターを処理できるようにパーサーを調整
  • 5.1.3: 画像: 1bpc ビットマスク画像の正しいデコードを許可
  • 5.1.3: イメージ: パススルーする jbig2 ストリームを追加
  • 5.1.3: 画像: デコード パラメータで null および間接参照を処理し、画像をデコードできない場合は例外をスローする
  • 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: text-rise パラメータを組み込む
  • 5.3.3: グリフごとの情報を公開する
  • 5.3.3: バグ修正: テキストからユーザー空間への変換が sub-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: スペース文字の幅を取得する getCharSpaceWidth() メソッドを LocationTextExtractionStrategy に追加しました。
  • 5.4.2: 現在のチャンクのテキストを取得する getText() メソッドを LocationTextExtractionStrategy に追加しました。
  • 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: 空の辞書を表示するときの例外を回避します。

アップグレードしないと使えないものがあります。たとえば、これらのスライドで説明されていることはできません。

iText のロードマップを見ると、今後、テキスト抽出により多くの時間を投資することがわかります。

正直なところ、5 年前のバージョンを使用することは、車輪を再発明するようなものであるだけでなく、過去 5 年間に陥ったすべての落とし穴に陥るようなものでもあります。ライセンスを購入する方が費用がかからないことを保証できます。

于 2014-06-20T14:20:46.810 に答える