在web打印中,我们经常需要打印一些长的表格<table>,可能跨好几页,对于这种长表格,用浏览器打印,和JCP的预分页方式(即做若干div,每个div为一页),都不能理想地解决表格分页打印问题。
如果用浏览器的window.print方法打印,经常会出现在分页处断行,断线现象,如下:
当然,现在也有print css,但各浏览器厂商对该标准支持程度不一样,在不同的浏览器上打印,可能样式有很大差异。
能不能将大表格分成多个<table>,然后,用前面所说的方法,把它们放在一个个div页上,再用JCP来打印?
如果是行高一样的表格,上述方法可行,只需要算出每页合适的行数就行了,但如果类似简历这种表格,有很多的合并单元格,行高不一样,比如,工作经历一行,经历丰富的可以有好几页,刚毕业的可能是空白。这样,就无法知道,该在哪里分页了,如果再考虑有单元格上的段落文字,也需要分页的情况,那就更复杂了。
JCP针对上述问题,引入了自动分页功能,它可以很好地解决表格分页断线的问题,也可以解决行高不等表格的自动分页,另外,你也可以使用JCP有关分页的加强功能,比如,合并单元格表格分页、大单元格文字分页的问题,表头表尾保留,合计、本页小计等计算。
JCP即可以对表格元素<table>进行自动分页,也可以对HTML的其它容器对象,比如,<div>、<p>、<ul>等进行自动分页。
如果某个div页中的内容,需要自动分页,则只需要在该 div 上,设置控制样式类 breakable即可,如下所示:
1. <script>
2. var myDoc = {
3. documents : document,
4. copyrights : '杰创软件拥有版权 www.jatools.com'
5. };
6. getJCP().print(myDoc);
7. </script>
8.
9. <div id="page1" class="breakable"> 本页内容较多,有可能打印不下,请自动分页之,blablalbla...</div>
10. <div id="page2" > 不需要自动分页</div>
11. <div id="page3" class="breakable">请将我自动分页,blablalbla...</div>
没设置breakable样式类的page div,仍然按预分页方式打印,即如果有一页打印不下的部分,会被截去。
要自动分页,不需要在myDoc参数中作任何额外设置。
JCP总是检查 page div上的样式类,有则分之。
JCP的分页算法,总是尽可能地利用可打印区域:
可打印区域=打印纸张大小-边距-页眉高度-页脚高度