0

私たちのデータベースにはバイナリ形式の PDF があります。私はそれをストリーミングして PDF ファイルとして保存し、両方のソースでテストしましたが、最終的に同じ結果になりました。PdfTextExtractor の綴りがいくつか間違っています。

たとえば、PDF に「確認済み」という単語があります。PdfTextExtractor が変換すると、「確認済み」と綴られます。

デバッグでプロセスをステップ実行すると、PdfTextExtractor によって変換された直後にスペルが間違っているため、自分の側で行っていることが原因で不正確ではないと確信しています。

PdfTextExtractor の精度を向上させるためにできることはありますか?

現在使用しているコードは次のとおりです。

var reader = new PdfReader(myBinaryPdfData.ToArray());
var output = new StringWriter();

for (var i = 1; i <= reader.NumberOfPages; i++)
{
    output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy()));
}

output.ToString();
4

1 に答える 1

3

PDF は、必ずしもテキストの視覚的表現と一致するパターンでテキストを保存するとは限りません。draw "Hello" at 10,10「こんにちは」という単語は、またはと書くことができますdraw "H" at 10,10, "e" at 14,10, "l" at 18,10...。することもできますdraw "H" at 10,10, now draw a circle at 500,500, now show an image at 60,60, now draw "llo" at 18,10, now draw a square at 300,300, now draw "e" at 14,10

この最後のものは、おそらくあなたのケースが実際に似ているものです。はPdfTextExtractor、ファイル内でグループ化されたテキスト ブロックを引き出します。上記の最後のケースでは、"H"、"llo"、"e" の 3 つの文字列がこの順序で返されます。

大量の書式設定を許可する PDF プロデューサー (Adobe InDesign と Illustrator がその 2 つの良い例です) は、ノンリニアな方法で記述された PDF を作成する可能性が高くなります。なんで?正直なところ、彼らはその中のデータを気にすることはできず、PDF の視覚的表現だけを気にします。(実際、ここ数年で、これらの製品はいずれも PDF の作成においてより優れた仕事をしてきましたが、まだ完全ではありません.)

PDF の内部構造を表示し、Adobe Acrobat Pro で Preflight を起動する場合 (ツールまたは印刷物にある可能性があります)。開いたウィンドウで、右上隅の [オプション] をクリックし、次に [ブラウザの内部 PDF 構造] をクリックします。上部にある「BT」というラベルの付いたパズル アイコンをクリックします。特定のページを開き、「コンテンツ」ノードを展開します。各テキスト エントリは で始まり、BTで終わりETます。それぞれを展開すると、 のようなものが表示されます(test) Tj。括弧は、出力する実際のテキストの開始/終了を示します。これを実際に期待するものと比較してください。

本当に、本当に iTextSharp レベルでこれを修正する必要がある場合は、いくつかの計算が必要です。インターフェイスをサブクラス化TextExtractionStrategyするか実装するITextExtractionStrategy必要があります。基本的な詳細については、これらのリンクを参照してください。基本的に、iTextSharp は以前とまったく同じように動作しますが、テキストと共に座標を取得し、物事をつなぎ合わせる方法を理解する必要があります。文字が単語のどこに挿入されるべきか、または文字が実際に新しい単語/文を形成するかどうかを判断するには、文字の近接性を把握する必要があります。幸運を!

于 2012-04-24T13:30:51.483 に答える