记录一下html2canvas+jspdf

// 导出页面为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`)
            })
        }
    }
}

  

posted @ 2023-02-22 09:58  Aaron英语不好  阅读(16)  评论(0编辑  收藏  举报