我尝试使用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
答案 0 :(得分:2)
“丢失文本”的原因是缺少“文本”不是从那里开始的!
您PDF文件的内容是以误导性方式构建的。
一方面,有很多路径定义然后被描边(绘制)。这些图纸创建了您在查看器中可以看到的内容,包括文本和表格行。
另一方面,有一些文本绘图说明使用文本渲染模式3绘制文本,这是... 不可见!这些图纸使用iText创建可以在查看器中复制和粘贴的文本或提取。
不幸的是,文本绘图说明中的文本和使用路径绘制的文本完全不匹配。因此,您通过复制和粘贴或文本提取检索的文本与您的期望不同。
字形大小和位置也不完全相同
为了说明这一点,我使文本绘图说明使用了普通(填充)文本渲染模式。左上角最初看起来像这样:
这种改变看起来像这样:
正如您所看到的那样,以前看不见的文本与可见图形大致位于同一位置,并且有点破碎:度数的符号奇怪地表示为“¡”,经度分数秒和后面的符号缺少几秒钟。
要正确提取原始可见数据,您需要使用OCR而不是文本提取。