选择打印机并以静默方式打印
Select a printer and silently print
这个答案显示了如何在谷歌浏览器中启用静默打印。但是,我有两个网页,必须使用两个不同的打印机静默打印,而无需进一步的用户交互。有没有办法在呼叫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和平板电脑上使用此功能。
- 使用javascript将动态表从一个html页面打印到另一个html页
- JavaScript打印功能使日历停止工作
- esri javascript异步打印
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- jQuery/JavaScript在线公文包表单-打印样式表
- 如何打印嵌套对象的所有值
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 打印预览没有应用程序页眉和页脚的html表格
- 正在打印图表上的文本
- Rhino打印功能
- 承诺在非节点式回调上使用Bluebird
- javascript隐式全局变量
- 带有对象/原型的链式承诺(Q延期)
- 在通过child.print()打印之前,我如何等待图像加载到我的新窗口中
- 选择打印机并以静默方式打印
- 节点断言错误未打印,断言以静默方式失败
- 标签式网站在 ASP.NET,想打印所有这些,推荐.
- 通过点击按钮在每一行上进行敲除式多维阵列打印
- 为什么即使没有调用显式打印方法(例如document.write),函数的返回值也会打印?
- 本地以静默方式从浏览器打印pdf到特定打印机