规范是最终指南.以下是您最终必须做的事情:
标题很简单 - 它定义文件是PDF和版本.PDF中的对象数据类型.这包括bool,数字,字符串,列表/数组,字典和流.对象可以直接或间接编写.直接对象按原样写入.间接对象的写法如下:
<objid> <generation> obj <direct object> endobj
Run Code Online (Sandbox Code Playgroud)
例如,我可以写:
3 0 obj (This is a string within PDF.) endobj
Run Code Online (Sandbox Code Playgroud)
每当我想在其他地方使用该字符串时,我只需要使用间接引用,其定义为:
<objid> <generation> R
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以将我的字符串称为:
3 0 R
Run Code Online (Sandbox Code Playgroud)
为了快速查找对象,有一个交叉引用表,用于指示特定id和代的对象在文件中的位置.
因此,除了简单地将对象写入文件之外,还必须跟踪已定义间接对象的文件位置.
所有这些都是可行的,但是你会很快发现,当你编写这些文件时,在输出流中进行更改并保持整洁有用将变得非常具有挑战性.更糟糕的是,其他人也做到了这一点,所以现在有一堆垃圾PDF文件在野外,Acrobat设法以某种方式处理.例如,GhostScript(希望这是固定的),生成的PDF,其交叉引用表是完全垃圾 - 他们没有指出任何有用的东西.然后有些生产者通过使用错误的数据类型进行字典条目或其他缺少规范要求信息的数据类型来违反规范.
消费PDF是相当噩梦的.
尽管如此,这是一个有趣的练习,但是如果你想做任何重要的事情,你需要开始编写好的工具来管理你的所有间接引用,交叉引用表和字典以及类型检查等等.最后,您会发现现有的库可能会更好地为您服务.
作为使用和生成PDF的工具的作者,我将恳求您不要让任何不合规的PDF出现在野外.
归档时间: |
|
查看次数: |
749 次 |
最近记录: |