【问题标题】:Generating PDF files from .NET by using standard .NET GDI printing classes使用标准 .NET GDI 打印类从 .NET 生成 PDF 文件
【发布时间】:2010-11-09 17:06:49
【问题描述】:

我正在寻找一种使用 .NET 中的标准 PrintDocument 和 Graphics (GDI) 类生成 PDF 文件的方法。据我所知,唯一的方法是打印到 PDF 打印机。

问题是 PDF 打印机驱动程序总是要求提供文件名,但我需要从我的代码中控制文件名。使用 PDFSharp 或 DynamicPDF 之类的 PDF 库不是一种选择,因为它们都提供了自己的 API 来生成 PDF 文件。

我需要这个用于内部应用程序,所以依赖关系不是问题。

我的问题很简单:有没有一种方法可以控制打印机驱动程序(Adobe Acrobat、PDFCreator 等),从而可以指定文件名并且不提示用户输入任何内容?

【问题讨论】:

    标签: .net pdf gdi printing


    【解决方案1】:

    C1Pdf 组件执行此操作。它具有模仿 GDI plus(DrawString、DrawImage 等)并生成 PDF 的方法。它不安装或不需要任何打印机驱动程序。如果您需要更多详细信息,请点击以下文档链接:

    http://www.componentone.com/newimages/Products/Documentation/WinForms.PDF.pdf

    【讨论】:

      【解决方案2】:

      Amyuni PDF Converter 可以满足您的需求,它提供了 Microsoft 认证的打印机驱动程序,您可以使用 COM 接口或 .net 程序集完全操作该驱动程序,并且您可以使用标准 GDI(或 Windows.Forms 类)生成 PDF 文件(您可能检查了 Amyuni PDF Creator,这是一个自定义 API,正如您在 cmets 中对 this answer 所述)。

      【讨论】:

        【解决方案3】:

        Dane-Prairie Systems http://www.win2pdf.com/ 似乎从 GDI 调用中捕获了“打印到文件”字符串,并将根据您的要求创建 PDF。 这是手册中的引述:

        设置 lpszOutput 字段 完整的 DOCINFO 结构 文件的限定路径名,以及 然后将 DOCINFO 结构传递给 Win32 StartDoc 函数。

        彼得

        【讨论】:

          【解决方案4】:

          可以重复使用 PrintDocument 的 System.Drawing 代码,以使用来自 webSupergoo 的 ABCpdf.NET 生成 PDF。有关详细信息,请参阅System.Drawing example。该组件不使用打印机驱动程序 - 它直接创建 PDF - 因此不需要指定文件名。

          【讨论】:

            【解决方案5】:

            做了一些更多的研究,虽然我仍然没有找到完美的解决方案,但有一些产品安装了 PDF 打印机驱动程序,并允许您以某种方式控制要生成的文件的名称:

            Bullzip 和 PDFCreator 是免费的。

            更新:发现另一个看起来很有希望的:

            【讨论】:

              【解决方案6】:

              一个名为 Amyuni 的产品可以做到这一点(我在一个项目中使用它),但我不喜欢许可,你可以接受它。

              查看 Amyuni.com

              瑞恩

              【讨论】:

              • 我检查了他们的文档,在我看来,他们使用自定义 API 来生成 PDF 文档,而不是标准 .NET 打印中使用的标准 GDI 绘图方法。正如我的问题所述,这不是我想要的。
              • 我错了,我错过了你问题的 GDI 部分。
              【解决方案7】:

              有几家公司创建了文档格式转换工具。他们中的一些人使用打印机驱动程序将文档“打印”成所需的格式。寻找可以从 Word 文档转换为 PDF 的工具。其中一个应该有你需要的驱动程序,有些会提供一个 API,允许你控制文件名等。

              【讨论】:

                【解决方案8】:

                不确定这是否是您会考虑的解决方案,但我使用iTextSharp 填写 PDF 表单并使用代码生成的文件名保存它们,而不是由用户生成。它还可以从头开始生成完整的 PDF,但我还没有深入研究。

                【讨论】:

                • AFAIK,iTextSharp 使用自定义 API 生成 PDF 文档,而不是标准 .NET 打印中使用的标准 GDI 绘图方法。正如我的问题所述,这不是我想要的
                【解决方案9】:

                除非您使用的打印机驱动程序手动支持此功能(据我所知不存在),否则您必须编写自己的打印机驱动程序,以便在运行期间将信息传递给(例如文件名)打印操作。

                这样做的缺点是您必须实现打印机驱动程序,以及它必须是非托管代码(您不能在 .NET 中编写驱动程序)。

                【讨论】:

                • 几年前,我读到一些关于在 Adob​​e Acrobat (Distiller) 识别的打印文档中嵌入特殊控制代码来设置要生成的 PDF 文件的文件名的内容。
                猜你喜欢
                • 2011-06-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-07-08
                • 1970-01-01
                • 2017-06-20
                • 1970-01-01
                • 2010-10-10
                相关资源
                最近更新 更多