@lumincinta
2017-01-27T13:30:32.000000Z
字数 2335
阅读 289
CSS
显示器(screen)和打印机(printer)是两种差别很大的设备,所以从浏览器里看到的页面,打印出来也许和你看到的样子有很大的差距。screen一般使用逻辑单位比如px,而打印机则应该使用物理单位比如cm或in。我们常见的A4纸张大小在不同DPI的显示器上显示的大小是不同的。因此如果要精确的控制打印效果就应该使用print css,这是跨平台兼容的标准。不推荐使用浏览器插件方式实现打印。
web打印还有一种解决方式是生成pdf格式文件,客户端下载来打印,这也是不错的一种打印方式,因为pdf本身就是一种打印标准,可以做到精确控制。可以使用jsPDF在客户端动态生成pdf,也可以在服务器端使用一些组件生成pdf后传送给客户端。当然首选还是使用print css来实现打印。
html 代码:
<link rel="stylesheet" href="print.css" media="print" />
表明print.css样式表是用于打印的
css 代码:
@media print selector {...}
或者
css 代码:
@media print { selector{ ... }}
css文件中:
css 代码:@import url(print-style.css) print;
html文件中:
html 代码:
<style type="text/css">@import url(print-style.css) print;</style>
使用link标签要比使用@import规则性能更好。
显示时一般使用px,em或pt等逻辑单位,但在打印时要使用物理单位,比如cm或in(英寸)。对于常见的DPI(Dot Per Inch)为96的screen,px与cm的换算关系如下:
1 inch = 2.54 cm
1cm = 96/2.54 ≈ 37.80 px
1px = 2.54/96 ≈ 0.0265 cm
100px = 2.65 cm
A4纸的标准尺寸为:
21.0cm * 29.7 cm
在96DPI分辨率下,其对应的像素尺寸大约为:
794px * 1123px
因为不同的DPI下,其对应的像素尺寸是不同的,所以才要使用print css,使用物理单位来描述要打印的页面,这样打印效果就会一致了。
@page 规则用于指定打印页面的一些属性,包括纸张尺寸,方向,页边距,分页等特性。其语法如下:
css 代码:@
page :pseudo-class { size: A4 landscape; margin:2cm;}
其中伪类可以指定:
比如:
css 代码:
@media print { section {page-break-before: always;} h1 {page-break-after: always;} p {page-break-inside: avoid;}}
css 代码:
@media print { p {orphans:3; widows:2;}}
References:
[2]@page