IText夏普从pdf提取文本与法文脚本MT

问题描述:

我使用ITextSharp和列出的代码从pdf中提取文本。 但我发现,一些行给我的不正确的结果:IText夏普从pdf提取文本与法文脚本MT

    在Excel
  1. - “11 3 11” 在Visual Studio
  2. - “11 \ u0085 \ u0014 \ u0016 \ u001c 3月11日”
  3. 在PDF - “11£139 3 11”

再举一个例子:

    在Excel
  1. - “2 45 1”
  2. 在Visual Studio - “2 \ u0085 \ u0019 \ u0018 \ u001b 45 1” 以PDF
  3. - “2£658 45 1”

调查后,我发现,PDF文件包含 法国脚本-mt-58fbba579ea99.ttf

using (PdfReader reader = new PdfReader(pfile.path)){ 
StringBuilder text = new StringBuilder(); 
if (pagenum == 0) 
{ 
for (int i = 1; i <= reader.NumberOfPages; i++) 
{ 
string page = ""; 
page = PdfTextExtractor.GetTextFromPage(reader, i, new 
iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy()); 
string stringOutput = page; 
string[] lines = stringOutput.Split('\n'); 
allData.Add(lines); 
output = lines; 
} 
} 
} 

问题:

  1. 我怎样才能补充一点,我已经装提取策略字体?
  2. 是否可以创建映射,以便我可以将\ u0085 \ u0014 \ u0016 \ u001c转换为£139?
  3. 也许我错过了一些编码?
+0

你可以分享PDF格式的检查吗? excel与pdf有多相关? – mkl

+0

这里是pdf文件的一部分(它将在线30天) [pdfFile](https://ufile.io/ce0yy) 我已经创建了PDF文件的解析器,因此我可以分析数据和结构本身,我只是使用Microsoft.Office.Interop将所有解析的文本放到Excel中。 这段法文是我工作的瓶颈。 – Vitalii

所有以井货币符号的条目“£”使用而不为PDF文本提取所需的信息字体(分别命名为C2_0C2_2),如PDF规范ISO 32000-1中描述绘制第9.10节“文本内容的提取”:它们使用编码Identity-H(这不意味着任何到Unicode的映射),并且没有映射到ToUnicode映射。

用于其它条目的字体或者使用一个有意义的编码(T1_0T1_1使用WinAnsiEncoding)或具有ToUnicode地图(C2_1)。由于iText中的文本提取基本上遵循9.10节中的描述,因此iText无法提取这些条目的实际文本,而是返回原始字形代码,就像Adobe Reader副本&粘贴那样。

通常这意味着人们必须求助于OCR,无论是页面作为一个整体,并提取使用OCR,或有问题的字体的字符的所有文本单独建立ToUnicode对于这些字体,然后表如上所述提取文本。

在这种情况下,虽然,C2_0C2_2嵌入字体程序本身包含信息映射包含字形为Unicode代码点。因此,人们还可以利用这些字体程序中的信息构建表格。这些信息可以使用字体库从字体程序读取,该字体库可以处理真正的字体。

+0

嗨mkl! 非常感谢!你的答案以某种方式解决我的问题。 我将使用Adobe作为主要工具和ITextSharp进行结构分析。 而且我会更好地创建基于Adobe输出或任何其他OCR的解析器。 – Vitalii

+0

另外,你能分享一下你用来检查上述信息的工具吗? – Vitalii

+0

@Vitalii我使用了基于iText的PDF检查工具RUPS,并且我有一份PDF规范[ISO 32000-1](http://www.adobe.com/content/dam/Adobe/en/devnet /acrobat/pdfs/PDF32000_2008.pdf)供参考。 – mkl