ItextSharp を使用して四角形からテキストを抽出しようとしていますが、一部の特定の領域を除いて、ドキュメント内のほぼすべてのセクションで正常に機能します。これらの領域は、シンプルな太字のタイトルと、ドキュメントの残りの部分よりもわずかに小さいフォント (両方とも大文字) のシンプルなコンテンツです。これらの領域では、正しい単語ではなく、選択したテキストのアナグラムを取得します。
たとえば、「RELEASE」という単語は「ERLEASE」、「VOYAGE」は「EGAYVO」、「FURTHER CHARGES」という文は「FHTRU ER CHAGRES」となります。
奇妙なことに、 でページ全体を表示しようとするとSimpleTextExtractionStrategy
、正しいテキストが得られます。
PDFのフォントは古典的なArialであり、抽出に使用した戦略はStackOverflowから取得されます(引数によって渡されます):
_pdfRd = New PdfReader(_pdfPath)
Dim output As String()
Dim nrPag as Integer = 1
Dim filter As RenderFilter = New RegionTextRenderFilter(rect)
Dim strategy As FilteredRenderListener
Dim locStrategy As New LocationTextExtractionStrategy
strategy = New FilteredTextRenderListener(locStrategy, {filter})
output = GetTextFromPage(_pdfRd, nrPag, strategy).Split(vbLf)
_pdfRd.Close()
他のドキュメントで試してみましたが、非常にうまく機能します。別のドキュメントでこの問題を再現することはできません。
私は自分のコードが心配で、この戦略も試しました: http://www.schiffhauer.com/read-text-in-a-pdf-in-c-with-itextsharp/ しかし、結果は同じです。
読み取りプロセスで何かが欠けていますか、それとも私の pdf に関連する問題ですか?
更新: 誤った単語の 1 文字を選択すると、出力は空の文字列になります。これは、複数の文字を一緒に選択した場合にも発生し、単語全体を選択した場合にのみ (アナグラム) 出力を取得します。たとえば、「CARGO RELEASE」という単語があり、四角形で「GO」のみを選択するか、他の部分文字列を選択すると何も表示されませんが、「CARGO」を選択すると「GRACO ERLESAE」が取得され、 2 番目の単語は選択していません。最初の単語のみを選択しています。