1. ホーム
  2. java

[解決済み] パフォーマンス iText vs.PdfBox

2022-02-14 10:56:50

質問事項

私は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のテキスト解析はイベント指向のアーキテクチャを採用しているため、PDFBoxよりもリソースへの負荷が低くなっています。また、PDFBoxはプレーンテキスト抽出に厳密には必要ない情報をより長い時間利用可能にしておくので、より多くのリソースを消費します。

しかし、ライブラリが最初に文書を読み込む方法によっても違いが出てくるかもしれません。ここで少し実験してみると、PDFBoxは複数の PDDocument.load のオーバーロードだけでなく、いくつかの PDDocument.loadNonSeq オーバーロード(実際には PDDocument.loadNonSeq は正しくドキュメントを読みますが PDDocument.load はPDFを誤読するように騙される可能性があります)。これらの異なる亜種はすべて、実行時の動作が異なる可能性があります。

ストラテジーがパフォーマンスに与える影響について教えてください。

iTextは、シンプルなテキスト抽出方法と、より高度なテキスト抽出方法を提供します。シンプルなものは、ページのコンテンツストリームにあるテキストが読み順に表示されると仮定し、より高度なものはソートします。デフォルトでは、より高度なものが使用されます。したがって、単純な戦略を使用することによって、iTextをさらに高速化することができます。PDFBoxは常にソートします。