awe*_*wen 6 c# printing asp.net server-side
我有一台运行 ASP.NET 应用程序的 Windows 服务器和一台连接到这台机器的本地打印机。我需要从服务器端代码打印一些文档。
到目前为止,我知道,.NET 中没有服务器端(服务)支持的托管 API。
System.Printing 命名空间 - 是 WPF 的一部分,不支持在服务器端运行,因为它可能会产生运行时异常(在 msdn 上检查)
System.Drawing.Printing - 是 WinForms 的一部分,也不支持在服务器端运行(在 msdn 上检查)
早在 2009 年,微软就在帮助下详细阐述了同样的问题,解决方案是使用非托管 XPS 打印 API 作为当时唯一受支持的方式。所描述的问题和解决方案与示例发布在这里:如何通过 XpsPrint API 在服务器上打印文档
然而,现在这是一个问题,因为 XPS Print API 被标记为不支持并且将来可能不可用 ( msdn )。
那么,从服务器端代码打印支持的方式是什么?
看起来可能有更多的 Win32 API 可以使用,但是网络上没有任何信息,这可能是一场噩梦......
接受商业解决方案。谢谢你。
因此,最好的方法是在打印服务器上设置打印机,然后在 Web 服务器上安装打印驱动程序,并引用您要打印的打印机。
然后,在代码中,您可以使用 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);
}
Run Code Online (Sandbox Code Playgroud)
如果这段代码在技术上可以工作,我不建议这样做,因为微软本身表示不支持这种方式。
我个人会将所有打印作业推送到客户端。像您一样在本地安装打印机,然后将用户重定向到他们可以轻松打印的页面。
如果需要的话,您可以编写 JavaScript 来为它们调用浏览器特定的打印(如果您也想自动化)
或者保存 PDF 服务器端并将文件作为下载推送给用户,让他们下载/保存,然后通过 Adobe Reader 或替代应用程序打印文档。
归档时间: |
|
查看次数: |
2987 次 |
最近记录: |