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
  • 相关阅读:
    Ajax传值以及接受传值,@ResPonseBody 和 @RequestBody
    分页
    延迟加载
    mybatis的一级缓存和二级缓存
    拦截器的使用
    Session和Cookie
    逆向工程
    springmvc注解详解
    Java——变量
    Go通关04:正确使用 array、slice 和 map!
  • 原文地址:https://www.cnblogs.com/leslie1943/p/13358111.html
Copyright © 2011-2022 走看看