首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否仅使用iTextsharp get number提取阿拉伯文本?

是否仅使用iTextsharp get number提取阿拉伯文本?
EN

Stack Overflow用户
提问于 2018-04-24 04:03:10
回答 1查看 355关注 0票数 0

我试图从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:

我的代码:

代码语言:javascript
运行
复制
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;
}

有什么需要帮忙的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-04-26 19:31:55

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

代码语言:javascript
运行
复制
/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

应使用beginbfcharendbfcharbeginbfrangeendbfrange运算符定义字符代码到以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,然后将相关文本复制并粘贴到编辑器或文字处理器中。如果这不起作用(在手头的情况下也不起作用),则可能是文件确实具有用于文本提取的不完整或误导性信息(或者根本没有)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49989114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档