我想学习如何生成PDF,我不想使用任何第三方工具,我想自己在代码中创建它。到目前为止,我看到的唯一的例子是我通过打开第三方dll上的反射器来查看发生了什么的代码。不幸的是,我到目前为止看到的dll似乎正在访问user32.dll和gdi32.dll,为了帮助创建pdf文档,我的问题是我不知道他们在做什么,更重要的是为什么?
有没有人有什么好的教程或参考资料,可以给我指明正确的方向。
提前谢谢。
发布于 2010-12-22 22:41:37
规范是终极指南。下面是你最终要做的事情:
<代码>F29
标题很简单-它定义了文件是PDF和版本。PDF格式的对象数据类型。这包括布尔、数字、字符串、列表/数组、字典和流。对象是直接或间接写入的。直接对象按原样编写。间接对象的编写方式如下:
<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文件暴露出来。
发布于 2010-12-22 19:41:41
我们在http://www.jpedal.org/PDFblog/?s=%22Make+your+own+PDF+file%22的博客上运行了一组关于创建基本PDF的教程。
发布于 2010-12-22 17:26:53
我知道你说过你不想使用第三方工具,但请至少看看iTextSharp。除非你真的有真正的理由不能使用这样的工具,否则它应该能做你想做的事情。
https://stackoverflow.com/questions/4507714
复制相似问题