0

好的,我已经对该主题进行了一些研究,但正如标题所示,我不是专家。所以这就是问题所在:我正在使用 python 和 lib pdfminer 从 pdf 中提取一些文本。

我只尝试了带有拉丁字符的文档,并且在大多数情况下效果很好,除非字体不是拉丁/西方。现在困扰我的文档是使用日文字体中的拉丁字符。Adobe 告诉我编码是Adobe-Identity. 我得到的只是char的cid,我找不到相关的cidmap。

我知道我没有使用正确的术语,我的意思是 pdf 告诉我cid=3并且我知道 char 是一个空格。我已经为 range 中的字符手动编写了一个映射0x00-0xFF。一些消息来源告诉它匹配“mac-roman”编码,其他不同意。其他消息来源说它与 OpenType 映射匹配,但我找不到任何超越0xFF. 而且我的cids > 3000。

您可以看出我很困惑,因此请您更正我的术语,但我想要的是一张与我自己的地图相匹配但扩展了 range 的地图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:更正编码

4

1 回答 1

3

您可能正在搜索 Adob​​e 开发人员支持技术说明 #5078 中提供的表格

Adobe-Japan1-6 用于 CID 键控字体的字符集

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

Adobe CMap 和 CIDFont 文件规范

不幸的是,您没有提供困扰您的文档;因此,我无法检查链接是否真的合适。

编辑

正如您更正了您的问题并现在要求使用特殊用途的 Adob​​e-Identity-0 ROS (“ROS”是 /Registry、/Ordering 和 /Supplement 的缩写,它们代表三个 /CIDSystemInfo 字典元素存在于CIDFont 和 CMap 资源)而不是Adob​​e-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 字符序列的映射。

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

无法确定字符代码代表什么,在这种情况下,符合要求的读者可以选择他们选择的字符代码。

于 2013-03-31T09:07:59.233 回答