选择打印机并以静默方式打印

Select a printer and silently print

本文关键字:式打印 静默 打印机 选择      更新时间:2023-09-26

这个答案显示了如何在谷歌浏览器中启用静默打印。但是,我有两个网页,必须使用两个不同的打印机静默打印,而无需进一步的用户交互。有没有办法在呼叫window.print()之前自动选择打印机?如果真的有必要,我不介意编写Chrome扩展程序。

也许您可以使用Google Clound Print设置打印机,然后使用云打印API静默地向他们提交作业。看起来您可以在提交作业时指定打印机 ID。您可能需要使用 html2canvas 之类的东西来栅格化网页。

如果您处于您知道的环境中,并且您有足够的权限(我想,因为您知道要使用的打印机),您可以尝试通过命令行更改它。为此,您应该致电

@RunDLL32.EXE printui.dll,PrintUIEntry /y /n "Printer name"

打印机名称必须是控制面板中显示的值。

要从 javascript 调用命令行,如果您启用了正确的 ActiveX 控件,则可以使用:

var run=new ActiveXObject('WSCRIPT.Shell').Run("commands to run");

另外,您可以尝试使用shell.application ShellExecute。

 var objShell = new ActiveXObject("shell.application");
objShell.ShellExecute("cmd.exe", 'RunDLL32.EXE printui.dll,PrintUIEntry /y /n "Printer name"', "C:''WINDOWS''system32", "open", 1);

有关更多信息,您可以转到 http://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx

我还没有测试过,祝你好运!

我最终用 F# 编写了一个服务器,并通过 WebSocket 与之通信。

我已经搜索了一个答案,但看起来没有办法以编程方式设置打印机。因此,我可能复杂的解决方案:

创建一个命令行应用程序,该应用程序可以切换操作系统的默认打印机。也许是一个能够禁用和启用打印机的应用程序。如果您使用的是Windows,则.NET应用程序可能会执行此操作。如果在 Linux 上应该有一个用于打印机管理的命令行界面(我不确定)。

现在制作一个PHP,asp.net 或ruby等页面,能够调用打印机启用/禁用程序。

如果这有效,您可以使用 Javascript 调用首先打印到打印机 1,然后切换到打印机 2。但是有一些缺点:

  • 如果打印机一正在打印文档,则无法切换到打印机二,因为这将禁用打印机一。因此,您应该以某种方式计算一项普通工作需要多长时间。
  • 此解决方案中存在大量开销。您需要为打印机之间的切换进行额外调用
  • 可维护性绝对不是最佳的,因为您需要维护打印机切换程序和 Web 服务。

我希望有人能想出更好的解决方案,但我想至少分享我的想法。也许他们可以帮助您解决问题。

如果您为将在有打印机等的环境中运行的产品或 Web 应用程序执行此操作。 只给客户端一个webappp来运行的更好的解决方案可能是使用Chromium Embedded Framework将你的webapp与桌面应用程序打包在一起。 像Chromely(有点像Electron,但更轻),EdgeSharp或CEFSharp等。

使用此技术,您可以编写代码,这些代码可以实际枚举网络上的打印机并与硬件通信,同时仍运行您的 Web 应用程序,并且可以将您在桌面应用程序中构建的新 JS API 公开给 Web 应用程序。

然后,为了使其智能化,您可以让 Web 应用程序在两种环境中运行,在桌面应用程序中运行,或直接在浏览器中运行。 它将在桌面应用程序中运行高级扩展功能。

然后,您可以通过多种方式部署所述应用程序。 例如,Windows 10+,你可以为你的公司拥有一个专用窗口应用商店,你可以将应用程序部署到你的专用窗口应用商店,在那里可以通过专用 Windows 应用商店安装它,你可以使用 Windows 上的组策略进行设置。

或者,您可以有一个私有的 npm 存储库,并编写应用程序的安装/更新脚本。 即使是像Microsoft点击一次这样的老派技术也会安装,等等。

但是,您可以为您的Web应用程序提供的最大功能是为其提供自定义浏览器以运行,并且使用Chromium Embedded Framework非常简单。

在 C# 中,您可以在不到 60 秒的时间内启动一个简单的 Chrome 包装器。

例如,使用.Net 6+和EdgeSharp,您可以在Linux,Windows和MacOsx上将其跨平台,并且可以轻松地将其移植到Xamarin和IOS,以便您可以在手机,PC,Mac和平板电脑上使用此功能。