iTextSharp错误地报告文本位置

时间:2012-08-29 01:31:54

标签: c# itextsharp

我正在使用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(水平)维度会出现问题。它们在左侧略微出现,而不是实际位置。想知道我的代码是否有问题。

舒贾特

1 个答案:

答案 0 :(得分:0)

终于弄明白了。在PDF中,计算实际文本位置比简单地获取基线坐标更复杂。您还需要合并字符和字间距,水平和垂直缩放以及其他一些因素。我与iText的人做了一些对应,他们现在在TextRenderInfo类中加入了一个新方法,通过处理所有上述因素,提供了逐个字符的实际位置。