我正在使用 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(水平)维度上。它们看起来比实际位置稍微靠左。想知道我的代码是否有问题。
舒贾特