Chrome可直接将网页保存(打印)为PDF(无需安装Adobe)
Chrome在保存为PDF文件时,默认纸张大小是A4。若布局为纵向,显示大小为210mm×297mm;若布局为横向,显示大小为297mm×210mm。
Windows下的网页打印的默认DPI为96dpi。按照1英寸=25.41mm换算,A4纸张可实际显示的像素宽度为794px×1123px,即打印网页的宽度为794px。
实际打印还会有页边距,如果页边距为5mm(窄边距),网页内容最大宽度约750px,若页边距为19mm(默认边距),网页内最大元素分辨率约650px。
基于此,很多网页在打印时会变形,因为打印时内容容器的宽度只有750px或者650px,但现在的网页内容大多都是基于至少1000px以上宽度设计的,这时候浮动容器会错位、超过宽度的图片和表格会显示不完全。
解决办法有两个。
其一,锁定网页的宽度。
当网页宽度被指定时,页面将被自动缩放。这可以保证PDF文件和浏览器上显示的效果一模一样。这时候打印出的PDF文件仍是A4大小。
其二,指定打印纸张大小。
@media print {@page {size: 210mm 297mm; /* or size: 794px 1123px; */size: 297mm 420mm; /* or size: 1123px 1588px; */}
}
原文:http://www.yujianlong.com/qianduan/7.html
第一种方法没有试验过,我是使用的第二种方法:
/* 通过分别设置左页和右页不同的左右页面距,为装订边留出更多的空间 */@media print {@page {size: 1800px 1800px; /* or size: 1123px 1588px; */}/* 设置 body 元素的 margin 来保证打印出来的页面带有外边距 */body {margin: 1cm;}}
我在做项目时用到的调用浏览器打印的方法。
function Print(){//根据div标签ID拿到div中的局部内容var newStr=document.getElementById("opt-content").innerHTML;var oldStr=document.body.innerHTML;//把获取的局部div内容赋给body标签, 相当于重置了 body里的内容document.body.innerHTML=newStr;//调用打印功能window.print();//重新给页面内容赋值;document.body.innerHTML=oldStr;return location.reload();}
调用浏览器打印会比一般打印的方法简单很多。Return location.reload在这里是刷新的意思,如果没有这句代码打印完后要重新刷新一次网页才能再次打印
思路:先用一个div把要打印的页面包裹起来,再将打印的部分转换成HTML格式,然后触发打印事件