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 回答