找回密码
 立即注册

QQ登录

只需一步,快速开始

James.Lv 讲师达人认证 悬赏达人认证 活字格认证 Wyn认证

超级版主

222

主题

2650

帖子

5892

积分

超级版主

Rank: 8Rank: 8

积分
5892

活字格认证活字格高级认证Wyn高级认证Wyn认证微信认证勋章讲师达人元老葡萄悬赏达人

James.Lv 讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2022-11-22 16:20  /   查看:4137  /  回复:2
本帖最后由 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传递给后端
  1. function printPDF() {
  2.     var ARJS = GC.ActiveReports.Core;
  3.     var PDF = GC.ActiveReports.PdfExport;

  4.     var settings = {
  5.       info: {
  6.         title: "test",
  7.         author: "GrapeCity inc.",
  8.       },
  9.       pdfVersion: "1.7",
  10.     };

  11.     var pageReport = new ARJS.PageReport();
  12.     pageReport
  13.       .load("1.rdlx-json")
  14.       .then(function () {
  15.         return pageReport.run();
  16.       })
  17.       .then(function (pageDocument) {
  18.         return PDF.exportDocument(pageDocument, settings);
  19.       })
  20.       .then(function (result) {
  21.         let formData = new FormData();
  22.         formData.append("file", result.data);
  23.         fetch("http://localhost:8088/print", {
  24.             method: 'POST',
  25.             mode: 'cors',
  26.             body: formData
  27.         })
  28.       });
  29.   }
复制代码

具体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服务器的话需要将源码拷贝到服务器去运行

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2 个回复

倒序浏览
朗月2022
中级会员   /  发表于:2024-2-8 16:47:01
沙发
吕经理,根据的你视频,用活字格做测试(推送服务器PDF),系统提升文件格式不正确呢。

postman 下可以的


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
James.Lv讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2024-2-8 17:35:16
板凳
您好,活字格的话您可以参考这个教程

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


有一个这个需要是服务端使用,客户的端的话,拿不到那个文件的,而且如果是客户端,您需要把打印的那个程序在每个客户端都进行安装才可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部