zoukankan      html  css  js  c++  java
  • Vue 页面导出成PDF文件

    注意事项

    • 如果导出的页面中设计到图片或者其他文件跨域文件,需要后端服务配合

    安装依赖

    npm install html2Canvas --save
    npm install jspdf--save
    

    封装Class

    // 导出页面为PDF格式
    import html2Canvas from 'html2canvas'
    import JsPDF from 'jspdf'
    import { Loading } from 'element-ui'
    let loading
    
    export default class PadDownloader {
      static install(Vue, options) {
        Vue.prototype.downloadPdf = function (options) {
          loading = Loading.service({
            lock: true,
            text: '正在下载文件...',
            background: 'rgba(0,0,0,.5)'
          })
          const title = options.title
          const content = document.querySelector('#' + options.selector)
          html2Canvas(content, {
            allowTaint: true,
            useCORS: 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 -= pageHeight
                position -= 841.89
                if (leftHeight > 0) {
                  PDF.addPage()
                }
              }
            }
            loading.close()
            PDF.save(title + '.pdf')
          })
        }
      }
    }
    

    注册全局组件(main.js)

    // main.js
    Vue.use(PadDownloader)
    
    // 在其他的页面直接使用全局方法`downloadPdf `
    

    使用 (vue 单文件组件)

    <div>
          <el-button
            type="primary"
            style="margin-left: 300px;"
            v-on:click="downloadPdf({title:'投标文件',selector:'pdf-container'})"
          >下载商务文件</el-button>
        </div>
    
    Keep learning
  • 相关阅读:
    第一篇:理论篇
    day 3:注释,缩进
    HTML的报告
    SAP DIALOG屏幕新增搜索帮助
    财务凭证科目替代(未写完)
    表维护生成器本地转请求包
    web安全之SQL注入
    Ubuntu16.04 下安装Sublime Text 3
    ubuntu16.04 下安装配置python3.6
    Ubuntu 16.04 下安装 PyCharm
  • 原文地址:https://www.cnblogs.com/leslie1943/p/13358111.html
Copyright © 2011-2022 走看看