我试图从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;
}有什么需要帮忙的吗?
发布于 2018-04-26 19:31:55
您的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运算符定义字符代码到以UTF16BE编码表示的Unicode字符序列的映射。
不幸的是,您的CMap根本不使用这些运算符,因此没有定义任何到Unicode的映射。
此外,该字体的编码为Identity-H,其后代CIDFont具有ROS Adobe-Identity-0,这意味着字符的字符代码、CID和GID值是相等的,但并不意味着它们到的任何映射。
因此,字体缺少根据ISO 32000-1第9.10.2节将字符代码映射到Unicode值进行文本提取所需的信息。
(在这种情况下,文本提取器只能猜测,而这种猜测通常只适用于提取器针对其进行优化的特殊类型的文档。您可能希望尝试增强iText,使其能够在您的情况下正确地进行猜测,但这将需要您详细研究PDF规范、iText文本提取代码和示例文件。)
顺便说一下,第一个测试文本提取是否可行的好方法是在Adobe Reader中打开PDF,然后将相关文本复制并粘贴到编辑器或文字处理器中。如果这不起作用(在手头的情况下也不起作用),则可能是文件确实具有用于文本提取的不完整或误导性信息(或者根本没有)。
https://stackoverflow.com/questions/49989114
复制相似问题