生成PDF

时间:2010-12-22 09:19:37

标签: .net pdf gdi+ gdi

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

有没有人有任何好的教程或参考资料,这可能会指出我正确的方向。

提前致谢。

6 个答案:

答案 0 :(得分:7)

我们在http://www.jpedal.org/PDFblog/?s=%22Make+your+own+PDF+file%22

的博客上制作了一套关于创建基本PDF的教程

答案 1 :(得分:7)

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

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

标题很简单 - 它定义文件是PDF和版本。 PDF中的对象数据类型。这包括bool,数字,字符串,列表/数组,字典和流。 对象可以直接或间接编写。 直接对象按原样写入。 间接对象​​的写法如下:

<objid> <generation> obj <direct object> endobj

例如,我可以写:

3 0 obj (This is a string within PDF.) endobj

每当我想在其他地方使用该字符串时,我只需要使用间接引用,其定义为:

<objid> <generation> R

在这种情况下,我可以将我的字符串称为:

3 0 R

要快速查找对象,有一个交叉引用表,用于指示特定id和代的对象在文件中的位置。

因此,除了简单地将对象写入文件之外,还必须跟踪已定义间接对象的文件位置。

所有这一切都是可行的,但是你会很快发现,当你编写这些文件时,在输出流中进行更改并使事情变得干净整洁将变得非常具有挑战性。更糟糕的是,其他人也做到了这一点,所以现在有一堆垃圾PDF文件在野外,Acrobat设法以某种方式处理。例如,GhostScript(希望这是固定的),生成的PDF,其交叉引用表是完全垃圾 - 他们指出没什么用处。然后有些生产者通过使用错误的数据类型进行字典条目或其他缺少规范要求信息的数据来违反规范。

使用PDF非常噩梦。

尽管如此,这是一个有趣的练习,但是如果你想做任何重要的事情,你需要开始编写好的工具来管理你的所有间接引用,交叉引用表和字典以及类型检查等等等等等。 。最后,您会发现现有的库可能会更好地为您服务。

作为使用和生成PDF的工具的作者,我将恳求您不要让任何不合规的PDF出现在野外。

答案 2 :(得分:2)

我知道您已声明您不想使用第三方工具,但请至少查看iTextSharp。除非有真正的理由你不能使用这样的工具,否则这应该完全符合你的要求。

答案 3 :(得分:2)

对于PDF:

Sharppdf Tutorials

如果花费一点,并且想要最好的,你不在乎吗?然后我会推荐我Aspose.Pdf. NET

编辑:我现在看到你不想使用3d派对。但我会推荐你​​最强的!当已经有这么多时,这将需要而不是lønomt。当它存在时,我们不制造轮子吗?

但是你真的想花时间在这上面,我通过阅读代码,在nfop找到了解决方案并看到了他们是如何做到的。

阅读Portable Document Format。何时从一开始就制作这样的东西是重要的,以了解他们使用什么标准以及如何构建格式。

答案 4 :(得分:1)

Adob​​e托管可免费下载的ISO PDF规范的副本。对于这样的事情,它将是不可能的:

http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf

答案 5 :(得分:0)

在使用现成工具或在编写自己的代码之前查看代码之间有一个很好的界限。如果您接受后者,只需选择一个不错的开源工具,如http://www.pdfforge.org/,然后查看代码。

警告:如果您打算分发自己的工具,那么从开源工具中获取太多灵感可能会迫使您开放自己的开源工具。我不是律师,我不知道有多少。