使用System.Drawing.Printing.PrintDocument在内存中生成PDF

有谁知道以下是否可能,如果是这样,最好的方法是免费的?

我正在我正在处理的项目中生成PrintDocument并显示一个打印对话框,以便用户可以选择他们想要使用的打印机等。目前是一个Windows窗体应用程序,如果用户想要打印到PDF,他们可以选择打印到CutePDF或类似的东西。

但是我现在在应用程序上放置一个ASP.Net Web前端,并希望使用相同的代码生成PrintDocument但是想要动态地将其打印到PDF并通过Response流以PDF格式提供它下载。

所以我的问题是….如何使用当前的PrintDocument并从内存中生成PDF?

谢谢

可以重用PrintDocument的System.Drawing代码来生成带有ABCpdf .NET的PDF文档。 请参阅System.Drawing示例…

您必须使用第三方组件才能生成PDF。 以下文章提供了一些此类组件的链接: 从.Net生成PDF文件

如果您认为自己要运行与表单应用程序和ASP.NET应用程序中的打印机相同的“相同代码”,那么您将处于一个充满伤害的世界。

然而,你可能很幸运,因为看起来PDFsharp + MigraDoc可能能够为你做到这一点。

我想你会发现没有任何工具可以将PrintDocument作为输入并将PDF作为输出呈现。 执行所需操作的唯一方法是将PrintDocument“打印”到将生成PDF的“PDF打印机驱动程序”。 基本上是一个虚拟打印机,它将生成PDF而不是打印实际输出。 市场上有很多产品。 一对便宜且广泛使用的夫妇如下:

  • Ghostscript与RedMon (开源/ GPL或商业许可证可用)
  • Foxit Software的PDF Creator (29美元)

你真的应该看看iTextSharp(它在之前推荐的iText.NET页面上提到过)

http://itextsharp.sourceforge.net/

PrintDocument适用于Windows窗体应用程序,但即将推出SilverLight,请参阅此video… http://silverlight.net/learn/videos/all/printing-api-basics/

如果您希望继续使用PrintDocument和Web应用程序,我认为SilverLight 4(现在是测试版)是唯一的方法,或者您必须在本地为最终用户安装轻量级Windows窗体应用程序也许使用网络服务。

iTextSharp是一个很棒的工具,可以在Internet上使用.NET生成PDF。 我强烈推荐它; 我已经将iText与Java一起使用了…并且过去几年一直在使用iTextSharp。

iText for .NET有几个端口(一个非常流行的Java开源PDF库)。

http://www.ujihara.jp/iTextdotNET/en/