美文网首页
vue实现导出pdf文件,vue下载pdf,jspdf导出文件

vue实现导出pdf文件,vue下载pdf,jspdf导出文件

作者: 可乐_加冰_ | 来源:发表于2023-08-10 09:38 被阅读0次

    1、下载插件

    cnpm install html2canvas
    cnpm install jspdf
    

    2、样式

    <template>
     
          <div class="info-box">
            <section id="pia" style="padding: 20px;">
              <div class="info-title">2022年07月18日易涝点积水报告</div>
              <div class="info-tips">报告时间:2022-07-19 07:00:00</div>
              <div>
                2022年07月18日,xx区大面积降雨,致使1处易涝点积水。现将当日处置情况汇报如下:
              </div>
              <div class="list-box" v-for="item in 1" :key="item">
              <div class="list-top">
                <span class="red-txt road-span">xx易涝点:</span>
                <span class="span-item">日降雨量:<span class="red-txt">100mm</span></span>
                <span class="span-item">当日最大雨量:<span class="red-txt">90mm</span></span>
                <span class="span-item">当日最小雨量:<span class="red-txt">20mm</span></span>
              </div>
              <section class="clcs-list-box">
                <div class="clcs-list-item">
                  <div class="clcs-list-item-div">处理时间:<span class="red-txt">2022-07-18 08:50:00</span></div>
                  <div class="clcs-list-item-div">处理单位:<span class="red-txt">xxx有限公司</span></div>
                </div>
                <div class="clcs-list-item">
                  <div class="clcs-list-item-div" style="width: 80%">处置措施:<span class="red-txt">接雨情警报后,我单位工作人员立即到达现场,先行采取清理疏通排水设施,利用排水泵将路面积水排出,同时派专职人员值守,消除隐患。</span></div>
                </div>
                <div class="clcs-list-item">
                  <div class="red-txt" style="margin-bottom: 5px;color:#515a6e">现场图片:</div>
                  <div>
                    <div v-for="(it,index) in img" :key="index" style="width: 250px;height: 150px;
                     margin-right: 10px;display: inline-block;overflow: hidden">
                      <el-image
                        style="width: 100%;height: 100%"
                        :src="it.url"
                        :preview-src-list="srcList">
                      </el-image>
                    </div>
                  </div>
                </div>
              </section>
            </div>
            </section>
    
            <div class="footer-down-btn">
              <div class="btn-down">下载word</div>
              <div class="btn-down" @click="downloadPDF">下载pdf</div>
            </div>
          </div>
     
    </template>
    
    <script>
      import html2Canvas from "html2canvas";
      import jsPDF from "jspdf";
      import global_msg from "@/scripts/global";
    
      export default {
        name: "reportInfo",
        data(){
          return{
            img:[
              {id:2,url:require('@/assets/systems_images/gis/jjl_002.png')},
              {id:1,url:require('@/assets/systems_images/gis/jjl_001.png')},
    
            ],
            srcList:[
              require('@/assets/systems_images/gis/jjl_002.png'),
              require('@/assets/systems_images/gis/jjl_001.png'),
    
            ]
          }
        },
        mounted() {
         
        },
        methods: {
          back() {
            this.$emit('back')
          },
          downloadPDF(){
            let that = this;
            global_msg.waitForPrompt = that.$loading({
              lock: true,
              text: '文件下载中...',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
            });
    
            let name = '积水报告'
    
            setTimeout(function () {
              let content_html = document.getElementById("pia");
              let scale = 2
              let opts = {
                scrollY: 0,
                scrollX: 0,
                scale: 2,
                background:"#fff",
                dpi: 192,//导出pdf清晰度
                useCORS: true
              }
              html2Canvas(content_html, opts).then((canvas) => {
    
                var contentWidth = canvas.width;
                var contentHeight = canvas.height;
                //一页pdf显示html页面生成的canvas高度;
                var pageHeight = contentWidth / 592.28 * 841.89;
                //未生成pdf的html页面高度
                var leftHeight = contentHeight;
                //pdf页面偏移
                var position = 0;
                //html页面生成的canvas在pdf中图片的宽高(a4纸的尺寸[595.28,841.89])
                var imgWidth = 595.28;
                var imgHeight = 592.28 / contentWidth * contentHeight;
                var pageData = canvas.toDataURL('image/jpeg', 1.0);
                var pdf = new jsPDF('', 'pt', 'a4');
                //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
                //当内容未超过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(`${name}.pdf`);
                global_msg.waitForPrompt.close()
    
              });
            },500)
    
          }
        }
      }
    </script>
    
    <style scoped>
      .info-title{
        font-size: 18px;
        font-weight: 600;
        text-align: center;
        color: black;
      }
      .info-tips{
        text-align: right;
        margin: 20px 0;
        color: #7c7c7c;
      }
      .info-box{
        padding: 20px;
      }
      .span-item{
        margin-left: 10px;
      }
      .red-txt{
        color: #313131;
      }
      .clcs-list-item{
        width: 100%;
        margin-bottom: 8px;
      }
      .clcs-list-item-div{
        width: 50%;
        text-align: left;
        display: inline-block;
      }
      .list-top{
        margin: 20px 0;
      }
      .footer-down-btn{
        text-align: center;
        margin-top: 10px;
        position: fixed;
        bottom: 40px;
        left: 50%;
      /* width: calc(100% - 240px); */
      /* left: 0; */
      /* width: 100%;*/
    }
    .btn-down{
      width: 75px;
      height: 35px;
      background: #2196F3;
      text-align: center;
      line-height: 35px;
      border-radius: 5px;
      display: inline-block;
      margin-right: 15px;
      color: white;
      cursor: pointer;
    }
    .road-span{
      font-size: 16px;
      font-weight: 600;
    }
    </style>
    
    

    3、自定义 scripts/global.js 文件

    const waitForPrompt = null;
    
    export default {
      waitForPrompt,    //等待提示
    }
    
    

    相关文章

      网友评论

          本文标题:vue实现导出pdf文件,vue下载pdf,jspdf导出文件

          本文链接:https://www.haomeiwen.com/subject/dnaapdtx.html