IText Sharp使用法语脚本MT从pdf中提取文本

时间:2017-04-22 21:11:52

标签: c# excel pdf itext text-extraction

我正在使用ITextSharp并列出代码从pdf中提取文本。 但我发现有些行给出了错误的结果:

  1. in excel - “11 3 11”
  2. Visual Studio中的
  3. - “11 \ u0016 \ u0016 \ u0016 3”
  4. in pdf - “11£139 3 11”
  5. 又一个例子:

    1. in excel - “2 45 1”
    2. 在Visual Studio中
    3. - “2 \ u0085 \ u0019 \ u0018 \ u001b 45 1”
    4. in pdf - “2£658 45 1”
    5. 经过调查,我发现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. 如何添加已加载的字体到Extract策略?
      2. 是否可以创建映射,以便我可以将\ u0085 \ u0014 \ u001更换为£139?
      3. 也许我错过了编码方法?

1 个答案:

答案 0 :(得分:0)

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

用于其他条目的字体使用有意义的编码( T1_0 T1_1 使用 WinAnsiEncoding )或使用 ToUnicode 地图( C2_1 )。

由于iText中的文本提取基本上遵循第9.10节中的描述,因此iText无法提取这些£条目的实际文本,而是返回原始字形代码,就像Adobe Reader copy&amp; paste一样。

通常这意味着必须使用OCR,或者整个页面使用OCR提取所有文本,或者单独提取相关字体的字符以构建 ToUnicode 表格那些字体,然后如上提取文本。

在这种情况下, C2_0 C2_2 嵌入式字体程序本身包含将包含的字形映射到Unicode代码点的信息。因此,还可以使用这些字体程序中的信息构建 ToUnicode 表。可以使用可以处理真实字体的字体库从字体程序中读取这些信息。