vue页面生成pdf并在新标签内打开

vue页面生成pdf并在新标签内打开

1.将页面html转换成图片
npm install --save html2canvas
2.将图片生成pdf
npm install jspdf --save
3.在js中添加htmlToPdf.js
内容为:

import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export default {
    install(Vue, options) {
        Vue.prototype.getPdf = function (title) {
            let url;
            html2Canvas(document.querySelector('#pdfDom'), {
                allowTaint: true
            }).then(function (canvas) {
                let contentWidth = canvas.width
                let contentHeight = canvas.height
                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 -= pageHeighthhhhhhh
                        position -= 841.89
                        if (leftHeight > 0) {
                            PDF.addPage()
                        }
                    }
                }
                window.open(PDF.output('bloburl'))//新标签打开生成的pdf
            }
            )
        }
    }
}


4.在main.js中导入并使用

import htmlToPdf from '@/js/htmlToPdf.js'
Vue.use(htmlToPdf)

  1. 在要生成pdf的内容外包裹
    <div class="row" id="pdfDom">
      <PrescPrintTpl ref="printTpl"  :info="printDetail"></PrescPrintTpl>
    </div>
  1. 在methods内加入点击生成(打印)事件
    this.getPdf();//在main中导入,所以可以直接使用
    在这里插入图片描述
发布了2 篇原创文章 · 获赞 0 · 访问量 13

猜你喜欢

转载自blog.csdn.net/y13488733540/article/details/105125683