这个项目花费了不到一个月的时间,由于功能涉及到了批量打印,而之前也没有做过类似功能的项目,想重点记录一下。核心将会说一下js批量打印的具体实现。
先简单介绍一下项目的功能吧。
1.教师工资单的导入。
2.教师信息的管理(增,删,改,查)。
3.打印。
其实,1和2是一个整体,首先工资单导入时,Excel数据本身带有教师的相关信息,我只需要把教师信息读取出来,保存到教师表中即可,然后将工资单保存到另外的工资表中。这里需要注意的是,每次导入时,我会自动判断,将新增的教师添加到教师表中。(第一次导入时新增的教师就为Excel中的全部了)。打印时根据用户选择的教师去后台获取工资信息,并进行打印。
重点说一下打印功能吧。
在做打印时,在网上也查到了很多使用插件的,但后来我还是选择了浏览器自带的打印,用js就可以实现,完全够用了,简单方便,何乐而不为呢。
页面的整页打印,直接调用js中的window.print()就行了。
难的是我只需要打印一个工资条表格,而且是很多个表格(每个教师一个工资条,也就是一个表格),刚开始摸不着头脑,查了很多资料也不太会,后来咨询了许大神,给了点思路,然后结合网上的资料,终于搞定了。
局部打印的话,我需要将打印的内容放到一个标签中,然后打印标签里面的内容即可。因为有很多数据,我循环将这些数据输出到table中,那么问题来了,我输出了这么多table,如何批量,如何分页?其实很简单,就一句话:
<DIV STYLE="page-break-before:always">This is the second DIV.</DIV>
给标签设置style属性为STYLE="page-break-before:always"即可。遇到这个属性,会自动分页打印。也就是说,我每循环一个table,我就加一个属性,好了,完美搞定。
项目中间也遇到了很多问题,比如,js中使用jstl标签循环获取java后台的list数据时,因为没有加引号使得有些值改变的莫名其妙。还有,有些教师工资库可能只有部分月份的工资,而前端页面模板设定成1-12月的,刚开始想使用List<List>数据结构来存储,发现自己前端很low,取数据又得搞老半天,后来想到了如果哪月缺失,我就给加上这个月的记录,将工资置空,这样,所有人都统一有12条数据了,就可以循环了。
先记录这些,免得以后又忘记了。
如果有朋友遇到实现批量打印方面的问题了,可以留言交流。代码我就不贴了。因为做过很多项目,却很少记录相关的东西,很多东西当时会了但时间久了就又忘记了。所以只是写给自己,不算是技术文章吧。