我有一台运行 ASP.NET 应用程序的 Windows 服务器和一台连接到这台机器的本地打印机。我需要从服务器端代码打印一些文档。
到目前为止,我知道,.NET 中没有服务器端(服务)支持的托管 API。
早在 2009 年,在 Microsoft 的帮助下就详细阐述了相同的问题,解决方案是使用非托管 XPS Print API 作为当时唯一受支持的方法。已发布示例的问题描述和解决方案在这里:How to Print a Document on a Server via the 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);
}
这段代码在技术上可以工作的地方我不建议这样做,因为微软本身说这不受支持。我个人会将所有打印作业推送到客户端。像您一样在本地安装打印机,然后将用户重定向到他们可以轻松打印的页面。
如果需要,您可以编写 JavaScript 为它们调用特定于浏览器的打印(如果您也想自动化)
或者保存 PDF 服务器端并将文件作为下载推送给用户,让他们下载/保存,然后通过 Adobe Reader 或替代应用程序打印文档。
关于c# - 从 asp.net 在服务器端打印 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37654039/