1、安装
npm install --save html2canvas
npm install jspdf --save
2、创建一个htmlToPdf.js文件
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {
install(Vue, options) {
reportName 下载时候的标题
Vue.prototype.getPdf = function (reportName) {
return new Promise((resolve, reject) => {
let title = reportName
html2Canvas(document.querySelector('#pdfDom'), {
allowTaint: true,
scale: 2,
height: document.getElementById('pdfDom').scrollHeight,
windowHeight: document.getElementById('pdfDom').scrollHeight + 80
}).then((canvas) => {
let contentWidth = canvas.width * 2
let contentHeight = canvas.height * 2
let pageHeight = contentWidth / 592.28 * 841.89
let leftHeight = contentHeight
let position = 0
let imgWidth = 595.28
let imgHeight = 592.28 / contentWidth * contentHeight
let pageData = canvas.toDataURL('image/jpeg', 1.0)
let PDF = new JsPDF('', 'pt', 'a4')
if (leftHeight < pageHeight) {
PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
} else {
while (leftHeight > 0) {
PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
leftHeight -= pageHeight
position -= 841.89
if (leftHeight > 0) {
PDF.addPage()
}
}
}
PDF.save(title + '.pdf')
let pdfData = PDF.output('datauristring')
resolve(pdfData)
}
)
})
}
}
}
3、在main.js中使用我们封装的htmlToPdf.js
import htmlToPdf from '@/utils/htmlToPdf'
Vue.use(htmlToPdf)
4、页面中使用
<div class="row" id="pdfDom">
//需要导出的页面部分 定义id为"pdfDom"
</div>
<button @click="downloadPdf()">导出PDF</button>
downloadPdf(){
this.downloading = true
window.pageYoffset = 0;
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
document.getElementById('pdfDom').scrollTop = 0
this.$nextTick(() => {
setTimeout(() => {
this.getPdf(this.qualityTitle).then((res) => {
this.downloading = false
});
}, 1000);
});
},