浏览器打印方案

浏览器,打印,方案 · 浏览次数 : 940

小编点评

**1.媒体查询隐藏元素** 通过媒体查询 hideElement 属性,将无关元素隐藏,只显示需要打印的内容。 **2.复制元素到iframe** 遍历元素和所有子元素,克隆 dom 到一个新的 iframe,然后在 iframe 中发起打印。 **3.设置页面尺寸** 使用 @page media 属性设置页面大小和方向,支持单独设置 A4、A3 等。

正文

前言

在web端打印是比较常见的需求,实际工作中也接触了不少,在这里对工作中用到的做一下总结

1.通过媒体查询隐藏元素

通过style标签内联引入,或者使用媒体查询media="print"外链样式表。然后将无关元素隐藏,只将需要打印的内容展示出来;这时候需要专门写一套打印样式,页面修改,打印样式可能也需要修改,维护成本较高;

<style>
  @media print{}
</style>
// 或者
<link rel="stylesheet" media="print" href="print.css”>

2.将需要打印的元素复制到一个iframe中

需要遍历元素和所有子元素,克隆dom到新的iframe,然后在ifram中发起打印。关键技术点是要把样式完整复制过去;jquery.print.js; react-to-print就是这样实现;
例子

这种方案的好处是适用性强,缺点就是实现难度大;

3.打印页面设置

支持@page 来设置,同时支持 伪类 :left 、:right、:first

  1. :left设置多页打印的时候偶数页的配置;
  2. :right设置多页打印的时候奇数页的配置;
  3. :first 设置第一页的配置
页面宽度

打印常用的是A4纸,A4纸尺寸是21cm×29.7cm,在css中可以使用size属性设置

size属性设置页面大小和方向:

  1. 支持单独设置 A4、A3等 , 默认是纵向
  2. 支持单独portrait、landscape;纸张大小默认是关键词letter;
  3. 也支持 A4、A3 和 portrait、landscape关键词组合: A4 landscape;
  4. 也支持直接设置页面尺寸,比如:21cm 29.7cm,代表页面宽高分别为21cm和29.7cm
  5. 未设置size属性,可以在打印预览选择纸张大小和方向;设置之后就不能再选择了。

例子

页面的边距
  1. margin属性设置页面的边距 : 不支持 em 和 ex;
  2. 默认的打印会带有页眉页脚。页眉包括日期、title,页脚包括链接和分页等信息。 可以通过 margin 设置边距达到隐藏页眉页脚的目的
@page {
    margin: 3.7cm 2.6cm 3.5cm;  /* 上下左右边距 */
}
@page :left {
    margin-left: 2.5cm;
    margin-right: 2.7cm;
}
@page :right {
    margin-left: 2.7cm;
    margin-right: 2.5cm;
}
@page :first {
    size: A4 portrait;
    margin-left: 4cm;
    margin-right: 4cm;
}

/* 隐藏页眉 */
@page { margin-top: 0; }

/* 隐藏页脚 */
@page { margin-bottom: 0; }
使用绝对物理单位

使用pt、mm、cm等绝对单位

分页

打印的时候如果页面很长就会自动分页,如果我们希望分页不要把一些元素分开,可以给元素设置break-inside: avoid;
不过可能会留下空白。

浏览器兼容性
  1. firefox
    1. 不支持size属性
    2. 可以在打印预览设置纸张和打印方向
  2. safari
    1. 不支持@page
    2. 可以在打印预览设置纸张和打印方向

调启打印预览

window.print() 、document.execCommand('print’) 、页面右键菜单打印、command+p

与浏览器打印方案相似的内容:

浏览器打印方案

前言 在web端打印是比较常见的需求,实际工作中也接触了不少,在这里对工作中用到的做一下总结 1.通过媒体查询隐藏元素 通过style标签内联引入,或者使用媒体查询media="print"外链样式表。然后将无关元素隐藏,只将需要打印的内容展示出来;这时候需要专门写一套打印样式,页面修改,打印样式可

使用 JS 实现在浏览器控制台打印图片 console.image()

在前端开发过程中,调试的时候,我门会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.im...

vue项目中发布新版本线上自动清缓存

背景 最近项目更新频繁,每次一更新客户都说还跟之前的一样。一查原因是因为客户没有清空浏览器的缓存。所以为了方便客户看到最新版本,开始调研再发布新版本后自动清理缓存。 方案 每次打包后的js和css都加上hash值后缀。当文件发生改变时,hash值也改变。这样就不会走缓存 举个例子 vue.confi

浏览器开发者工具打开检测

目录 方法一console.log 方法二: debugger 方法三:console.table 方法四:内容宽度 总结 方法一console.log 在safari中,如果打开了控制台,console.log打印日期实例、函数实例、正则实例会触发两次toString方法,那么可以重写toStri

提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件

Chrome插件,官方名称extensions(扩展程序);为了方便理解,以下都称为插件。 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开开发者模式。点击"加载已解压的拓展程序,选择项目文件夹,就可将开发中的插件加载进来。 插件是基于We

[转帖]chrome 查看已经保存的密码

方法/步骤 1 点击浏览器工具栏右上角的三个竖点的菜单图标 2 在弹出来的菜单列表中点击打开“设置” 3 在设置界面点击左侧的“自动填充” 4 接着在右侧找到“已保存的密码”,在其下方找到需要查看的网站密码 5 点击密码后面的眼睛的图标 6 在弹出的窗口中输入电脑的登录密码,点击下方的“确定”即可查

提前预体验阿里大模型“通义千问”的方法来了!

随着AI大模型的浪潮席卷全球,如今的AI技术已经颠覆了大家对传统AI的认识,微软更是用浏览器与搜索引擎上的实践,证明了当今的AI技术具备打破行业格局的能力。 对于我们应用开发者来说,AI基建的建设与竞争是无法参与的,但在AI的应用领域依然大有可为!目前,国内各大科技公司已经陆续推出了各自的AI大模型

浏览器打开JupyterLab后所有快捷键与窗口按键均失效怎么办?

本文介绍JupyterLab中菜单栏按钮无法点击、快捷键无法执行问题的解决办法。 近期打开JupyterLab后,发现其中菜单栏按钮无法点击,快捷键也均无法执行。如图,红框内的按钮点击均无任何反应。 为解决这一问题,首先尝试关闭VPN、浏览器代理设置等,均不奏效。随后,在搜索时看到Stack Ove

[转帖]Jmeter 压测中配置https证书

本文章 主要介绍证书的获取、处理、配置到jmeter中。 1. 获取证书 首先:谷歌浏览器 打开网站,点击 地址栏的锁(表示https),选择 “证书” “隐私、搜索和服务” “管理证书” 点击 上图中的“管理证书”后,打开如下窗口: 在中间的证书列表中找到需要导出的证书,点击“导出”按钮。 在新打

RT-Thread Studio使用教程

介绍 RT-Thread Studio是官方出品的一款专门针对RT-Thread嵌入式开发、部署、调试、测试的集成开发环境,它基于Eclipse开源项目开发,极大的提高了嵌入式开发者的开发效率,目前最新版本是2.26 下载 使用浏览器打开RT-Thread官网,选择左上角资源点击RT-Thread