iTextSharp を使用して、PDF ファイルからのテキスト抽出システムに取り組んでいます。ITextExtractionStrategy を実装するクラスを作成し、RenderText()、GetResultantText() などのメソッドを実装しました。iTextSharp 自体が提供する LocationTextExtractionStrategy クラスも調査しました。
私が直面している問題は、特定の PDF ドキュメントについて、RenderText() メソッドがいくつかのテキスト チャンクの水平方向の位置を誤って報告することです。これは、ページで利用可能な合計 700 以上のテキスト チャンクのうち、約 15 ~ 20 チャンクで発生します。次の簡単なコードを使用して、RenderText() でテキストの位置を取得しています。
Vector curBaselineStart = renderInfo.GetBaseline().GetStartPoint();
LineSegment segment = renderInfo.GetBaseline();
TextChunk location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth());
chunks.Add(location);
すべてのテキスト チャンクを収集した後、Graphics クラスと次の単純なループを使用して、それらをビットマップに描画しようとします。
for (int k = 0; k < chunks.Count; k++)
{
var ch = chunks[k];
g.DrawString(ch.text, fnt, Brushes.Black, ch.startLocation[Vector.I1], bmp.Height - ch.startLocation[Vector.I2], StringFormat.GenericTypographic);
}
問題は、これらのいくつかのテキスト チャンクの X (水平) ディメンションでのみ発生します。実際の位置よりも少し左に見えます。ここで私のコードに何か問題があるかどうか疑問に思っていました。
シュジャート