Chrome 选择打印机并静默打印

shyt4zoc  于 2022-12-06  发布在  Go
关注(0)|答案(5)|浏览(1041)

This answer展示了如何在Google Chrome中启用静默打印。但是,我有两个网页,它们必须使用两台不同的打印机进行静默打印,而不需要进一步的用户交互。有没有办法在调用window.print()之前自动选择打印机?如果真的有必要,我不介意编写一个Chrome扩展。

8oomwypt

8oomwypt1#

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

iovurdzv

iovurdzv2#

如果你在一个你熟悉的环境中,并且你有足够的权限(我想,因为你知道你要使用的打印机),你可以尝试通过命令行来改变它。

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

打印机名称必须是控制面板中显示的值。
要从javascript调用命令行,如果启用了适当的ActiveX控件,则可以用途:

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

此外,您还可以尝试使用shell。

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
我还没有测试过,所以祝你好运!

k0pti3hp

k0pti3hp3#

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

o8x7eapl

o8x7eapl4#

我一直在寻找答案,但似乎没有办法通过编程来设置打印机。因此,我的解决方案可能很复杂:
创建一个可以切换操作系统默认打印机的命令行应用程序。也许是一个可以禁用和启用打印机的应用程序。如果你在Windows上,一个.NET应用程序可能可以做到这一点。如果在Linux上,应该有一个命令行界面来管理打印机(我不确定)。
现在创建一个PHP、asp.net或ruby等页面,该页面能够调用打印机启用/禁用程序。
如果可以的话,你可以使用Javascript调用先打印到打印机1,然后再切换到打印机2。

  • 如果一号打印机正在打印一份文件,你不能切换到二号打印机,因为这会使一号打印机失效。所以你应该用某种方法来计算一个普通的作业需要多长时间。
  • 这种解决方案的开销很大,你需要为打印机之间的切换打额外的电话
  • 可维护性绝对不是最佳的,因为您需要维护打印机切换程序和Web服务。

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

7vux5j2d

7vux5j2d5#

如果你的产品或webapp需要在有打印机等设备的环境中运行,那么一个更好的解决方案是使用Chromium Embedded Framework将你的webapp Package 在一个桌面应用程序中,比如Chromely(有点像Electron,但是更轻),EdgeSharp或CEFSharp等等。
使用此技术,您可以编写代码,以实际枚举网络上的打印机,并在运行Web应用程序的同时与硬件进行通信,还可以将您在桌面应用程序中构建的新JS API公开给Web应用程序。
为了使它更智能,你可以让你的web应用在两种环境下工作,在桌面应用中运行,或者直接在浏览器中运行。在浏览器中,它会有高级扩展功能在桌面应用中运行。
然后,您可以部署上述应用程序的多种方式。例如,Windows 10+您可以有一个私人的Windows商店为您的公司,您可以部署应用程序到您的私人Windows商店,它可以通过私人Windows商店安装,您可以在Windows上设置组策略。
或者你可以有一个私有的npm存储库,并编写应用程序的安装/更新脚本,甚至像Microsoft Click Once这样的老式技术也可以安装,等等。
但是,您可以为Web应用程序提供的最强大的功能是为其提供一个自定义浏览器来运行,而使用Chromium Embedded Framework,这是非常简单的。
在C#中,您可以在不到60秒的时间内启动一个简单的Chrome Package 器。
例如,使用.Net 6+和EdgeSharp,您可以让它在Linux、Windows和MacOsx上跨平台,还可以非常容易地将它移植到Xamarin和IOS,这样您就可以在手机、PC、Mac和平板电脑上拥有这种功能。

相关问题