最全前端Web报表打印方法汇总

发布时间:2023/10/11 09:10 发布者:Leo

返回博客中心

(一)背景介绍

大家在日常办公过程中经常需要进行文档打印,比如:打印Excel表格、PPT文档、照片。此外,在大家使用的各种应用系统中也都提供了打印功能,而不是让大家必须导出一个Excel或者PDF文件再进行打印,比如:CRM中的合同打印、ERP中的BOM物料清单打印、HIS医疗信息系统中的电子病历打印、WMS中的出库入库单、财务系统中的发票打印等等。这些集成到应用系统中的打印功能的确让用户方便了不少,但是对于软件开发者来说,在为这么多场景的不同打印需要寻求技术方案时就比较头疼了。

本文将汇总大家遇到的各种报表打印需求和实现方案,希望能够对有相关需要的小伙伴们起到一定的帮助作用,让程序猿同学们少些加班、多些生活。

(二)认识打印机类型

在开始介绍打印实现方案之前,我们需要了解一下现在市面是场景的打印类型,以及他们的主要用途。

  1. 激光打印机:激光打印机适用于公司、学校、工厂等场景。它使用激光扫描成像技术,通过激光束将数据信号转化为图像,然后将墨粉加热固化到纸张上。激光打印机的打印速度较快,打印质量较高,适合打印大量文档和表格。
  2. 喷墨打印机:喷墨打印机适合学生和家庭使用。它使用墨盒来实现打印,通过喷头将墨水喷印到纸上,形成图案或字符。喷墨打印机的打印成本较低,适合打印彩色照片和文档。
  3. 热敏打印机:常用于打印超市小票、电影票、车票等。它是一种工业打印机,使用经过化学处理的热敏介质,当应用于热敏打印头时会变暗。与传统的打印机不同,热敏打印机没有色带、墨水或碳粉,可以做成便携式打印机。
  4. 针式打印机:常用于打印发票、快递面单、多联复印纸、仓库出入库单据打印等。它是一种特殊的打印机,它使用打印头中的多根金属撞针,通过撞击色带,将图像或字符印在纸上。

在对以上四种打印机有了初步了解之后,我们接下来就直接进入各场景下打印的实现方案。

(三)常见打印方式场景

打印需求和很多因素相关,比如:所在行业的不同(工业、医院、学校、零售等),打印外观需求的不同(全部打印、部分打印),打印时机的不同(第一次打印、第二次打印),打印数量的不同(打一份、打N份),打印纸张的不同(A4纸、多联复印、不固定高度的小票制作/热敏纸),打印颜色的不同(黑白和彩色)等,这些因素综合起来决定了打印实现方式的多样化。那我们就由浅入深,来看看不同打印类型的实现方法:

1. 直接打印

这类打印没有什么特别的,就是所见即所得的方式打印全部内容,比如:客户名单打印、商品清单打印等。

2. 报表套打

这类打印是将部分类容打印到特定纸张上,典型的有快递单打印、发票打印、出库入库单据打印等,因为这些纸张上面已经有内容,我们只需要把部分数据进行打印,而不用打印纸张上已经有的背景内容。比如:财务发票纸张贝莱就有很多制式内容,我们只需要把公司名称、纳税号、商品明细这些和当此交易相关的内容进行打印。

3. 小票打印

这儿主要说的是超市小票打印、餐饮小票打印,而不是电影票、车票打印,两者根本区别在于纸张大小是否固定。超市小票打印会在一张纸上连续不间断的打印所有购买的商品信息,所以,实际打印内容的高度(或者长短)不是设定好的A4或者其他固定纸张。而且这类打印所需要的纸张高度不容易事先计算好,这主要是是大于内容的动态性决定的,比如:这次购买了50种商品,我们可以直接打印这50行数据,但是,我们也可能按照商品类型归类打印,这样打印出来的就是50+N行,这儿的N就是商品的类型数量,更复杂的是如果要添加分类小计,那么实际打印的行数就是50+2N。

4. 重复表格列标题打印

这类打印需求主要出现在明细表格和透视表格打印的情况,为了让打印到纸张之后每页都有标题、表头、便于阅读。我们设想有一份1000行、50列的表格数据要打印到纸张上,如果我们只在第一页显示表格的标题行,那么我们看第二页之后的数据时,都还的翻到第一页看每列数据的真实含义,是不是特别不方便。为了解决这个问题,就希望在数据分页展示、分页打印的时候能,每页都能显示表格标题行,这样很容易知道每列数据对应的含义。

5. 重复表格列标题和行标题打印

那在实际应用过程中,表格数据展示时除了列头还有行头,我们看下面这份数据,每行数据的第一列也起到标题的作用,我们在看每个单元格数据的真实含义时,需要同时看所在行和所在列才能确定其真实含义,比如下图中红框单元格代表的行业时xxxx。这类表格数据在不分页展示的通过固定表头还是比较容易理解的,但是当我们进行分页展示和打印时,我们就希望每页都显示行头和列头,这样看数据才方便。

6. 填充空白行打印

以下两张图主要区别在于空白区域是否打印空行。我们经常遇到当打印一份报表内容不够撑满一页,这样就会空很大一片,一方面不美观,另一方面在一些特殊情况下这也不太合规,所以就出现了填充空白行打印的需要。

7. 空白区域画斜线打印

这类打印需求更多出现在处方单上面,一张B5纸上面只打印了两种药品,下方还空了很大一部分区域,以往了就是医生打印出来之后自己画一条斜线,然而科技的发展不就是为了减少没有必要的人力投入嘛,如果能够给空白区域自动打印一条斜线,不是很爽吗。由此,在HIS系统中就需要这种空白区域画斜线的打印需要。小伙伴们还遇到其他需要动态画线的应用场景吗,欢迎分享讨论啊!

8. 批量打印

首先要说明一下这儿介绍的批量打印不是把同样的内容打印 N 份的概念,而是用同样的格式打印 N 份不同的数据。比如:一个单位98名员工的体检预约单、一个班53位学生的期末综合素质报告单。这类报表设计和打印的核心在于,每一个人的信息打印之后需要强制换页,然从下一页开始打印另一个人的信息。

9. 电子签章打印

可能有小伙伴会问,电子签章不就是把签证图片打印到报表上吗,有什么特别的。如果你要打印的报表页数是固定的,你可以在最后一页添加这个签章进行打印,而实际应用中需要盖章的地方往往是不固定的,比如:一份合同可能有2页,也可能有3页,具体有几页是有合同内容决定,我们必须找到最后一页的右小角来盖章。这种动态性就增加了电子签章打印的复杂性。

10. 骑缝章打印

骑缝章打印和电子签章打印有相似的地方,其特点都是一份报表的页数不固定,导致我们无法用一个固定的方案进行打印,必须根据报表页数拆分每页应该显示的内容。比如:一份5页的合同,签章图片就需要拆分为5份,而一份8页的合同,签章图片就需要拆分为8份。

11. 静默打印

好了,我们把困扰广大软件开发工程师(程序猿)的问题放到最后讨论,静默打印是指在打印过程中,无需用户手动操作或预览的一种打印方式。在静默打印中,打印机会自动根据预设的打印设置进行打印,而无需用户干预。其核心作用有两方面:

1) 简化用户操作步骤,我们以仓库管理员打印出库单为例,每打印一次出库单,需要点击1次鼠标和点击5次鼠标的区别看上去不大,但是如果一天要打印500张出库单,你就知道点击鼠标也是一件让人痛苦的事情,办公效率可能因此下降10%,会带来物流运输、客户签收、财务汇款等所有环节的工作效率降低10%,这是一件多么可怕的事情。

2) 安全和控制的需要,我们去政务大厅办理业务的时候,通常需要先打印一些材料,这时候我们只需要点击打印按钮就可以,而不需要让我们选择打印机、打印纸质、黑白/彩色,这些工作不仅简化了操作难度,更重要的是安全,你绝对不会以为打印机名称选择错误,把你的材料从一楼打印到二楼打印机上。

在桌面应用时代这并不困难,然后在Web应用时代就比较麻烦,主要原因是浏览器安全控制,需要让用户主动操作之后才能读取浏览器所在客户端环境的硬件资源,简单说就是不能在用户不知晓的情况下给打印机发送打印任务。所以,大家就需要通过一些插件来实现打印,用A工具开发报表,然后借助B工具进行静默打印。但是让程序员头疼的是,因为客户安装浏览器的不同,打印插件频繁罢工、不好好工作。


Wyn 商业智能软件| 下载试用

Wyn 是西安葡萄城自主研发的嵌入式商业智能软件,能帮助企业用户发现更多的数据潜在价值,为管理者制定决策提供数据支撑。Wyn 具备完整的嵌入式分析能力,能够与其他软件深度集成,也可独立部署使用,快速提升数据展示和分析能力。

Wyn 支持公有云、私有云和本地部署等多种部署方式,并能在Java、.net、PHP等开发平台中使用。您可以将其与ERP、CRM、OA等业务系统,以及钉钉、企业微信等APP进行深度集成,持续交付BI和报表功能,助力您的客户发现数据的价值。

了解更多关于 Wyn 嵌入式商业智能软件的内容,请点击此处访问官网,立即下载体验。