【问题标题】:Generating a PDF生成 PDF
【发布时间】:2011-05-29 07:22:29
【问题描述】:

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

有没有人有任何好的教程或参考资料,可以为我指明正确的方向。

提前致谢。

【问题讨论】:

  • 为什么不想使用第三方工具? PDF 规范庞大而复杂,自己完成可能需要
  • 您是否有正当理由不想使用任何第三方工具?
  • @Oded - Snap!,我们同时发布了
  • Windows 上很少有程序不依赖于 user32.dll 或 gdi32.dll。第一个是大多数 Windows API 所在的位置。第二个是所有 GDI(图形设备接口)API 所在的位置。即使在 .NET 上,较高级别的层仍会转换为对这些较低级别 API 的调用。
  • 重新发明轮子。不是一件好事。

标签: .net pdf gdi+ gdi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    警告:如果您打算分发您的工具,从开源工具中汲取太多灵感可能会迫使您将自己的工具也开源。我不是律师,我不知道多少才算过分。

    【讨论】:

    • 这纯粹是一个学习练习,我有一个项目,但是我将使用 3rd 方工具生成 PDF。
    【解决方案3】:

    对于 PDF:

    还有Sharppdf Tutorials

    你不在乎它是否花费一点,并且想要最好的。那我推荐我Aspose.Pdf. NET

    编辑:我现在看到您不想使用 3d 派对。但我会以最强的方式推荐你!当已经有这么多时,这将需要并且不是 lønomt。如果有轮子,我们不会造轮子,是吗?

    但如果你真的想把时间花在这上面,我在nfop 上做了一个固定,并通过阅读代码来了解他们是如何做到的。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        标题很简单 - 它定义文件是 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 和代的对象在文件中的位置。

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

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

        使用 PDF 简直是一场噩梦。

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

        作为使用和生成 PDF 的工具的作者,我恳请您不要让任何不合规的 PDF 泄露出去。

        【讨论】:

        • 谢谢,从长远来看,我会走 3rd 方路线,这纯粹是一个学习练习,所以我可以把一些非常基本的东西放在一起。
        • @plinth 顺便说一句,有 official 规格吗?
        • 我知道这个帖子早就死了,但你能指出你在哪些控件上取得了成功吗?我们的主要问题是某些 PDF 无法拼接(PDF 版本 7+),其他工具可以处理更高版本的 Acrobat,但不保留表单字段。提前感谢您的帮助。
        【解决方案6】:

        Adobe 提供一份免费下载的 ISO PDF 规范副本。对于这样的事情,它将是无价的:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-15
          • 2015-11-29
          • 1970-01-01
          • 2015-07-17
          • 2016-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多