js打印功能
曾经在上海的时候有开发过服务端连打印机打印文件的功能,用的是java调用服务机上连接的打印机打印pdf文件
String cmd = "cmd.exe /C start acrord32 /P /h " + pdfPath;
Runtime.getRuntime().exec(cmd);
详见:
Java调用cmd的静默打印PDF方法
https://blog.csdn.net/ycb1689/article/details/7530210
现在要做的是客户端调用浏览器的打印功能,利用客户端连接的打印机打印页面区域,采用的是jquery封装好的打印插件 jQuery.print.js ,只能说人家都封装好了,拿来用便可以了,没什么难点,下面是插件的网址
http://www.jq22.com/jquery-info15650
但是引用到我的项目中后,指定打印的区域为整个table,也就是把table对象抛给插件去封装,然后打印,但是打印预览的结果不太理想,当table显示的行数过多,比如50多行的时候,一页明显打不完,但是打印预览的时候总是显示总页数为1
这里选的也是打印全部页码,并没有指定只打印第一页。一开始以为是插件在封装我给的table对象的时候是不是漏掉了部分行,还特意设置在新窗口中打印,并在打印完成后不关闭新窗口,就是为了看看插件封装的table完不完整,后来发现也是完整的
设置在新窗口中打印,就设置下面一个iframe参数为false就可以了
修改代码,设置打印完成后或者取消打印后,新窗口不关闭。顺着代码调用的入口,找到打印完成后关闭新窗口的代码,注释掉下面一行代码即可
页面中显示的table是完整的,于是我在页面直接右键,选择打印功能,发现也是只打印一页
而其他页面直接点击右键打印的时候却是整个页面打印,比如下面这个,需要打印11页
这样一来问题就确定是出在自己项目了,突然就像打通了任督二脉,记得曾经设置过项目页面中body的width和height都为100%,一查看,果不其然
问题就出在这里,是插件封装的时候应用了这个样式,所以永远都只会打印一页。那么只要再封装的时候冲掉这个样式,问题就迎刃而解了
这样问题就解决了。
最后,还发现一个可以去掉页眉和页脚的设置,哈哈,这都不算什么大发现了,就是在改这个只能打一页的bug的时候,点呀点,点到了这个设置,觉得还是蛮有用的,分享给大家吧
点这里的更多设置
里面有个页眉和页脚的设置,取消勾选就没有页眉和页脚了