我正在研究pdf的内部结构,所以我在libreoffice writer中创建了一个文件,只写字符串"Hello world"并导出为pdf格式。所以我用:pdftk hello_world.pdf output hello_world_unc.pdf uncompress
解压它,用文本编辑器打开它。
分析流,我得到一些奇怪的东西,像这样:[<01>5<02>-6<03>2<03>2<040506>-2 <040703>2<08>]TJ
应该代表"Hello world"作为十六进制字符串(在尖括号中)的数组,以及指定间距的整数。
我声明这个文件只包含这个字符串,它是为教育目的而创建的。
问题是它们看起来不像十六进制字符,因为它们应该是。也就是说,当然是"H"不是用01表示的。我期待的是这样的内容:(Hello world) Tj
.
这些数字只是字符映射的索引。
深入研究未压缩的PDF。你会发现一些像这样的行:
<01> <0048>
<02> <0065>
<03> <006C>
<04> <006F>
<05> <0020>
<06> <0077>
<07> <0072>
<08> <0064>
-
字距正在使用中,因此使用TJ数组而不是TJ字符串。这些数字是以1/1000 em(从内存)为单位测量的字符;
-
& lt;比;字符串是PDF十六进制字符串,而不是普通的PDF字符串;
-
在字体中查找/ToUnicode映射。如果存在,它将帮助您完成从PDF代码点到unicode代码点序列的映射。