Cidfonts和映射

时间:2013-03-30 18:18:03

标签: pdf character-encoding fonts

好的,我已经对这个问题进行了一些研究,但标题表明我不是专家。所以这就是问题所在:我正在使用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:更正编码

1 个答案:

答案 0 :(得分:3)

您可能正在搜索Adobe开发人员支持技术说明#5078

中提供的表格
  

Adobe-Japan1-6 Character Collection for CID-Keyed Fonts

结合技术说明#5014提供的背景知识

  

Adobe CMap and CIDFont Files Specification

很遗憾,您还没有提供错误的文件您;因此,我无法检查链接是否合适。

修改

当您更正了问题并且现在要求the special-purpose Adobe-Identity-0 ROS 时(“ROS”是/ Registry,/ Ordering和/ Supplement的缩写,它代表存在的三个/ CIDSystemInfo字典元素在CIDFont和CMap资源中)而不是 Adob​​e-Japan1 - ?,上面的链接不再适合您了。不幸的是,只要没有适用的公共ROS, Adob​​e-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字符序列的映射。

因此,没有定义可用的映射,根据相同的规范与这些字体的其他方面相结合意味着

  

无法确定字符代码的含义,在这种情况下,符合本标准的读者可以选择自己选择的字符代码。