【问题标题】:Silent Print From Browser [duplicate]从浏览器静默打印 [重复]
【发布时间】:2021-06-26 18:21:57
【问题描述】:

在过去的几天里,我进行了很多研究,并且在这个问题上已经有了足够的头脑。我想要实现的是使用打印按钮直接从网络打印。我不想让浏览器打印弹出窗口出现。将有 2 台打印机连接到我的 Web 应用程序,我希望自动选择打印机。

我知道使用 PHP 或没有任何浏览器扩展或活动 x 插件是不可能的。

我还想到了一种解决方案,即在通过用户系统安装 Java 套接字客户端应用程序时使用 Web 套接字发送打印请求。

请随时建议我解决我的问题

【问题讨论】:

  • 您将无法覆盖客户端浏览器的打印功能。 PHP/Java 将与它无关。
  • 这个想法是让java客户端应用程序处理打印请求
  • 您想构建一个 Java Web 客户端,调用网站并打印页面?
  • 我查看了 chrome 扩展程序、fire fox 插件、一个 php web 客户端工具,它在客户端 pc 上安装了一个小应用程序,然后你可以从 web 安装.. 但没有一个解决方案对我来说似乎可靠。我的想法是构建一个 PHP Socket 服务器和一个 Java Socket 客户端。客户端将与服务器建立连接,每当服务器收到打印请求时,它会将打印数据传递给 Java 客户端处理整个打印功能的地方
  • 套接字服务器打印的意义何在?在 Java 中,您可以很容易地将 HTML 呈现为可打印的格式。您只需要 1 个应用程序即可调用它。

标签: browser printing


【解决方案1】:
我查看了 chrome 扩展程序、fire fox 插件
- Faizan Afzal 3 月 28 日 15:54

在上面的评论中,您提到您已经研究了 Chrome 扩展程序和 FireFox 插件,但是这些浏览器中已经内置了禁用打印对话框的功能。
如果您正在制作的网络应用程序将在受控环境中运行(您可以在其中管理访问它的浏览器以及它们的配置方式),您可以相当轻松地做到这一点。

Chrome
首先,转到chrome://settings/ 并将您的主页更改为 Web 应用程序。接下来,在桌面上为 Chrome 浏览器创建一个快捷方式,然后右键单击它以打开属性窗口。在“目标”输入字段中,将 --kiosk --kiosk-printing 添加到位置的末尾。应用更改,关闭所有 Chrome 窗口并单击快捷方式。这应该让您进入全屏模式(信息亭模式),当您尝试打印时,它应该会在默认打印机上自动打印,而不显示弹出窗口。

FireFox在 FireFox 上,转到 about:config 并同意任何警告消息。然后,右键单击页面上的某处并创建一个“New -> Boolean”。它会提示您输入名称和状态。对于名称,输入 print.always_print_silent,对于状态,将其设置为 true。然后您需要保存更改并重新启动您打开的任何 FireFox 窗口。如果您尝试打印某些内容,它将不再需要显示弹出窗口,而是会自动在默认打印机上打印。

通过以这种方式配置的这些浏览器中的任何一个,您都可以使用标准window.print(); 无需任何类型的服务器端交互即可打印的 JavaScript 方法。

批处理文件?
如果您想要一种更简单的方法来执行这些操作,您可以使用这两个命令提示符脚本,它们会自动配置和/或运行它们以满足您的需要:

Chrome:

cd Program Files (x86)\Google\Chrome\Application
chrome.exe --kiosk --kiosk-printing

火狐:

FOR /D %%G in ("%APPDATA%\Mozilla\Firefox\Profiles\*.default") DO SET prof=%%G
cd %prof%
echo user_pref("print.always_print_silent", true);>>prefs.js
cd \..
cd Program Files (x86)\Mozilla Firefox
firefox.exe

【讨论】:

    【解决方案2】:

    简而言之,由于混合内容限制和不断变化的 SSL 标准,通过套接字连接处理 HTTPS 很棘手,因此从头开始创作以在所有平台上工作可能会令人生畏。

    我还想到了一种解决方案,即在通过用户系统安装 java 套接字客户端应用程序时使用 Web 套接字发送打印请求。

    这正是 QZ 托盘的工作原理。

    qz.websocket.connect().then(function() { 
       return qz.printers.find("zebra");              // Pass the printer name into the next Promise
    }).then(function(printer) {
       var config = qz.configs.create(printer);       // Create a default config for the found printer
       var data = ['^XA^FO50,50^ADN,36,20^FDRAW ZPL EXAMPLE^FS^XZ'];   // Raw ZPL
       return qz.print(config, data);
    }).catch(function(e) { console.error(e); }
    

    上面的示例是针对原始打印的,但该应用也适用于其他格式(HTML、PDF、图像)

    项目页面: https://github.com/qzind/tray

    完全免责声明....作为上述插件的作者,我认为 PrintNode 执行几乎相同的任务是公平的。这两个插件都是开源的,但由支持它们的商业服务提供支持。

    项目页面: https://github.com/PrintNode

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2010-11-20
      • 2010-11-08
      • 1970-01-01
      相关资源
      最近更新 更多