1、安装组件
yarn add html2canvas
yarn add jspdf
2、 编写 htmlToPdf.js
import html2canvas from "html2canvas"
import JsPDF from "jspdf"
export default {
install(Vue, options) {
Vue.prototype.getPdfFromHtml = function(ele, pdfFileName) {
let eleW = ele.offsetWidth
let eleH = ele.scrollHeight
let eleOffsetTop = ele.offsetTop
let eleOffsetLeft = ele.offsetLeft
var canvas = document.createElement('canvas')
var abs = 0
let win_in = document.documentElement.clientWidth || document.body.clientWidth
let win_out = window.innerWidth
if (win_out > win_in) {
abs = (win_out - win_in) / 2
}
canvas.width = eleW * 2
canvas.height = eleH * 2
var context = canvas.getContext('2d')
context.scale(2, 2)
context.translate(-eleOffsetLeft - abs, -eleOffsetTop)
html2canvas(ele, {
dpi: 300,
useCORS: true
}).then(canvas => {
var contentWidth = canvas.width
var contentHeight = canvas.height
var pageHeight = (contentWidth / 592.28) * 841.89
var leftHeight = contentHeight
var position = 0
var imgWidth = 595.28
var imgHeight = (595.28 / contentWidth) * contentHeight
var pageData = canvas.toDataURL('image/jpeg', 1.0)
var pdf = new JsPDF('', 'pt', 'a4')
if (leftHeight < pageHeight) {
pdf.addImage(pageData, 'JPEG', 5, 0, imgWidth, imgHeight)
} else {
while (leftHeight > 0) {
pdf.addImage(pageData, 'JPEG', 5, position, imgWidth, imgHeight)
leftHeight -= pageHeight
position -= 841.89
if (leftHeight > 0) {
pdf.addPage()
}
}
}
pdf.save(pdfFileName + '.pdf')
})
}
}
}
3、main.js
import htmlToPdf from "@/utils/htmlToPdf"
Vue.use(htmlToPdf)
4、组件应用
mounted(){
this.downloadSprintTestReport();
},
methods: {
downloadSprintTestReport(){
this.getPdfFromHtml(document.querySelector('.repair-wrap'),'报告');
},
}