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 は以前とまったく同じように動作しますが、テキストと共に座標を取得し、物事をつなぎ合わせる方法を理解する必要があります。文字が単語のどこに挿入されるべきか、または文字が実際に新しい単語/文を形成するかどうかを判断するには、文字の近接性を把握する必要があります。幸運を!