【问题标题】:Control Printing in ASP.NET Page在 ASP.NET 页面中控制打印
【发布时间】:2011-04-08 20:16:56
【问题描述】:

我需要创建一个打印支票的 Web 应用程序。由于程序的性质,它需要非常安全,并且每个操作都需要记录。我需要能够生成支票、打印支票、在需要时允许重印等等。

我已经完成了支票的生成。我决定制作一个 PDF(这样我就不会得到任何浏览器页眉/页脚垃圾)。我想做的甚至不是将该 PDF 保存到文件中,而是将数据直接发送到打印机。基本上,我希望用户输入支票金额,选择要打印的帐户,然后单击一个按钮,将该支票的数据直接发送到打印机。我什至不希望用户能够查看要打印的 PDF。

有没有人在 ASP.NET 中做过类似的事情?

谢谢。

[编辑]

我最初提出的问题是用 ActiveX 控件回答的。然而,我决定用不同的方式来做这件事。我决定创建一张支票背景的图像,而不是打印 PDF。然后,我将使用该图像 (.jpg),并通过使用 System.Drawing.Graphics 在其上放置适当的文本(MICR 行、金额、检查日期等)来操作它,并将 X、Y 坐标和字体首选项存储在我的D B。从那里,我可以使用 System.Drawing.Printing 命名空间将新的 .jpg 文件从 Web 服务器发送到网络打印机,从而消除对 activeX 控件的需要并进一步加强安全性,因为完成检查的新图像永远不会已保存,并且用户永远无法访问支票的覆盖层。

感谢您的帮助。

【问题讨论】:

  • 仅仅使用一个网站(没有 activex,单击一次应用程序,java 小程序)你将无法做到这一点。如果您曾经研究过在 WinForms(我知道,题外话)应用程序中进行打印,我什至不确定那里的默认安全级别是否允许您执行此操作。试想一下,如果网页可以在没有用户交互的情况下打印到打印机上,一个流氓、恶意软件感染的网站会做哪些邪恶和令人不安的事情,在他们通过联邦法律禁止垃圾传真之前,它会和你的传真机一样糟糕,实际上可能更糟,当时打电话要花真钱。

标签: c# asp.net printing


【解决方案1】:

如果您查看邮政服务如何解决此问题,您会发现简单的 Web 应用程序无法做到这一点。要控制将项目发送到打印机的方式和时间,请使用 ActiveX 组件或 Java 软件。

[编辑]

小说明:我提到该软件必须在客户端运行,而不是您建议的服务器端建议。

如果您想走 .NET 路线,您可以选择托管 C++ 中的 ActiveX 或从 Web 启动的 Click-Once 应用程序(允许更多 .NET 语言,但可以反编译和更改)。

【讨论】:

    【解决方案2】:

    我们已经通过几种方式实现了这个场景。首先,我们有传统的 PDF 解决方案,服务器生成 PDF 打印图像,将其返回给浏览器,然后通过 PDF 插件显示并选择打印。

    其次,我们编写了一个客户端 ActiveX 组件来处理打印。将输入值传递给使用 FOP 将打印格式化为 PCL 的后端 Web 服务。 PCL 被传回 ActiveX 组件,ActiveX 组件随后将 PCL 直接发送到用户的默认打印机。这里不需要 PDF。

    任何一种方式都行得通,但只有第二个选项 - 需要您实现一些客户端部分 - 满足您的所有要求。

    【讨论】:

    • 是的,你说的听起来像我需要的。我目前是你的第一选择。我想更进一步,去你的第二个选择。关于如何编写该 activex 控件,您是否可以指出任何参考资料?
    • msdn.microsoft.com/en-us/library/aa751970(v=vs.85).aspx 是一个开始的地方。 ActiveX 全部基于 COM,因此如果您了解 COM 编程,只需知道应该实现哪些附加接口来支持 IE 托管。
    【解决方案3】:

    真的没有办法做到这一点。您只能将文档发送给用户,然后用户可以将其发送到打印机。有一些方法可以直接弹出打印对话框,但如果允许您控制用户计算机上数据的管理方式,那么网络将非常不安全。

    NKCSS 是正确的,它需要实际安装在用户机器上的软件。通过将其设置为提示用户打印的 PDF,您已经做了尽可能多的工作。

    如果您以 html 格式进行检查,则可以使用样式来显示/隐藏仅用于打印机的内容,如本文所述:here

    【讨论】:

      【解决方案4】:

      没有办法完全安全地执行此操作。即使您强制 PDF 直接打印到用户的默认打印机,它本身也可能是 PostScript 或 PDF 打印机,如 PDFCreator。所以他们最终仍然可以获得可查看的 PDF。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-27
        • 2020-10-10
        • 2011-01-25
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 2013-04-08
        相关资源
        最近更新 更多