【发布时间】:2014-03-31 13:23:12
【问题描述】:
我正在尝试找出在 未压缩 PDF v1.4 文档中使用 Times 字体的位置。
在 PDF 中描述 Times 字体的 /Font 对象是对象 65,如下所示:
65 0 obj
<</Type /Font
/Subtype /TrueType
/BaseFont /PXAAAD+TimesNewRoman,Italic
/FirstChar 1
/LastChar 35
/Widths [250 333 333 333 500 500 500 500 500 500 500 500 500 500 333 722 722 833 666 610 500 556 500 443 443 500 277 443 500 389 389 277 500 443 500]
/FontDescriptor 205 0 R
/ToUnicode 206 0 R>>
endobj
它引用/FontDescriptor 对象205 来进一步定义Times 字体对象,并引用对象206 中描述字节到Unicode 字符映射的/ToUnicode 映射。 编辑:在Ritsaert 对以下问题的初步回答之后,我在此处添加字体的/ToUnicode 对象,以提供提到的CMap。
206 0 obj
<</Length 208 0 R>>
stream
/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
<00> <FF>
endcodespacerange
35 beginbfchar
<01> <0020>
<02> <0028>
<03> <0029>
<04> <002d>
<05> <0030>
<06> <0031>
<07> <0032>
...
<23> <0101>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
endstream
endobj
我现在已经将 Times 字体对象的使用追踪到了 /Page 对象(众多对象之一),如下面的对象,它通过其页面中的 /F4 引用 @987654336 引用字体对象 65 @:
12 0 obj
<</Type /Page
/Parent 2 0 R
/MediaBox [0 0 432 648]
/Contents 92 0 R
/Resources <</Font <</F1 62 0 R
/F3 64 0 R
/F4 65 0 R>>
/ProcSet [/PDF /Text]>>
/Group <</S /Transparency
/CS /DeviceRGB>>>>
endobj
/Contents 流(PDF 文件中的对象 92)然后充满了文本对象(包含在 BT 和 ET 中),它们都不包含文本,而是使用尖括号填充数字。例如,这是对 Times 字体 /F4 的唯一引用,我试图找到它的用途:
92 0 obj
<</Length 93 0 R>>
stream
...
BT
0.5020 g
72.0000 615.1512 Td
/F4 12.0000 Tf
<0605> Tj
ET
...
endstream
endobj
但是尖括号和数字<0605> 指的是什么?字体表中的特定字形?查看PDF reference 和第 5.3.2 节我找不到尖括号的提及。
编辑:鉴于上述代码和<0605> 是文本的十六进制编码的公认答案,<0605> 是<06> 和<05> 中的条目CMap对象206,因此分别映射到Unicode <0031> 和<0030>。这意味着,字符串 <0605> 指的是 U+0031(一个“1”)和 U+0030(一个“0”),因此 Times 字体用于页面对象 12 上的字符串“10” .
【问题讨论】:
-
然后
/Contents流充满了文本对象(包含在BT和ET中),它们都不包含文本,而是使用充满数字的尖括号。 - 正如@Ritsaert 已经解释的那样,尖括号中的数字是字符串,只是碰巧以十六进制形式编写。 -
@mkl:总结了问题和答案:)
标签: pdf pdf-generation