`
lsjlym
  • 浏览: 21600 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

打印Web页面局部内容的两种常用方法

 
阅读更多
在Web前端开发中,常有仅需要打印页面局部内容的要求。总的来说,有两种方法可以实现此目标:

一、使用css方式
示例代码:
<style type="text/css">
.selector1 { ... }
.selector2 { ... }
.selector3 { ... }

/* 为打印定义 */
@media print
{
.selector1 { ... }
.selector2 { display: none; }
.noprint { display: none; }
}
</style>
代码说明:
1、选择器selector1在@media print中重新定义,浏览器显示使用外边的selector1,打印时使用@media print定义的selector1;
2、选择器selector2在@media print中重新定义,浏览器显示使用外边的selector2,打印时使用@media print定义的selector2,因此处包含display: none,所以所有class包含selector2的元素将不会打印出来;
3、选择器selector2在@media print中没有重新定义,浏览器显示和打印时,将使用相同的样式设置。
4、选择器noprint只在@media print中定义,所以浏览器显示时不会起作用,只在页面打印时应用其设置的样式。
利用此特性,可以实现页面的局部打印功能。

二、使用javascript方式
示例目标打印页面Target.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>打开打印预览页面Preview.html</title>
<script>
// 打开打印预览页面,传递打印内容
function preview() {
// 以JSON对象为showModalDialog函数的第二个参数,
// 以传递任何对象或字符串(包括有效的HTML格式内容)到打开的模态打印预览对话框
window.showModalDialog('Preview.html', {
styles: document.styleSheets,
header: '<font size="36px">测试</font>',
content: document.getElementById('待打印dom元素的id')
}, null);
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="Target.html">
<input id="preview" type="button" value="打印" onclick="preview();" />
<div>
无需打印内容
</div>
<div id="待打印dom元素的id">
此处可以是任何数量和复杂程度的,待打印的有效HTML内容!
</div>
<div>
无需打印内容
</div>
</form>
</body>
</html>

打印预览页面Preview.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script>
// 初始化页面大小
window.resizeTo(window.screen.availWidth, window.screen.availHeight);
window.moveTo(0, 0);
</script>
</head>
<body>
<div id="header">
</div>
<div id="content">
</div>
<div id="footer">
</div>
<script>
// 添加和返回一个style元素帮助函数
function addNewStyle() {
var head, style;
//
head = document.getElementsByTagName('head')[0];
style = document.createElement('style');
style.type = 'text/css';
head.appendChild(style);
//
return style;
}

// 获取传递的参数
var args = window.dialogArguments;
// 确保目标页面定义的样式可以传递到打印预览页面。
// 如果不需要,打印预览页面无需定义打印内容的样式,使用源页面定义样式
if (args.styles) {
for (var i = 0; i < args.styles.length; i++) {
var style = addNewStyle();
//
var styleText = '';
for (var j = 0; j < args.styles[i].rules.length; j++) {
var rule = args.styles[i].rules[j];
styleText += rule.cssText;
}
//
if (style.styleSheet) style.styleSheet.cssText = styleText;
else style.appendChild(document.createTextNode(styleText));
}
}
// 如果定义header则打印
if (args.header)
document.getElementById('header').innerHTML = args.header;
// 如果定义content则打印
if (args.content) {
if (typeof (args.content) == 'string')
// 直接传递有效HTML内容
document.getElementById('content').innerHTML = args.content;
else
// 传递待打印的DOM元素
document.getElementById('content').innerHTML = args.content.outerHTML;
}
// 如果定义footer则打印
if (args.footer)
document.getElementById('footer').innerHTML = args.footer;
// 不需要打印预览,反注释下面代码可实现直接打印
// window.print();
// window.close();
</script>
</body>
</html>


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    千方百计笔试题大全

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    组态软件开发平台SuperCxHMI.zip

    图库由符号和模块两种不同形式的复合元素组成。 符号和模块均能由用户创建并进行管理。 支持用户扩展符号属性。 用户制作好的符号可以直接拖放到符号库中保存。 可以把制作好的画面以模块...

    java面试宝典

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    word使用技巧大全

    51、Word的两种水印 90 52、Word中画直线及精确调整图形的技巧 90 53、在Word文本框间创建“文字流” 91 54、迅速得出Word表格的行列数 91 55、我用Word来拆字 91 56、批量写贺卡和信封 91 57、Word中巧输星期 91 58...

    C#编程经验技巧宝典

    111 &lt;br&gt;0184 如何在ASP.NET中获取文件的扩展名 111 &lt;br&gt;0185 如何在ASP.NET中用URL在页面之间传值 112 &lt;br&gt;0186 如何使用IsPostBack实现ASP.NET页面加载 112 &lt;br&gt;0187 如何利用输出缓存技术缓存...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP的...

    freemarker总结

    运算符的用法有如下两种: variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型...

    c#学习笔记.txt

    如前所述,我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同,可是几个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论,最终选择了C#,请不要问我为何做出这样的选择,很多人认为...

    Delphi开发范例宝典目录

    实例244 两种信息发送方式 310 实例245 使用线程添加数据 312 实例246 功能快捷键 314 第7章 注册表 317 7.1 操作注册表 318 实例247 怎样存取注册表信息 318 实例248 注册表保存注册信息 319 实例...

Global site tag (gtag.js) - Google Analytics