【发布时间】:2012-08-29 01:31:53
【问题描述】:
我正在开发一个使用 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(水平)维度上。它们看起来比实际位置稍微靠左。想知道我的代码是否有问题。
舒雅特
【问题讨论】:
-
以下链接中的 C# 4.0 项目演示了该问题。它尝试从第 14 页提取文本块并将它们绘制到位图上。您将在表格的第 3 列中看到错误文本位置的示例(例如,“Ma”、“Bio”等实际上是第 4 列的一部分,当您使用 Acrobat 打开 PDF 文件时会看到)。 C# 项目链接:4shared.com/get/6w2SUo0q/TjTest.html
-
以上链接需要创建帐户,我们有些人不喜欢。我现在也将相同的文件上传到了 MediaFire。无需创建帐户。这是链接:mediafire.com/?nz0o7xs9md1lg7q
标签: c# itextsharp