基本上是如下两种:
1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了。对要求好的pdf这种方式真是不行啊! 2.调用浏览器自身的方法。window.print() 来打印(打印时可选下载),这种方式打印出来很清楚,但纯在浏览器兼容问题。 谷歌浏览器比较好用点。
两种导出pdf清晰度对比:
--------------第一张图 html2canvas + jspdf;-----------------------------------------------第二张图 window.print() 浏览器方式------------
方式一:html2canvas+jspdf
html2Canvas + jsPDF 导出普遍存在一个问题就是不太清楚的问题。目前我没有在网上找到合适 这种方式打印出清晰的PDF解决方案。
如果不是要求太高的这种方式还是可以用的。
这种方式实现的方法:
首先npm 下载两插件
npm i html2canvas jspdf --save-dev
在.vue文件中定义 要到导出 DOM 元素
<template>
<div class="pdf-demo">
<button @click="handleDown">jsPDF方式下载</button>
<button @click="handleWindowPrint( '#demo', '电子合同' )">浏览器方式下载</button>
<div id="demo" >
#demo 中的内容导出成 PDF
</div>
</div>
</template>
然后创建一个 htmlToPdf.js 文件 ,内容如下:
import html2canvas from 'html2canvas';
import JsPDF from 'jspdf';
/**
* @param ele 要生成 pdf 的DOM元素(容器)
* @param padfName PDF文件生成后的文件名字
* */
function downloadPDF(ele, pdfName){
let eleW = ele.offsetWidth;// 获得该容器的宽
let el