从asp.net

时间:2016-06-06 09:35:37

标签: c# asp.net printing server-side

我有一台运行ASP.NET应用程序的Windows服务器和连接到此计算机的本地打印机。我需要从服务器端代码打印一些文档。

到目前为止,我知道,服务器端(服务)支持.NET中没有托管API。

  • System.Printing命名空间 - 是WPF的一部分,不支持在服务器端运行,因为它可能会产生运行时异常(在msdn上检查)

  • System.Drawing.Printing - 是WinForms的一部分,也不支持在服务器端运行(在msdn上检查)

在2009年微软的帮助下制定了同样的问题,解决方案是使用非托管XPS Print API作为当时唯一受支持的方式。所描述的问题和发布的示例解决方案如下:How to Print a Document on a Server via the XpsPrint API

但是现在这是一个问题,因为XPS Print API被标记为不受支持,将来可能无法使用(msdn)。

那么,支持的服务器端代码打印方式是什么?

看起来可能会使用更多的Win32 API,但网上没有任何信息,这可能是一场噩梦......

接受商业解决方案。谢谢。

1 个答案:

答案 0 :(得分:0)

因此,最好的方法是在打印服务器上设置您的打印机,然后在您的网络服务器上安装打印驱动程序,并参考您要打印到的打印机。

然后在代码中,您可以使用 System.Drawing.Printing 将打印作业发送到您刚安装的任何打印机。

PrintDocument p1 = new PrintDocument();
p1.PrinterSettings.PrinterName = "\\PrintServer\NewPrinter";
p.PrintPage += new PrintPageEventHandler(this.Page_Print);
p1.Print();

protected void Page_Print(object sender, PrintPageEventArgs ev)
{
    Brush b = new SolidBrush(Color.Black);
    Font printFont = new Font("Lucida Sans Typewriter", 10);
    ev.Graphics.DrawString("Hello World", printFont, b, x, y, StringFormat.GenericDefault);
}

此代码在技术上可以工作的地方我不建议这样做,因为 Microsoft 本身表示不支持这样做。

我个人会将所有打印作业推送到客户端。像您一样在本地安装打印机,然后将用户重定向到他们可以轻松打印的页面。

如果需要,您可以编写 JavaScript 为它们调用特定于浏览器的打印(如果您也想自动化)

或者保存 PDF 服务器端并将文件作为下载推送给用户,让他们下载/保存,然后通过 Adob​​e Reader 或其他应用程序打印文档。