生成PDF

Mik*_*169 2 .net pdf gdi+ gdi

我想学习如何生成PDF,我不想使用任何第三方工具,我想在代码中自己创建它.到目前为止我看到的唯一的例子是我在第三方dll上打开反射器时看到的代码,看看发生了什么.不幸的是DLL的,到目前为止我已经看到了似乎击中user32.dll中和gdi32.dll里面,以帮助创建PDF文档,我的问题是我不知道他们在做什么,更重要的是为什么呢?

有没有人有任何好的教程或参考,这可能指向我正确的方向.

提前致谢.

mar*_*ens 7

我们在博客上运行了一套关于创建基本PDF的教程,网址http://www.jpedal.org/PDFblog/?s=%22Make+your+own+PDF+file%22


pli*_*nth 7

规范是最终指南.以下是您最终必须做的事情:

  • 写一个标题
  • 编写定义内容的对象
  • 写一个交叉引用表
  • 写一个预告片

标题很简单 - 它定义文件是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出现在野外.