【问题标题】:IText Sharp extract text from pdf with French Script MTITextSharp 使用法语脚本 MT 从 pdf 中提取文本
【发布时间】:2017-09-19 18:04:15
【问题描述】:

我正在使用 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. 如何将已加载的字体添加到 Extract 策略?
  2. 是否可以创建映射,以便将 \u0085\u0014\u0016\u001c 转换为 £139?
  3. 也许我在编码方面遗漏了什么?

【问题讨论】:

  • 可以分享一下pdf文件吗? excel和pdf到底有什么关系?
  • 这里是 pdf 文件的一部分(它将在线 30 天)pdfFile 我已经为 pdf 文件创建了解析器,因此我可以分析数据和结构本身,我只是将所有解析的文本放到 Excel使用 Microsoft.Office.Interop。而这段法语文本是我工作的瓶颈。

标签: c# excel pdf itext text-extraction


【解决方案1】:

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

用于其他条目的字体要么使用有意义的编码(T1_0T1_1 使用 WinAnsiEncoding),要么具有 ToUnicode 地图 (C2_1)。

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

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

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

【讨论】:

  • 嗨,mkl!万分感谢!您的回答以某种方式解决了我的问题。我将使用 Adob​​e 作为主要工具,使用 ITextSharp 进行结构分析。我会更好地基于 Adob​​e 输出或任何其他 OCR 创建解析器。
  • 另外,您能分享一下您用来检查上述信息的工具吗?
  • @Vitalii 我使用了 RUPS,这是一个基于 iText 的 PDF 检查工具,我有一份 PDF 规范的副本ISO 32000-1 可供参考。
猜你喜欢
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多