使用iTextsharp获取阿拉伯语文本仅获取数字?

时间:2018-04-23 20:03:10

标签: text itext extract arabic-support

我尝试从PDF文件中提取阿拉伯语文本,但它只提取数字和结果:

:7234569 1439/08/07 :: 1 2375173941 14 08 6 39266 1050672243 2280 30 400 24 415 24 15 720 30 402 30 499 14 07 1 610117038085 0 1069508677 0:

我的代码:

public static string GetTextFromAllPages(string pdfPath) {
    PdfReader reader = new PdfReader(pdfPath);
    string result = null ;
    //for (int i = 1; i <= reader.NumberOfPages; i++)
    result = PdfTextExtractor.GetTextFromPage(reader, 1, new LocationTextExtractionStrategy()); return result;
}

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

PDF中阿拉伯字形的嵌入字体包含 ToUnicode CMap:

/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
endcmap
CMapName currentdict /CMap defineresource pop
end
end

根据ISO 32000-1第9.10.3节 ToUnicode CMaps

  

它应使用 beginbfchar endbfchar beginbfrange endbfrange 运算符来定义字符的映射代码以UTF-16BE编码表示的Unicode字符序列。

不幸的是,您的CMap根本不使用这些运算符,因此不会定义任何与Unicode的映射。

此外,该字体的编码 Identity-H ,其后代CIDFont有一个ROS Adob​​e-Identity-0 ,这意味着该字符代码,CID和GID值对于一个字符是相同的,但并不意味着它们与Unicode的任何映射。

因此,根据ISO 32000-1第9.10.2节将字符代码映射到Unicode值,字体缺少文本提取所需的信息。

(在这种情况下,文本提取器只能猜测,而这种猜测通常只适用于提取器优化的特殊类型的文档。您可能想尝试增强iText以便能够正确猜测您的情况,但这将要求您详细研究PDF规范,iText文本提取代码和示例文件。)

顺便说一句,首先测试文本提取是否可行是在Adobe Reader中打开PDF并将有问题的文本复制并粘贴到编辑器或文字处理器中。如果这不起作用(并且在手头的情况下它不起作用),可能是文件确实有不完整或误导性的文本提取信息(或根本没有)。