1

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 (水平) ディメンションでのみ発生します。実際の位置よりも少し左に見えます。ここで私のコードに何か問題があるかどうか疑問に思っていました。

シュジャート

4

1 に答える 1

0

最後にこれを理解しました。PDF では、実際のテキスト位置を計算することは、単純にベースライン座標を取得するよりも複雑です。文字と単語の間隔、水平と垂直のスケーリング、およびその他の要素も組み込む必要があります。iText 関係者と連絡を取り合ったところ、TextRenderInfo クラスに新しいメソッドが組み込まれました。このメソッドは、上記のすべての要素を処理して実際の文字ごとの位置を提供します。

于 2012-10-03T08:02:19.913 に答える