首页
学习
活动
专区
圈层
工具
发布

生成PDF
EN

Stack Overflow用户
提问于 2010-12-22 17:19:37
回答 6查看 758关注 0票数 2

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

有没有人有什么好的教程或参考资料,可以给我指明正确的方向。

提前谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-22 22:41:37

规范是终极指南。下面是你最终要做的事情:

  • 写入标题
  • 写入定义内容的对象
  • 写入交叉引用表
  • 写入尾部

<代码>F29

标题很简单-它定义了文件是PDF和版本。PDF格式的对象数据类型。这包括布尔、数字、字符串、列表/数组、字典和流。对象是直接或间接写入的。直接对象按原样编写。间接对象的编写方式如下:

代码语言:javascript
复制
<objid> <generation> obj <direct object> endobj

例如,我可以这样写:

代码语言:javascript
复制
3 0 obj (This is a string within PDF.) endobj

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

代码语言:javascript
复制
<objid> <generation> R

在本例中,我可以将我的字符串引用为:

代码语言:javascript
复制
3 0 R

为了快速找到对象,有一个交叉引用表,它告诉我们具有特定id和代的对象在文件中的位置。

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

所有这些都是可行的,但您很快就会发现,当您编写这些文件时,在输出流中进行更改并保持内容整洁将变得非常具有挑战性。更糟糕的是,其他人也这样做了,所以现在有一堆垃圾PDF在野外,Acrobat设法处理。例如,GhostScript (希望这个问题已经解决了),生成的PDF的交叉引用表完全是垃圾--他们没有指出任何有用的东西。还有一些生产者完全违反了规范,对字典条目使用了错误的数据类型,或者其他缺少规范所需信息的生产者。

这是相当噩梦般的消费PDF。

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

作为使用和生成PDF的工具的作者,我恳求您不要让您的任何不符合规范的PDF文件暴露出来。

票数 7
EN

Stack Overflow用户

发布于 2010-12-22 19:41:41

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

票数 7
EN

Stack Overflow用户

发布于 2010-12-22 17:26:53

我知道你说过你不想使用第三方工具,但请至少看看iTextSharp。除非你真的有真正的理由不能使用这样的工具,否则它应该能做你想做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4507714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档