js调用iframe实现打印页面指定内容的方法

本文介绍了一种使用JavaScript和HTML实现页面区域打印的方法。不同于传统的页面打印功能,这种方法可以在打印后保留页面原始状态。通过简单的代码示例展示了如何利用原生JS和jQuery实现这一功能。

1、程序说明

1) 此程序可以实现选择页面中的区域进行打印,以iframe方式进行打印;

2) 与原生态的print() 区别在于,取消打印页面后可以完整保留当前访问页面的内容。

2、代码部分

1) JS 函数:

function do_print(id_str)//id-str 打印区域的id
{
var el = document.getElementById(id_str);
var iframe = document.createElement('IFRAME');
var doc = null;
iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;');
document.body.appendChild(iframe);
doc = iframe.contentWindow.document;
// 引入打印的专有CSS样式,www.111Cn.net根据实际修改
doc.write("<LINK rel="stylesheet" type="text/css" href="css/print.css">");
doc.write('<div>' + el.innerHTML + '</div>');
doc.close();
iframe.contentWindow.focus();
iframe.contentWindow.print();
if (navigator.userAgent.indexOf("MSIE") > 0)
{
     document.body.removeChild(iframe);
}

2) HTML:


// 打印区域:
<div id="print_box">
......
</div>
// 调用打印
<button onclick="javascript:do_print('print_box');">打印</button>
  1. 测试

点击页面上的打印按钮,即可测试打印;

除了上面方法我们还可以通过jquery来实例,代码如下:

<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>

如果要实现区域打印我们可尝试下面方法

下面本文分享一种超简单的方法实现页面的打印功能,不仅可以打印整个页面,还可以打印页面某块区域:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript">
function printdiv(printpage){
 var headstr="<html><head><title></title></head><body>";
 var footstr="</body>";
 var newstr=document.all.item(printpage).innerHTML;
 var oldstr=document.body.innerHTML;
 document.body.innerHTML=headstr+newstr+footstr;
 window.print(); 
 document.body.innerHTML=oldstr;
 return false;
}
</script>
<title>div print</title>
</head>
<body>
<input type="button" onClick="printdiv('div_print');" value=" 打印 ">
<div id="div_print">
<h1 style="Color:Red">被打印区域:www.jb51.net</h1>
</div>
这块区域是打印不到的!
</body>
</html>

转载自:https://teakki.com/p/57e106eddafc6eb617b2ad66

<think>好的,用户想了解如何用JavaScript或CSS实现网页打印指定内容。我需要结合之前提供的引用信息来整理方法。首先,记得用户需要具体的代码示例,所以得分成几种常见的方法。 第一种方法可能是用CSS控制隐藏不需要打印的部分。引用[1]和[3]提到使用@media print和设置.noprint类的visibility或display属性。这样可以简单地在打印时隐藏某些元素,比如按钮或导航栏。需要给不打印的元素添加class,并在CSS中定义@media print的样式。 第二种方法JavaScript动态替换内容。引用[2]和[4]中的例子,通过获取指定区域的HTML,替换整个body的内容,然后调用window.print(),打印后再恢复原内容。这种方法比较灵活,特别是处理复杂结构时,但要注意还原页面状态,避免脚本错误。 第三种方法可能是使用注释标记打印区域,如引用[2]里的startprint和endprint。通过截取这两个注释之间的内容来生成打印页面,这种方法需要前后端配合或者特定的标记,可能适用性较窄。 还需要考虑不同方法的优缺点。比如CSS方法简单,但可能无法处理复杂的布局或自适应纸张大小;JavaScript方法更灵活,但可能破坏页面状态,需要小心处理恢复。另外,引用[4]提到使用iframe的情况,可能会影响CSS的效果,这时候可能需要其他处理方式。 用户可能需要知道各种方法的适用场景,比如小范围隐藏用CSS,精确控制内容JS替换。同时要提醒注意页面还原和样式问题,比如打印时的字体、边距等可能需要额外调整。 最后,确保回答结构清晰,分点说明每种方法的步骤和示例代码,并给出相关问题和引用来源。还要验证代码的正确性,比如检查是否有语法错误,比如引用[2]中的代码是否闭合标签,函数逻辑是否正确。</think>### 如何通过JavaScript/CSS实现网页指定内容打印 #### 一、CSS控制局部打印(简单场景) **原理**:通过`@media print`媒体查询隐藏非打印元素 **步骤**: 1. 定义打印样式表 ```html <style media="print"> .noprint { display: none !important; } /* 可选:调整打印内容的通用样式 */ body { font-size: 12pt; margin: 20mm; } </style> ``` 2. 标记页面元素 ```html <div class="content">这是需要打印内容</div> <button class="noprint">打印按钮</button> ``` 3. 添加打印触发 ```html <button onclick="window.print()">打印</button> ``` **优点**:实现简单,不破坏页面结构[^1][^3] **局限**:无法处理跨区域内容组合 --- #### 二、JavaScript动态替换内容(精确控制) **原理**:临时构建打印专用DOM **代码示例**: ```javascript function printSpecificContent(selector) { const originalContent = document.body.innerHTML; const printContent = document.querySelector(selector).outerHTML; document.body.innerHTML = ` <!DOCTYPE html> <html> <head> <title>打印文档</title> <link rel="stylesheet" href="/print-styles.css"> </head> <body>${printContent}</body> </html> `; window.print(); document.body.innerHTML = originalContent; // 必须还原页面 } ``` **调用方式**: ```html <button onclick="printSpecificContent('#report')">打印报表</button> ``` **关键点**: 1. 通过`outerHTML`获取包含自身标签的内容 2. 必须还原原始页面防止功能异常[^2][^4] 3. 可附加专用打印样式表 --- #### 三、iframe打印技术(复杂场景) **适用场景**:需要完全隔离打印内容样式 **实现代码**: ```javascript function printIframe(content) { const iframe = document.createElement('iframe'); iframe.style.display = 'none'; document.body.appendChild(iframe); const doc = iframe.contentWindow.document; doc.open(); doc.write(content); doc.close(); iframe.contentWindow.focus(); iframe.contentWindow.print(); setTimeout(() => iframe.remove(), 1000); // 延迟删除确保打印完成 } ``` --- #### 四、对比与选择建议 | 方法 | 优点 | 缺点 | 适用场景 | |-----------|---------------------|---------------------|--------------------| | CSS控制 | 零JS、性能最佳 | 无法重组内容 | 简单隐藏元素 | | JS替换 | 完全控制内容结构 | 需要处理页面还原 | 精确内容提取 | | iframe | 样式完全隔离 | 实现复杂 | 需要特殊打印格式 | | 插件方案(未展示) | 支持分页控制等高级功能 | 依赖第三方库 | 企业级复杂报表 | --- #### 常见问题解决方案 1. **样式失真**:创建专用打印CSS文件,使用`mm`单位定义尺寸 2. **分页控制**: ```css @media print { .page-break { page-break-after: always; break-after: page; } } ``` 3. **图片模糊**:确保图片使用矢量格式或300dpi以上的位图
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值