您好,欢迎访问一九零五行业门户网

jQuery打印指定区域Html页面并自动分页_jquery

最近项目中需要用到打印html页面,需要指定区域打印,使用jquery.printarea.js 插件
用法:
$(div#printmain).printarea();
但还是会打印div后面的内容,这里可以使用css控制打印分页

有时用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打印了。
下面说一下我新增两个属性的用途
twodiv:
需要打印的第二个div ,当然会是第二页,这个页面比较长,需要自动分页,并且表格中每行都不一样,有些行跨了多行,这里打印出来,一行可能会打印在两张纸上。
pagetitle:
第二个div分成多页里,每一页的表头都需要一样,这个参数就是公用表头。
这两个参数都对应着页面中的div,如:

页面定义好后,我们看看插件中是如何处理我们的页面的。
writedoc.open(); writedoc.write(html); //打找一个窗口关写窗口中的html代码 writedoc.close(); printwindow.focus(); printwindow.print();
下面是生成html的代码
html+=doctype() + + gethead() + getbody(thispage) + ;
插件中都定义了相义的方法,我没有做任何修改,这里我就不粘贴了。
下面是我的思路:
需在将一个div中的内容分成多页,且一行不跨多页,我们就得在生成html 代码上下功夫了。
首先找出div中的所有行,当公共表头加上这些行后高度达到一页,就需要分页了,这里就有可以一页中最后一行刚好跨了多页,将这一行保存下来,放到下一页。
每一页生成完成后都需要在html标签后面加上css分页标记,这样就打印机就会乖乖的分页。
说明一下,生成的预览页面一页就是一个html页面,它有对应的表头与dtd信息。
有人可能明明预览只有4页,而打印出来总会多一页,这时你需要检验一下你生成的页面中分页标记是不是在html标签之前。
分面标记一定要在html标签之后,这样可解决打印多打一页问题。
ps:
下面我会传上我修改过后的js插件,由于我项目周期的原因,代码中很多部分都是写死了,只是为了解决本次打印的问题。所在代码中写得很乱,希望大家将究着看
同事也希望哪位能够再优化一下,使之通用。
其它类似信息

推荐信息