主要是为了打印 <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。
直接用PrinterJob的print方法可以的不过查找加载打印机的速度很慢,有时可能要好几分钟,如果单线程就会出现卡死的情况,程序运行时先建一个后台线程去加载设置打印机就好了。如果是web的话可以弹出一个新的窗口在窗口里显示需要打印的图片,再用window.print()打印窗口内容就行了。
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>