聊一聊浏览器打印 - window.print

本文详述了浏览器的window.print()方法在前端打印中的应用,包括打印样式设置、指定区域打印、分页控制及最佳实践。通过示例介绍了如何在React中优雅地实现打印功能,以及如何处理打印分页问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

一般信息填写类的需求页面,都会增设「预览」和「打印」功能。我们会通过编写 DOM 及样式来绘制出预览视图,而打印则是基于预览来生成 PDF 文件。

浏览器原生 API window.print() 可以用于打印当前窗口(window.document)视图内容。调用此方法会产生一个打印预览弹框,用户可以根据具体设置来得到打印结果。

接下来将从 code 层面带领大家熟悉「打印」的使用。

一、打印样式

默认情况下,基于页面上的内容,会将元素,布局和样式都进行打印;

如果仅想在打印上设置特殊样式,可以通过以下方式:

1.使用打印样式表:

<link href="print.css" media="print" rel="stylesheet" /> 

2.使用媒介查询:

@media print {p{color: lavender;background: #ccc;}h1{color: lightblue;background: #ccc;}
} 

3.使用内联 media 属性

<style media="print"> p{color: lavender;background: #ccc;}h1{color: lightblue;background: #ccc;} </style> 

默认情况下,元素的背景色不会被打印,可通过设置属性来支持:

div{// Chrome、Safari 等 webkit 浏览器内核-webkit-print-color-adjust: exact;// 火狐print-color-adjust: exact;color-adjust: exact;
} 

二、打印指定区域内容

默认情况下,调用 window.print() 会对整个 document.body 进行打印,当需要打印指定容器内容时,可以通过以下几种方式:

1. 对容器进行打印

<body><div id="container"><p>这是一个段落</p><h1>这是一个标题</h1></div><input type="button" value="打印此页面" onclick="printpage()" /><script> const printpage = () => {let newstr = document.getElementById("container").innerHTML;let oldstr = document.body.innerHTML;document.body.innerHTML = newstr;window.print();document.body.innerHTML = oldstr;} </script>
</body> 

2. 对容器内的部分内容进行打印

当只需要打印容器内某一部分内容时,可以通过注释标识进行截取。

<body><div i
浏览器控制台中,如果你想打印页面的特定区域,可以利用JavaScript来实现这个功能。通常,我们会创建个新的`HTMLCanvasElement`元素,并将需要打印的部分绘制到canvas上,然后再通过`window.print()`函数来打印canvas的内容。下面是个简单的步骤说明: 1. 首先,获取你需要打印的DOM元素,比如个div或者其他元素,可以用`document.getElementById()`、`.querySelector()`等方法选取。 ```javascript const targetArea = document.getElementById('your-target-area'); ``` 2. 创建个新的canvas元素并设置其宽度和高度等于目标区域的实际尺寸。 ```javascript const canvas = document.createElement('canvas'); canvas.width = targetArea.offsetWidth; canvas.height = targetArea.offsetHeight; ``` 3. 将目标区域的内容绘入canvas。这里需要用到`toDataURL()`方法转换为data URL,然后通过`drawImage()`方法画到canvas上。 ```javascript const ctx = canvas.getContext('2d'); ctx.drawImage(targetArea, 0, 0, canvas.width, canvas.height); ``` 4. 最后,调用`window.print()`,传入之前转换好的canvas的data URL作为print的范围。 ```javascript window.print(canvas.toDataURL()); ``` 注意:虽然上述步骤可以在某些场景下工作,但在生产环境中,直接使用`window.print()`可能会遇到些限制,因为它不是专门设计用于程序控制的。对于更复杂的布局或CSS渲染,可能需要借助第三方库或者服务来实现精确的区域打印
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值