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

news/2024/11/19 15:15:49/文章来源:https://www.cnblogs.com/powertoolsteam/p/18291071

最新技术资源(建议收藏)
https://www.grapecity.com.cn/resources/

在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据支撑, 而前端打印可以说是非常令人头疼的一件事。

为什么令大家头疼呢?

因为前端打印,要强依赖与浏览器的打印预览页面,会天然存在以下弊端:

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

因此如何在前端实现无预览打印,也就是用户点击打印之后直接就使用默认打印机打印出来。针对这个需求,我们验证了一个解决该问题的方案,本贴就来介绍该方案如何实现。

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

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

具体实现步骤:
前端实现方法:
前端利用ActivereportsJS的PDF.exportDocument无预览导出PDF,该接口返回的result包含data属性和download方法,然后调用后端接口,将result.data传递给后端。

function printPDF() {var ACTIVEREPORTSJS = GC.ActiveReports.Core;var PDF = GC.ActiveReports.PdfExport;var settings = {info: {title: "test",author: "GrapeCity inc.",},pdfVersion: "1.7",};var pageReport = new ACTIVEREPORTSJS.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,在服务器上运行。

  • 下载链接: https://pan.baidu.com/s/1De2VdhrGTqX9tHub8gYrSg 提取码: 569c

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

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

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

另附 前端100张数据可视化大屏模板,按需取用:

https://www.grapecity.com.cn/solutions/wyn/demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740986.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SVN】 设置过滤上传文件

项目级过滤文件 1.1 在项目空白处,右键选择SVN-Properties1.2 New -> Other -> 新建一个“svn:global-ignores”属性1.3 查看效果 选中上传项目,右键-》SVN->Add如图所示,.vs、bin、obj文件都过滤了全局过滤文件配置 2.1 在项目工作根目录上,右键 -> TortosieS…

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率,确保信息的及时传递和文件的一致性。文件分发系…

跨境传输需要遵守哪些准则,如何做到有效管控?

在全球化的商业环境中,跨国企业面临着数据跨境传输的挑战。随着业务的扩展,企业需要在不同国家和地区之间高效、安全地传输大量数据。选择合适的跨境传输方案对于保障数据安全、提高业务效率、遵守法律法规至关重要。跨境传输数据需要遵守的准则和规定主要包括以下几点: 1.数…

ip和端口基础知识

TCP/IP体系结构 - 网络通信的基础HTTP协议 - 网站访问的基础其他协议 - HTTPS、ARP、ICMP、DNS①什么是ip地址 <1>IP地址是电子设备在互联网上的唯一标识 <2>用来在互联网中寻找电脑②内网ip和公网ip <1>内网ip:路由以内的网络,可以连接互联网,但是互联…

自建搜索引擎-基于美丽云

Meilisearch 是一个搜索引擎,主程序完全开源,除了使用官方提供的美丽云服务(收费)进行对接之外,还可以通过自建搜索引擎来实现完全独立的搜索服务。Meilisearch 是一个搜索引擎,主程序完全开源,除了使用官方提供的美丽云服务(收费)进行对接之外,还可以通过自建搜索引…

向量点乘为降维,叉乘为升维

本文转自 https://baijiahao.baidu.com/s?id=1787300641186091766&wfr=spider&for=pc 总结:向量叉乘是诞生了一个新的方向,这个方向垂直于原向量组成的平面。点乘的好处是将高维降低到1维,可以在1个维度上讨论数值问题。 上几篇《白话高中数学》聊完了向量怎么来的…

camunda快速入门(五):DMN规则引擎如何使用

在本节中,您将学习如何使用 BPMN 2.0 业务规则任务和 DMN 1.3 决策表将决策自动化添加到流程中。在本节中,您将学习如何使用 BPMN 2.0 业务规则任务和 DMN 1.3 决策表将决策自动化添加到流程中。 1、将业务规则任务添加到流程 使用 Camunda Modeler 打开Payment Retrieval(付…

2024暑假集训测试1

前言比赛链接。排名历程:\(3→5→3\),因为 \(T1\) 的 special judge 是后来加上的,导致部分人挂了分,赛后安排了重测,就变成了 \(rank5\),赛后发现 \(T1\) 数据过水,重新更新了数据,卡掉了很多人的假做法,又成了 \(rank3\)。 T1 已知合法的分组有 \(\begin{cases}0~0~…

SpringBoot彩蛋之定制启动画面

写在前面 在日常开发中,我们经常会看到各种各样的启动画面。例如以下几种 ① spring项目启动画面② mybatisplus启动画面③若依项目启动画面还有很多各式各样好看的启动画面,那么怎么定制这些启动画面呢? 一、小试牛刀 ① 新建一个SpringBoot项目②在项目的resources目录下新…

dBFS详解

什么是dBFS? dBFS(decibels relative to full scale)是描述音频信号在数字系统中的幅度的单位。它表示信号电平相对于数字系统的满刻度(Full Scale)的分贝值。dBFS的满刻度通常被认为是数字音频系统中所能处理的最大电平。 dBFS的计算 在数字音频系统中,dBFS的计算公式如…

DL/T645 调试工具,工程师必备

分享一个好用的 DL/T645 调试工具,官网下载地址 目录DL/T645 调试工具,工程师必备主要功能软件截图 DL/T645 调试工具,工程师必备 DL/T645 是中国电力行业的一个通信协议标准,专门用于电力数据采集和传输系统。这个协议由中国电力企业联合会(CEC)发布,主要用于智能电表及…

2024.7.9 鲜花

题图 from 匿名頭ン痛 - feat. 重音テト 我没找到 QaQprufer 序列,简单来说就是 \(n\) 个节点的树双射一个长度 \(n-2\) 值域 \([1,n]\) 的序列。 构造过程就是每次删一个编号最小叶子,记录其父节点。 本图来自baoziwu2,侵删显然堆 \(n\log n\) 可做,也可以扫一遍所有标号,…