分页打印网页怎么做?js或者jquery

JavaScript039

分页打印网页怎么做?js或者jquery,第1张

用法:

$("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打印了。

下面说一下我新增两个属性的用途

twoDiv:

需要打印的第二个DIV ,当然会是第二页,这个页面比较长,需要自动分页,并且表格中每行都不一样,有些行跨了多行,这里打印出来,一行可能会打印在两张纸上。

pageTitle:

第二个DIV分成多页里,每一页的表头都需要一样,这个参数就是公用表头。

这两个参数都对应着页面中的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分页标记,这样就打印机就会乖乖的分页。

说明一下,生成的预览页面一页就是一个HTML页面,它有对应的表头与DTD信息。

有人可能明明预览只有4页,而打印出来总会多一页,这时你需要检验一下你生成的页面中分页标记是不是在HTML标签之前。

分面标记一定要在HTML标签之后,这样可解决打印多打一页问题。

你这个和JS没关系,是CSS控制的内容,

比如footer后打印分页

@media print {

footer {page-break-after: always}

}

另外CSS即使没有分页,如果页面满了也会自动分页或者截断,这个控制不了的。

1、js实现(可实现局部打印)

[html] view plain copy

<input id="btnPrint" type="button" value="打印" onclick="javascript:window.print()" />

<input id="btnPrint" type="button" value="打印预览" onclick=preview(1) />

<style type="text/css" media=print>

.noprint{display : none }

</style>

<p class="noprint">不需要打印的地方</p>

<script>

function preview(oper)

{

if (oper <10)

{

bdhtml=window.document.body.innerHTML//获取当前页的html代码

sprnstr="<!--startprint"+oper+"-->"//设置打印开始区域

eprnstr="<!--endprint"+oper+"-->"//设置打印结束区域

prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18)//从开始代码向后取html

prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr))//从结束代码向前取html

window.document.body.innerHTML=prnhtml

window.print()

window.document.body.innerHTML=bdhtml

} else {

window.print()

}

}

</script>

<p>XXXXX</p>

<!--startprint1-->要打印的内容<!--endprint1-->

再加个打印按纽 onclick=preview(1)

2、调用windows底层打印,报安全警告,不建议使用(不支持局部打印)

[html] view plain copy

<HTML>

<HEAD>

<TITLE>javascript打印-打印页面设置-打印预览代码</TITLE>

<META http-equiv=Content-Type content="text/htmlcharset=gb2312" />

<SCRIPT language=javascript>

function printsetup(){

// 打印页面设置

wb.execwb(8,1)

}

function printpreview(){

// 打印页面预览

wb.execwb(7,1)

}

function printit()

{

if (confirm('确定打印吗?')) {

wb.execwb(6,6)

}

}

</SCRIPT>

</HEAD>

<BODY>

<DIV align=center>

<OBJECT id=wb height=0 width=0

classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 name=wb></OBJECT>

<INPUT onclick=javascript:printit() type=button value=打印 name=button_print />

<INPUT onclick=javascript:printsetup()type=button value=打印页面设置 name=button_setup />

<INPUT onclick=javascript:printpreview()type=button value=打印预览 name=button_show />

一按开始的减肥了卡时间段

</DIV>

</BODY>

</HTML>

3、jQuery实现(支持局部打印)

[html] view plain copy

<script type="text/javascript" src="jquery-1.4.2.min.js"></script>

<script type="text/javascript" src="jquery.PrintArea.js"></script>

<script>

$(document).ready(function(){

$("input#biuuu_button").click(function(){

$("div#myPrintArea").printArea()

})

})

</script>

<input id="biuuu_button" type="button" value="打印"></input>

<div id="myPrintArea">.....文本打印部分.....</div>