JS获取DPI解决打印页面像素计算问题
一般电脑默认96DPI或72DPI,JS可以通过以下方法获取DPI的值:
function get_dpi() {
for (var i = 56; i < 2000; i++) {
if (matchMedia("(max-resolution: " + i + "dpi)").matches === true) {
return i;
}
}
}
有了DPI值就可以计算出毫米与像素之间的等值:
1毫米=DPI/25.4
因为DPI为每英寸内的像素点数,1英寸=25.4mm,所以DPI除以25.4就是1毫米的像素数。
根据以上,我们可以计算96DPI下的A4纸页面像素大小:
宽:210mm×(96/25.4)≈794px
高:297mm×(96/25.4)≈1123px
注意计算得到的结果是向上取整的,因此,如果指定页面的高度为1123px,打印时会显示2页,即多出一个空白页。
最好的办法还是在JS中为打印页面指定高度:
height = 297*(DPI/25.4)
有了毫米与像素的单位换算,以及页面的宽度、高度像素,就可以非常精确的控制打印页面样式了,实际上就是在编写一个宽794px和高1123px的页面。
注意:浏览器打印页面可以设置边距,默认情况下是有边距的,我们可以使用打印样式设置这个边距,从而将打印边距的控制权也掌握在自己手里。
@page {
size: A4 portrait;
margin: 0;
}
以上CSS样式设置打印页面大小为A4纸,纵向打印,横向打印为landscape,margin属性指定页边距。