itextsharp PdfTextExtractor拼写单词错误

时间:2012-04-23 20:41:35

标签: c# itextsharp pdf-conversion pdftotext

我们的数据库中有二进制文件的PDF。我将其流式传输并将其保存为PDF文件,并使用两个源进行测试,最终结果相同:PdfTextExtractor拼写错误。

例如,PDF中有一个“已确认”字样。在PdfTextExtractor转换它之后,拼写为“confrmed”。

我在调试过程中逐步完成,并且在被PdfTextExtractor转换后立即拼写错误,所以我确定这不是不准确的,因为我正在做的事情。

我能做些什么来提高PdfTextExtractor的准确度吗?

以下是我目前正在使用的代码:

var reader = new PdfReader(myBinaryPdfData.ToArray());
var output = new StringWriter();

for (var i = 1; i <= reader.NumberOfPages; i++)
{
    output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy()));
}

output.ToString();

1 个答案:

答案 0 :(得分:3)

PDF不一定以与文本的可视化表示相匹配的模式存储文本。 “Hello”一词可以写成draw "Hello" at 10,10draw "H" at 10,10, "e" at 14,10, "l" at 18,10...。它也可以是draw "H" at 10,10, now draw a circle at 500,500, now show an image at 60,60, now draw "llo" at 18,10, now draw a square at 300,300, now draw "e" at 14,10

最后一个可能与你的实际情况类似。 PdfTextExtractor拉出在文件中组合在一起的文本块。在上面的最后一种情况下,它将按此顺序返回三个字符串:“H”,“llo”,“e”。

允许大量格式化的PDF制作人(Adobe InDesign和Illustrator是两个很好的例子)更有可能生成以非线性方式编写的PDF。为什么?老实说,他们可以更少关心内部数据,他们只关心PDF的视觉表现。 (实际上,近年来这两种产品在制作PDF方面都做得更好,但仍然不完善。)

如果您想查看PDF的内部结构并让Adobe Acrobat Pro启动预检(可能在工具或打印生产中)。在打开的窗口中,单击右上角的“选项”,然后单击“浏览器内部PDF结构”。单击顶部标有“BT”的拼图图标。打开给定页面并展开“内容”节点。每个文本条目都以BT开头,以ET结尾。展开每一个,你会看到像(test) Tj这样的东西。括号标记要输出的实际文本的开始/停止。将此与您的实际期望相比较。

如果你真的,真的必须在iTextSharp级别纠正这个问题,那么你需要进行一些计算。您需要subclass TextExtractionStrategyimplement the ITextExtractionStrategy interface。请参阅这些链接了解基本信息。基本上iTextSharp将完成与之前完全相同的操作,但除了文本,您将获得一些坐标,您将不得不弄清楚如何将事物拼凑在一起。你必须弄清楚字母的接近程度,以确定一个字母应该注入一个单词的位置,或者该字母是否实际形成一个新的单词/句子。祝你好运!