【静默打印】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服务器的话需要将源码拷贝到服务器去运行
源码如下,也可以根据自己需要进行调整和修改:
吕经理,根据的你视频,用活字格做测试(推送服务器PDF),系统提升文件格式不正确呢。
postman 下可以的
您好,活字格的话您可以参考这个教程
一看就会,超有用活字格技能:一百九十、活字格无预览打印实现方法
https://gcdn.grapecity.com.cn/showtopic-199398-1-1.html
(出处: 葡萄城开发者社区)
有一个这个需要是服务端使用,客户的端的话,拿不到那个文件的,而且如果是客户端,您需要把打印的那个程序在每个客户端都进行安装才可以
666这个666了:lol 糖小福 发表于 2024-11-29 10:56
666这个666了
:mj72:感谢您的肯定。有什么问题,欢迎您随时开贴沟通哦:lol
页:
[1]