前端报表如何实现无预览打印解决方案或静默打印

前端,报表,如何,实现,预览,打印,解决方案,静默 · 浏览次数 : 458

小编点评

**前端打印方案** 为了实现前端无预览打印,葡萄城技术团队采用了以下方案: 1. **后端实现接口**,接收 Blob 类型 PDF 流并调用系统默认打印机进行静默打印。 2. **前端利用 ActivereportsJS 的 PDF.exportDocument** 方法进行导出,并通过 POST 请求调用后端接口将 Blob 流传给后端进行打印。 **具体步骤如下:** 1. 使用 **GC.ActiveReports.Core** 的 **PDF** 对象导出 PDF 数据。 2. 将 **PDF** 数据转换为 Blob 流。 3. 使用 Fetch API 向后端发送 POST 请求,将 Blob 流作为请求体传递。 4. 后端程序可以部署到服务器上,并通过 **PrintAgent.exe** 进程进行静默打印。 **优点:** * 无预览打印,无需手动点击打印预览对话框。 * 支持批量打印。 * 支持各种打印要求的行业。 **注意:** * 后端程序需要部署到服务器上。 *前端需要安装 **GC.ActiveReports.Core** 库。 * 需要在前端代码中引入 **GC.ActiveReports.PdfExport** 和 **Fetch API**。

正文

本文由葡萄城技术团队于博客园原创并首发
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据支撑, 而前端打印可以说是非常令人头疼的一件事。为什么令大家头疼呢?因为前端打印,要强依赖与浏览器的打印预览页面,会天然存在以下弊端:

  1. 每一次打印都要弹出来打印预览对话框,如果前端需要批量打印,那么意味着客户要点击无数个关闭按钮,才能实现批量打印,如果一次性打印几百张上千张的报表,则会成为“NightMare”。
  2. 前端打印强依赖于浏览器,主流的思路是先将内容转换为 PDF 文件,再调用浏览器的打印功能进行打印,而生成 PDF 文件是依赖于浏览器对于字体,边线等的处理,因此浏览器的异同则直接导致打印出来的效果差距很大,有的边线加粗,有的 1 页数据,打印出来呈现 2 页,也是让开发者十分苦恼的事情,对于一些打印要求比较高的行业,这就是灾难。
    因此如何在前端实现无预览打印,也就是用户点击打印之后直接就使用默认打印机打印出来。针对这个需求,我们验证了一个解决该问题的方案,本贴就来介绍该方案如何实现。

实现思路如下:
后端实现一个接口,接收 Blob 类型 PDF 流,然后调用系统默认打印机,将PDF 进行静默打印。前端利用 ACTIVEREPORTSJS 自带的导出 PDF,导出 Blob 类型,然后通过POST 请求调用后端接口将 Blob 流传给后端进行打印。
具体实现步骤:
前端实现方法:
前端利用 ActivereportsJS 的 PDF.exportDocument 无预览导出 PDF,该接口返回的 result 包含 data 属性和 download 方法,然后调用后端接口,将result.data 传递给后端。

1. function printPDF() {
2. var ACTIVEREPORTSJS = GC.ActiveReports.Core;
3. var PDF = GC.ActiveReports.PdfExport;
4.
5. var settings = {
6. info: {
7. title: "test",
8. author: "GrapeCity inc.",
9. },
10. pdfVersion: "1.7",
11. };
12.
13. var pageReport = new ACTIVEREPORTSJS.PageReport();
14. pageReport
15. .load("1.rdlx-json")
16. .then(function () {
17. return pageReport.run();
18. })
19. .then(function (pageDocument) {
20. return PDF.exportDocument(pageDocument, settings);
21. })
22. .then(function (result) {
23. let formData = new FormData();
24. formData.append("file", result.data);
25. fetch("http://localhost:8088/print", {
26. method: 'POST',
27. mode: 'cors',
28. body: formData
29. })
30. });
31. }

具体 PDF.exportDocument 可以参考文档:
https://demo.grapecity.com.cn/activereportsjs/demos/api/export/purejs
后端实现方式:
我这边是采用 python 实现了一个接口,接收前端传递的 Blob 文件流,然后调用后端部署的服务器默认打印机直接进行静默打印。

后端程序可以部署到服务器上,如果是 windows 服务器,可以直接下载 exe,在服务器上运行。
• 下载链接: https://pan.baidu.com/s/1De2VdhrGTqX9tHub8gYrSg 提取码: 569c
下载下来是 2 个 exe 程序,需要放在同一个文件夹,然后运行 PrintAgent.exe,切记这两个程序需要放在同一个文件夹。

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

Linux 服务器的话需要将源码拷贝到服务器去运行。源码如下,也可以根据自己需要进行调整和修改:
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjUzNTMyfGE0YTE2ZDY5fDE2NzM0MTk2ODZ8NjI2NzZ8OTk3MTg%3D

与前端报表如何实现无预览打印解决方案或静默打印相似的内容:

前端报表如何实现无预览打印解决方案或静默打印

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据

前端报表如何实现无预览打印解决方案或静默打印

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据

前端展示中实现批量标签动态生成

前端展示中实现批量标签动态生成 使用过报表的小伙伴,经常会有条码打印、标签打印的需求,一两个标签还好处理,但很多时候我们可能需要的是几十、上百个内容的批量打印,如下图所示: 今天我们就来为大家介绍,如何快速实现报表的标签条码批量打印。 项目实战 今天我们从Wyn出发,为大家展示整个功能的实现过程。

一篇带你了解如何使用纯前端类Excel表格构建现金流量表

现金流量表(Cash Flow Statement),是指反映企业在一定会计期间现金和现金等价物流入和流出的报表。现金流量表是企业财务报表的三个基本报告之一(另外两个是资产负债表和损益表)。 为了全面系统地揭示企业一定时期的财务状况、经营成果和现金流量,财务报表需按财政部会计准则的标准格式设计,因此

如何通过前后端交互的方式制作Excel报表

前言 Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具。它不仅可以呈现数据清晰明了,还能进行数据分析、图表制作和数据透视等操作,为用户提供了全面的数据展示和分析能力。 今天小编就为大家介绍一下,如何通过葡萄城公司的纯前端表格控件SpreadJS和后端表格组

前端远程调试方案 Chii 的使用经验分享

前端远程调试方案 Chii 的使用经验分享 Chii 是与 weinre 一样的远程调试工具 ,主要是将 web inspector 替换为最新的 chrome devtools frontend 监控列表页面可以看到网站的标题链接,IP,useragent,可以快速定位调试页面,监控页信息完善,支

【前端动画】—— 再看tweenJS

16开始接触前端,一直对一个问题特别感兴趣,那就是js动画,也就是从那时起开始探究动画的各种表现形式,也是那个时候开始意识到编程这块东西最终考验的就是抽象和逻辑,而这一切完全是数学里边的东西。最早接触tweenJS是去年还是前年来着有点忘了,不过当时有点不大看得懂,勉勉强强算是过了一遍,不过有了这个

前端已死?全栈当立?取法于中,仅得其下。

开篇明义,前端已死?根本就是扯淡。前端技术精微渊深,驳杂宽广,除了基础的 HTML、CSS 和 JavaScript 技术外,前端技术还涉及到许多其他相关技术和工具,比如前端框架、UI 库、自动化构建工具、代码管理工具等等。这些技术并没有死,反而生态圈愈发健壮,但为什么前端已死的论调甚嚣尘上? 前端

前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口

本文将简单介绍前端项目在 IIS 中部署,以及‘URL重写’功能模块的安装、配置,最后是日常遇到的问题解决方案。

前端模块化开发技术的发展趋势

说起模块化开发大家想必都不陌生,特别是随着前端应用复杂化,代码呈倍数增长,我们不得不耗费大量的时间去进行管理,模块化也就逐渐的被大家所接受。