ITextSharp 使用 French Script MT 从 pdf 中提取文本

IText Sharp extract text from pdf with French Script MT

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

  1. 在 excel - “11 3 11”
  2. 在 Visual Studio - “11 \u0085\u0014\u0016\u001c 3 11”
  3. pdf - “11 £139 3 11”

再举一个例子:

  1. 在 excel - “2 45 1”
  2. 在 Visual Studio - "2 \u0085\u0019\u0018\u001b 45 1"
  3. pdf - “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. 也许我在编码方面遗漏了什么?

所有带有英镑货币符号“£”的条目都是使用字体绘制的(命名为C2_0C2_2)而没有 PDF 规范 ISO 32000-1 第 9.10 节 "Extraction of Text Content" 中所述的 PDF 文本提取所需的信息:他们使用编码 Identity-H(这确实不暗示任何到 Unicode 的映射)并且没有 ToUnicode 映射。

用于其他条目的字体使用有意义的编码(T1_0T1_1 使用WinAnsiEncoding) 或者有一个 ToUnicode 映射 (C2_1).

由于 iText 中的文本提取基本上遵循 9.10 节中的描述,iText 无法提取这些 £ 条目的实际文本,而是 returns 原始字形代码,就像 Adob​​e Reader 复制粘贴。

通常这意味着必须求助于 OCR,或者将整个页面作为一个整体并使用 OCR 提取所有文本,或者单独对相关字体的字符进行构建 ToUnicode 这些字体的表格,然后如上所述提取文本。

不过,在这种情况下,C2_0C2_2 嵌入字体程序本身包含信息映射包含的字形到 Unicode 代码点。因此,还可以利用这些字体程序中的信息构建 ToUnicode 表。可以使用可以处理 True Type 字体的字体库从字体程序中读取此类信息。