好的,我已经对这个问题进行了一些研究,但标题表明我不是专家。所以这就是问题所在:我正在使用python和lib pdfminer从pdfs中提取一些文本。
我只尝试过拉丁字符的文档,并且在大多数情况下效果很好,除非字体不是拉丁文/西文字。现在让我感到困惑的文件是使用日文字体的拉丁字符。 Adobe告诉我编码是Adobe-Identity
。我得到的只是char的cid,我找不到相关的cidmap。
我知道我没有使用正确的术语,我的意思是pdf告诉我cid=3
我知道char是一个空格。我已经为0x00-0xFF
范围内的字符手动编写了地图。一些消息来源告诉它匹配“mac-roman”编码,其他不同意见。其他消息来源称它与OpenType映射匹配,但我找不到0xFF
以外的任何内容。我有cids> 3000。
你可以说我很困惑,所以你被邀请纠正我的术语,但我想要的是一张与我自己匹配的地图,但扩展到范围0x0100-0xFFFF
。
ETA:指向错误的链接pdf http://www.sas.upenn.edu/~jtigay/JapanVol.pdf
ETA2:我发现这个ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/aj14.tar.Z存档中的cid2code.txt是我正在寻找的那种地图。但对于所有这些字体,cid列似乎“移动”了两个:cid1映射到空格
ETA3:更正编码
答案 0 :(得分:3)
您可能正在搜索Adobe开发人员支持技术说明#5078
中提供的表格结合技术说明#5014提供的背景知识
很遗憾,您还没有提供错误的文件您;因此,我无法检查链接是否合适。
修改强>
当您更正了问题并且现在要求the special-purpose Adobe-Identity-0 ROS 时(“ROS”是/ Registry,/ Ordering和/ Supplement的缩写,它代表存在的三个/ CIDSystemInfo字典元素在CIDFont和CMap资源中)而不是 Adobe-Japan1 - ?,上面的链接不再适合您了。不幸的是,只要没有适用的公共ROS, Adobe-Identity 似乎就是首选的ROS。因此,对于地图CID到unicode的问题似乎没有通用的答案。
此外,PDF中 Times 字体的 / ToUnicode 地图如下所示:
/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
(这里CIDSystemInfo与PDF字体对象本身有趣的不同,Adobe-Identity-0。)
根据PDF规范ISO 32000-1:2008第9.10.3节,
它应使用beginbfchar,endbfchar,beginbfrange和endbfrange运算符来定义从字符代码到以UTF-16BE编码表示的Unicode字符序列的映射。
因此,没有定义可用的映射,根据相同的规范与这些字体的其他方面相结合意味着
无法确定字符代码的含义,在这种情况下,符合本标准的读者可以选择自己选择的字符代码。