2017-01-01 278 views
0

根据这一article,下面的CMap bfrange映射是有效的:PDF的CMap:单个字形到多个字符映射

<02> <02> [<0066006C>] 

这是否意味着,PDF CMap的解析器都应该认识多字符的十六进制数和解析这是02 = [0066, 006C]

我找不到任何证实PDF格式的特定格式的东西,不像startChar endChar [destChar, ...]startChar endChar destChar明确提到。

回答

2

我无法找到任何确凿的PDF规范

这个特定格式看看PDF规范ISO 32000-1部分9.10.3 ToUnicode CMap的例子2:

2 beginbfrange 
<0000><005E><0020> 
<005F><0061>[ <00660066> <00660069> <00660066006C> ] 
endbfrange 

...

< 00 00>到< 00 5E>被映射为Unicode值U + 0020到U + 007E这之后的映射的定义,其中每个字符代码代表一个以上的Unicode值:

<005F> <0061> [ <00660066> <00660069> <00660066006C> ] 

在在这种情况下,原始字符代码是连字ff,fi和ffl的字形索引。该条目定义了从字符代码< 00 5F>,< 00 60>和< 00 61>到Unicode值的字符串的映射,每个字符在连字中的Unicode标量值:U + 0066 U + 0066是字符序列ff的Unicode值,fi的U + 0066 U + 0069和ff 1的U + 0066 U + 0066 U + 006c。

+0

感谢您的回答!如果你看看我的问题,你注意到我所指的格式稍有不同。 '<02><02> [<0066006C>],特别是'0066006C'组合了两个unicode值,“U + 0066”(f)和“U + 006C”(1)。我没有看到规范中提到的所有示例CMaps映射单个Unicode值。 – mattsven

+0

@mattsven,但这正是我引用的规范部分的意思!在这里'00660066'和'00660069'每个都包含两个Unicode值,而'00660066006C'也包含其中的三个!这被描述为*映射,其中每个字符代码表示多个Unicode值。* – mkl

+0

我的不好,我没有仔细阅读:)你是对的!标记为答案。 – mattsven