前端通过html2canvas将dom节点生成对应的PDF

项目中有一项批阅需求,需要前端将学生的考试报告和老师的批阅生成PDF,然后上传到后端,提供打包下载,也可以单独下载.

1.将这两行代码复制到项目package.json文件中,然后npm i 装包
"jspdf": "^1.5.3",
"html2canvas": "^1.4.1",
2.目录下的创建一个util文件夹,创建一个htmlToPdf.js文件,名字可以自己起
3.导入main文件中
import htmlToPdf from '@/util/htmlToPdf'
Vue.use(htmlToPdf)
4.将下列代码拷贝到 htmlToPdf.js文件中
// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export default {
    install(Vue) {
        Vue.prototype.getPdf = function (title, domID) {
            // 注册getPdf方法,传入两个参数,此处使用了promise处理导出后的操作
            /*
            title: 导出文件名
            domID: 需要导出dom的id或者class
             */
            const dom = document.querySelector(domID);
            return new Promise((resolve, reject) => {
                html2Canvas(dom, {
                    useCORS: true, // 由于打印时,会访问dom上的一些图片等资源,解决跨域问题!!重要
                    allowTaint: true // 允许跨域
                    scale: 2, //如果dom区域较大,下载会出现部分灰色区域,需要加scale解决
                }).then(canvas => {
                    const contentWidth = canvas.width
                    const contentHeight = canvas.height
                    // 根据A4纸的大小,计算出dom相应比例的尺寸
                    const pageHeight = contentWidth / 592.28 * 841.89
                    let leftHeight = contentHeight
                    let position = 0
                    const imgWidth = 595.28
                    // 根据a4比例计算出需要分割的实际dom位置
                    const imgHeight = 592.28 / contentWidth * contentHeight
                    // canvas绘图生成image数据,1.0是质量参数
                    const pageData = canvas.toDataURL('image/jpeg', 1.0)
                    // a4大小
                    const PDF = new JsPDF('', 'pt', 'a4')
                    // 当内容达到a4纸的高度时,分割,将一整块画幅分割出一页页的a4大小,导出pdf
                    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')
                    resolve(true)
                })
                    .catch(() => {
                        reject(false)
                    })
            })
        }
    }
}

6.对应的地方使用
this.getPdf('批阅','.pdf-box');即可下载当前dom的pdf文件
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用html2canvaspdfmake将HTMLPDF并下载,您可以按照以下步骤操作: 1. 首先,您需要在HTML页面中引入html2canvaspdfmake的库文件。您可以通过以下方式在HTML文件中添加这两个库: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/pdfmake.min.js"></script> ``` 2. 接下来,您需要创建一个按钮或触发器,以便在单击时开始换并下载PDF。例如: ```html <button onclick="generatePDF()">Download PDF</button> ``` 3. 然后,您需要编写一个JavaScript函数来执行换和下载操作。该函数将使用html2canvas将HTML元素换为图像,然后使用pdfmake将这些图像添加到PDF文档中。最后,该函数将使用pdfmake下载PDF文档。以下是一个示例函数: ```javascript function generatePDF() { // 获取要换为PDF的HTML元素 const element = document.getElementById("html-content"); // 使用html2canvas将HTML元素换为图像 html2canvas(element).then((canvas) => { // 将图像换为DataURL const imgData = canvas.toDataURL("image/png"); // 创建一个PDF文档对象 const docDefinition = { content: [ { image: imgData, width: 500, }, ], }; const pdfDocGenerator = pdfMake.createPdf(docDefinition); // 下载PDF文档 pdfDocGenerator.download("document.pdf"); }); } ``` 在这个示例中,我们使用了一个id为“html-content”的HTML元素,并将其换为PNG图像。然后,我们创建了一个pdfmake文档定义对象,其中包含一个图像元素,该元素使用先前创建的DataURL。最后,我们使用pdfmake的下载方法下载PDF文档。 4. 最后,您需要确保您的HTML元素可以正确换为图像。这意味着您需要确保该元素在屏幕上可见,并且没有被另一个元素遮盖。 通过这些步骤,您应该能够使用html2canvaspdfmake将HTML换为PDF并下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值