前端导出网页内容至PDF。
要用到两个库:

  1. html2canvas:  将网页内容转换为canvas
  2. jspdf:  将canvas生成的图片转换为PDF文件

先用html2canvas将要打印的内容转换为canvas

将返回的canvas对象转为图片对象

将图片根据要打印的纸张尺寸裁剪出来

总结:

  1. 必须加入dpr计算,否则视网膜屏上会显示不完整
  2. 要打印背景色,需要添加:-webkit-print-color-adjust: exact;
  3. 每次分页裁剪都重叠一小部分,避免一行文字被分别打印到两张纸的情况发生
  4. 使用opacity属性是打印不出来的,如果要半透明的色彩,需要使用rgba
  5. 浏览器自带的打印功能也可以导出pdf文件,使用@media print{ } 来定制打印样式
  6. 裁剪分页有更完美的方法,循环判断内容区块是否正处于分页处,如果处于分页处则提前分页,因为感觉有点麻烦所以没有这么写