将打印作业发送至计算机

时间:2016-05-16 19:45:23

标签: .net networking printing windows-7 asp.net-web-api2

所以说我有一台名为ServerA的计算机,我想让它将打印作业发送到名为WorkstationK的计算机上的打印机队列,是否有办法在不联网打印机的情况下执行此操作附加到WorkstationK

注意:
我几乎在SuperUser上问过这个问题,但我想从ASP.NET服务中做到这一点,所以像“将文件复制到工作站......”这样的解决方案不起作用。

用例:
如果它很重要,这就是我想要做的事情,我有一个需要一些输入的应用程序。该输入将被发送到服务器(ServerA)。作为该输入的结果,我需要将打印作业发送到给定的计算机,例如WorkStationK。但它可能是大约100多台计算机之一。

所以我不想将所有这些打印机设置为“网络”打印机。此外,我不想在/为工作站安装/创建应用程序(这是一个简单的应用程序编写,如果必须,我会这样做,但我希望没有部署解决方案)

4 个答案:

答案 0 :(得分:1)

你想要做的事情可能是不可能的,因为如果你考虑一下,那么在安全/滥用方面这将是一个真正的问题。如果一个网站可以在本地电脑上打印没有确认的东西,这将是一些严重的疯狂。因此,没有任何接口可以做到这一点。如果他们这样做,我会对它感到惊讶,请纠正我!

我想到的解决方案:

  • 只需生成要打印的页面,然后让用户点击"打印"。不需要安装,对用户来说可能不是太多。
  • 编写一个小型守护程序服务/应用程序,以便能够将打印作业发送到当前连接到该服务的计算机,并且该守护程序处理添加到打印队列。
  • 将您的服务部署为像ClickOnce-App这样简单易用的服务,应该已经足够能够执行此任务。用户自己可以轻松地安装它而无需权限和单击。它甚至可以自我更新,因此更改将非常容易/与网络应用程序相媲美。

您喜欢什么取决于您,但如上所述,我不认为可以完全远程完成。

我没有想到的另一种可能性,当然也没有足够的经验,就像谷歌云打印或其他类似的服务。也许添加这个你的公司可能是一个非常舒适的解决方案,从更好的角度来看。

答案 1 :(得分:1)

我知道你有以下架构:

  • 带WebApp的服务器
  • 大量工作站,每个工作站都连接到附近的打印机

用例

作为一个用例,我理解:

  • 用户通过浏览器使用WebApp,并在某个时候点击阅读print或类似的按钮
  • 服务器必须呈现要打印的文档
  • 文档应该从附近打印机上的工作站打印

我看到两种可能的选择。

解决方案1 ​​

这个想法是按钮打印不仅将请求发送到服务器应用程序,还生成文件(比如pdf格式)并将其发送回客户端的浏览器。如果在请求中通过将pdf文件作为对请求的响应流式传输完成,浏览器将自动下载pdf文件。

服务器代码看起来像这样(:

private void CreateImageAndReply(Src source)
{
    // render the output file using GhostScript or alike to 
    // a subdirectory that is accessible via http
    [..]
    // 
    Response.Redirect(DownloadFileUrl);
}

必须通过IIS管理器通过add virtual directory添加从WebApp呈现文件的子目录(请参阅Screenshot)以启用从浏览器的访问。 用户将有责任打开文件并通过系统的打印对话框进行打印。

开发任务

  • 实施渲染和重定向
  • 针对所有使用的浏览器进行测试

部署任务

解决方案2

这里的想法是服务器可以将文档存储在这个客户端可访问的目录中。

写入打印文件后,在每个工作站上运行的作业都会看到新文件并将其打印出来(即通过控制台程序或批处理文件或PowerShell文件中的Print命令)。 / p>

要管理100多个“PrintBoxes”,您可以使用ComputerName作为工作站端运行的任务内部和服务器端WebApp内部的文件夹名称(即使用Environment.MachineName)。 WebApp可以例如将pdf文件渲染为c:\ Printboxes \ Desktop123 \ print0310.pdf。客户端任务可以通过TaskManager启动,例如在工作日的开始并轮询已安装的网络目录的内容,例如, N:\ Printboxes的* .pdf;此本地程序将通过print命令将任何发现的文件发送到本地打印机,然后删除该文件。它还可以将收据文件写回目录(即print0310.receipt),服务器上的应用程序WebApp可以访问该目录...我想你明白了。

作为已安装网络驱动器的替代方案,您可以考虑在所有上述机器(服务器和工作站)上使用类似Dropbox的方式来以安全的方式来回同步文件。这样,只有Dropbox-User(可以是免费帐户;服务器上的同一用户和所有客户端,无需用户的交互)。

开发任务

  • 在服务器上编写渲染以及如上所述的重定向
  • 编写可部署到每个客户端的ConsoleApp

部署任务

  • 安装/复制cmd可执行文件(小型C#程序)
  • 安排任务以在系统启动或用户登录时运行
  • 安装Dropbox(与用户一起)

希望它有所帮助!

答案 2 :(得分:1)

我确定你已经搜索了很多内容,但仅仅是为了添加信息(因为我无法发表评论:()

我认为你必须找到一种方法来生成SPL文件,将SPL文件发送到工作站,并提示工作站打印它。

生成SPL文件: 您可以查看这个...我知道您不想在工作站上安装任何东西,但这可能有助于您获取打印作业的SPL文件。

http://www.lvbprint.de/html/splviewer1.html

此外,对于某些打印机,还有一些设置可以捕获打印作业的SPL文件。您可以使用服务器上的PDF打印机(或其他东西)聪明地捕获打印的SPL文件吗?

发送/打印SPL文件:

发送应该很容易,但我没有看到任何超级简单的方法从SPL文件打印。有这个...

https://support.microsoft.com/en-us/kb/179774

......但它需要在工作站级别进行大量干预,这可能很难/不可能。我不知道是否只是将SPL文件直接放入打印机假脱机的默认目录中就足以使其打印出来。

仍在寻找......祝你好运。

答案 3 :(得分:-1)

ServerA如何知道WorkstationN的哪个打印机使用?如果有的话?

如果这些打印机是网络打印机,您应该能够通过网络将作业直接发送给他们。如果它们是“智能的,最后一代打印机”,您甚至可以使用构造函数将文档作为附件发送到电子邮件,而不是创建自己的应用程序。