提取pdf时丢失了一些文本

时间:2018-01-26 07:38:23

标签: pdf itext

我尝试使用iText获取页面上的所有文字,但我不知道为什么每个坐标文本都会丢失最后两个字符。

PdfDocument pdfDoc = new PdfDocument(new PdfReader(@"E:\Coding\COOR.pdf"));
LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();
PdfCanvasProcessor parser = new PdfCanvasProcessor(strategy);
parser.ProcessPageContent(pdfDoc.GetFirstPage());
Console.Write(strategy.GetResultantText());
pdfDoc.Close();

Console.WriteLine("Great!");
Console.ReadKey();

您也可以从中下载我的代码 https://1drv.ms/u/s!Al1hUSZtR4OjwU3XVBRQGneVaZlS

1 个答案:

答案 0 :(得分:2)

简而言之

“丢失文本”的原因是缺少“文本”不是从那里开始的!

详细

您PDF文件的内容是以误导性方式构建的。

一方面,有很多路径定义然后被描边(绘制)。这些图纸创建了您在查看器中可以看到的内容,包括文本和表格行。

另一方面,有一些文本绘图说明使用文本渲染模式3绘制文本,这是... 不可见!这些图纸使用iText创建可以在查看器中复制和粘贴的文本或提取

不幸的是,文本绘图说明中的文本和使用路径绘制的文本完全不匹配。因此,您通过复制和粘贴或文本提取检索的文本与您的期望不同。

字形大小和位置也不完全相同

为了说明这一点,我使文本绘图说明使用了普通(填充)文本渲染模式。左上角最初看起来像这样:

top left corner

这种改变看起来像这样:

top left corner, text made visible

正如您所看到的那样,以前看不见的文本与可见图形大致位于同一位置,并且有点破碎:度数的符号奇怪地表示为“¡”,经度分数秒和后面的符号缺少几秒钟。

要正确提取原始可见数据,您需要使用OCR而不是文本提取。