// 导出页面为PDF格式
import html2canvas from 'html2canvas'
import JSPDF from 'jspdf'
export default {
install(Vue, options) {
Vue.prototype.exportSavePdf = (id, title)=> {
let element = document.getElementById(id)
html2canvas(element, {
logging: false
}).then(function (canvas) {
let pdf = new JSPDF('p', 'mm', 'a4') // A4纸,纵向
let ctx = canvas.getContext('2d')
let a4w = 170;
let a4h = 257 // A4大小,210mm x 297mm,四边各保留20mm的边距,显示区域170x257
let imgHeight = Math.floor(a4h * canvas.width / a4w) // 按A4显示比例换算一页图像的像素高度
let renderedHeight = 0
// 1、转换 canvas
var logo = document.getElementById("pdf-logo"); //放在页眉的图标
while (renderedHeight < canvas.height) {
let page = document.createElement('canvas')
page.width = canvas.width
page.height = Math.min(imgHeight, canvas.height - renderedHeight) // 可能内容不足一页
// 用getImageData剪裁指定区域,并画到前面创建的canvas对象中
page.getContext('2d').putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0)
console.log(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 10, a4w, Math.min(a4h, a4w * page.height / page.width))
//添加页眉的logo
pdf.addImage(logo, 'PNG', 0, 0,190,24);
pdf.addImage(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 24, a4w, Math.min(a4h, a4w * page.height / page.width)-20) // 添加图像到页面,保留10mm边距
//添加页脚,位置和内容自己决定
pdf.text(pdf.internal.getNumberOfPages().toString(), 100, 288);
renderedHeight += imgHeight
console.log(pdf.internal.getNumberOfPages())
if (renderedHeight < canvas.height) {
pdf.addPage()
} // 如果后面还有内容,添加一个空页
// delete page
}
pdf.save(`${title}-${new Date().getTime()}.pdf`)
})
}
}
}