我正在使用iTextSharp从PDF文件中提取文本提取系统。我已经创建了一个实现ITextExtractionStrategy的类,并实现了像RenderText(),GetResultantText()等方法。我也研究了iTextSharp本身提供的LocationTextExtractionStrategy类。iTextSharp错误地报告文本位置
我面临的问题是,对于特定的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);
收集所有的文本块后,我试着画在一个位图,使用图形类和下面的简单循环:
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(水平)尺寸只有这几个文本块。它们比实际位置略微向左。想知道我的代码是否有问题。
舒贾特
以下链接中的C#4.0项目演示了此问题。它试图从第14页提取文本块并将它们绘制到位图上。您会在表格的第3列中看到错误文本位置的示例(例如,“Ma”,“Bio”等实际上是第4列的一部分,正如您在用Acrobat打开PDF文件时看到的那样)。 C#项目链接:http://www.4shared.com/get/6w2SUo0q/TjTest.html – dotNET
上面的链接需要创建帐户,我们有些人不喜欢。我现在也上传了同样的文件到MediaFire。不需要创建帐户。这里的链接:http://www.mediafire.com/?nz0o7xs9md1lg7q – dotNET