$("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、在视图中,将页面设置为“分页预览” 2、将蓝色实线边框内的虚线,拉倒边框上。 3、点击“打印预览”查看效果,已经显示为一页了。主要是为了打印 <pre>里面的内容,为了方便使用,现在把它写成了一个 prototype 形式的 jQuery 插件,支持当前 5 大浏览器。
【插件】
(function($) {
$.fn.printMe = function(text_only) {
// 获取元素内容
var content = text_only ? $(this).text() : $(this).html()
// 在页面创建 iframe
$("body").append('<iframe id="iframe-print" style="display: none"></iframe>')
// 获取 iframe window
var ifrm = $("#iframe-print")[0].contentWindow
// 将内容写入 iframe
ifrm.document.write(content)
// IE
if(navigator.userAgent.match(/MSIE/)) {
ifrm.document.execCommand("print", false, null)
}
// Opera
else if(navigator.userAgent.match(/Opera/)) {
// Opera 需要打开新窗口
var printWin = window.open(""), printDoc = printWin.document
printDoc.open()
printDoc.write('<!DOCTYPE html><html><head></head><body onload="window.print()window.close()">' + content + '</body></html>')
printDoc.close()
}
// Firefox/Chrome/Safari/其它浏览器
else {
ifrm.print()
}
// 释放 cache
ifrm = null
// 移除 iframe
$("#iframe-print").remove()
}
})(jQuery)
【用法】
$( 要打印的元素 ).printMe( 只打印text选项 )
要打印的元素:指定 id 或 class,也就是你说的要打印的指定区域。
只打印text选项:如果指定为 true 或 1,将会把指定元素内的 html 全部忽略,也就是打印区域内的 .text()。默认为 false,也就是打印区域内的 .html()。
【实例 1】
$("#print_div").on("click", function() {
$("#div").printMe()
})
<div id="div"><p style="color: #f00">文字段落</p><em>斜体文字</em></div>
<a id="print_div">打印 div 中的 html</a>
此例将打印 div 中的 p 和 em。
【实例 2】
$("#print_div_text").on("click", function() {
$("#div").printMe(1)
})
<div id="div"><p style="color: #f00">文字段落</p><em>斜体文字</em></div>
<a id="print_div_text">打印 div 中的 text</a>
此例将忽略 div 中的 p 和 em,只打印 text。