James.Lv 发表于 2022-11-22 16:20:44

【静默打印】ARJS无预览打印解决方案

本帖最后由 Felix.Li 于 2023-2-13 17:55 编辑

在使用ARJS报表时,经常会有打印的需求,但是ARJS是前端的控件,默认的打印是调用的浏览器打印,在实际需求中,有时也需要使用无预览打印,也就是用户点击打印之后直接就使用默认打印机打印出来。针对这个需求,我们验证了一个解决该问题的方案,本贴就来介绍该方案如何实现



实现思路如下:
后端实现一个接口,接收Blob类型PDF流,然后调用系统默认打印机,将PDF进行静默打印

前端利用ARJS自带的导出PDF,导出Blob类型,然后通过POST请求调用后端接口将Blob流传给后端进行打印

具体实现步骤:
前端实现方法:
前端利用ARJS的PDF.exportDocument无预览导出PDF,该接口返回的result包含data属性和download方法,然后调用后端接口,将result.data传递给后端
function printPDF() {
    var ARJS = GC.ActiveReports.Core;
    var PDF = GC.ActiveReports.PdfExport;

    var settings = {
      info: {
      title: "test",
      author: "GrapeCity inc.",
      },
      pdfVersion: "1.7",
    };

    var pageReport = new ARJS.PageReport();
    pageReport
      .load("1.rdlx-json")
      .then(function () {
      return pageReport.run();
      })
      .then(function (pageDocument) {
      return PDF.exportDocument(pageDocument, settings);
      })
      .then(function (result) {
      let formData = new FormData();
      formData.append("file", result.data);
      fetch("http://localhost:8088/print", {
            method: 'POST',
            mode: 'cors',
            body: formData
      })
      });
}
具体PDF.exportDocument可以参考文档:
https://demo.grapecity.com.cn/activereportsjs/demos/api/export/purejs

后端实现方式:
我这边是采用python实现了一个接口,接收前端传递的Blob文件流,然后调用后端部署的服务器默认打印机直接进行静默打印


后端程序可以部署到服务器上,如果是windows服务器,可以直接下载exe,在服务器上运行

[*]
[*]

下载下来是2个exe程序,需要放在同一个文件夹,然后运行PrintAgent.exe,切记这两个程序需要放在同一个文件夹



注意:如果exe只给服务器上部署,那么前端在打印时调用服务器地址接口打印,最终都会从服务器上连接的打印机打出来
如果exe给客户端部署了,那么前端打印就可以代码调用localhost地址去打印,最终就会从客户端所连接的默认打印机打印出来;
切换打印机的话,就调整windows的默认打印机就可以


Linux服务器的话需要将源码拷贝到服务器去运行

源码如下,也可以根据自己需要进行调整和修改:


朗月2022 发表于 2024-2-8 16:47:01

吕经理,根据的你视频,用活字格做测试(推送服务器PDF),系统提升文件格式不正确呢。

postman 下可以的


James.Lv 发表于 2024-2-8 17:35:16

您好,活字格的话您可以参考这个教程

一看就会,超有用活字格技能:一百九十、活字格无预览打印实现方法
https://gcdn.grapecity.com.cn/showtopic-199398-1-1.html
(出处: 葡萄城开发者社区)


有一个这个需要是服务端使用,客户的端的话,拿不到那个文件的,而且如果是客户端,您需要把打印的那个程序在每个客户端都进行安装才可以

糖小福 发表于 昨天 10:56

666这个666了:lol

Eden.Sun 发表于 昨天 12:15

糖小福 发表于 2024-11-29 10:56
666这个666了

:mj72:感谢您的肯定。有什么问题,欢迎您随时开贴沟通哦:lol
页: [1]
查看完整版本: 【静默打印】ARJS无预览打印解决方案