c# - 从 asp.net 在服务器端打印 .NET

标签 c# asp.net printing server-side

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

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

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

  • 早在 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 服务器端并将文件作为下载推送给用户,让他们下载/保存,然后通过 Adob​​e Reader 或替代应用程序打印文档。

    关于c# - 从 asp.net 在服务器端打印 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37654039/

    相关文章:

    android - 使用 Google 云打印从应用程序打印到餐厅的指定打印机

    c# - Microsoft.Practices.TransientFaultHandling.RetryPolicy 的正确代码是什么?

    c# - 在构造函数中使用带有附加参数的 Ninject 创建实例

    asp.net - 为什么在尝试使用 NuGet 包构建解决方案时,Visual Studio 会拒绝访问,代码 5 错误?

    C++:从打印机读取数据

    c++ - GDB:如何从子对象打印/调用父函数?

    c# 删除列表框的键

    c# - 如何在 EF7 Core 中运行时更改连接字符串?

    c# - 在单个页面中处理来自动态创建的控件的多个 "chained"回发

    javascript - Jquery UI - 自动完成不是一个函数