我尝试从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;
}
请帮忙吗?
答案 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 Adobe-Identity-0 ,这意味着该字符代码,CID和GID值对于一个字符是相同的,但并不意味着它们与Unicode的任何映射。
因此,根据ISO 32000-1第9.10.2节将字符代码映射到Unicode值,字体缺少文本提取所需的信息。
(在这种情况下,文本提取器只能猜测,而这种猜测通常只适用于提取器优化的特殊类型的文档。您可能想尝试增强iText以便能够正确猜测您的情况,但这将要求您详细研究PDF规范,iText文本提取代码和示例文件。)
顺便说一句,首先测试文本提取是否可行是在Adobe Reader中打开PDF并将有问题的文本复制并粘贴到编辑器或文字处理器中。如果这不起作用(并且在手头的情况下它不起作用),可能是文件确实有不完整或误导性的文本提取信息(或根本没有)。