jQuery打印指定区域Html页面并自动分页
最近项目中需要用到打印HTML页面,需要指定区域打印,使用jquery.PrintArea.js 插件 用法: $("div#printmain").printArea(); 但还是会打印DIV后面的内容,这里可以使用CSS控制打印分页 <div style="page-break-after: always;"></div> 有时用CSS控制分页了但还是会连续打印页面,这里就可以用上PrintArea 插件中的属性参数。 PrintArea部分源码: var modes = { iframe : "iframe",popup : "popup" }; var defaults = { mode : modes.iframe,popHt : 800,popWd : 800,popX : 200,popY : 200,popTitle : '',popClose : false,twoDiv : '',//自已扩展的属性,为满足变态需求 pageTitle: ''};//自已扩展的属性,为满足变态需求 可以看出插件中定义的属性格式为JSON,下面介绍部分属性 modes定义了两个属性,指定popup时会打开新窗口,可以视为打印预览页面,默认为iframe。 @popClose | [boolean] | (false),true 打印完成后是否开闭预览页面,默认为false(不关闭)。 $("div#printmain").printArea({mode:"popup",popClose:true}); 这样就可以指定DIV打印了。 下面说一下我新增两个属性的用途 pageTitle: 这两个参数都对应着页面中的DIV,如: <div id="pageTitle" style="display: none;"> 页面定义好后,我们看看插件中是如何处理我们的页面的。 writeDoc.open(); writeDoc.write(html); //打找一个窗口关写窗口中的HTML代码 writeDoc.close(); printWindow.focus(); printWindow.print(); 下面是生成html的代码 html+=docType() + "<html>" + getHead() + getBody(thisPage) + "</html>"; 插件中都定义了相义的方法,我没有做任何修改,这里我就不粘贴了。 下面是我的思路: 需在将一个DIV中的内容分成多页,且一行不跨多页,我们就得在生成html 代码上下功夫了。 首先找出DIV中的所有行,当公共表头加上这些行后高度达到一页,就需要分页了,这里就有可以一页中最后一行刚好跨了多页,将这一行保存下来,放到下一页。 每一页生成完成后都需要在HTML标签后面加上CSS分页标记,这样就打印机就会乖乖的分页。 有人可能明明预览只有4页,而打印出来总会多一页,这时你需要检验一下你生成的页面中分页标记是不是在HTML标签之前。 PS: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |