Show.vue 2.51 KB
Newer Older
1377875331@qq.com committed
1
<template>
zhanghou committed
2 3
  <div>
    <el-button @click="downLoad">点击下载word文件</el-button>
4
    <!-- <el-button @click="downLoadPdf">点击下载pdf文件</el-button> -->
zhanghou committed
5 6 7 8 9
    <div class="docWrap">
      <!-- 预览文件的地方(用于渲染) -->
      <div ref="file"></div>
    </div>
  </div>
1377875331@qq.com committed
10 11 12
</template>

<script>
13 14 15
import { renderAsync } from 'docx-preview';
import Api from '~/service/Api';
import commonProcess from '~/mixin/commonProcess';
1377875331@qq.com committed
16
export default {
17 18 19 20 21 22 23 24
  data() {
    return {
      model: { docXML: '' },
      pdf: '',
    };
  },
  mixins: [commonProcess],
  mounted() {
zhanghou committed
25
    this.goPreview ()
26 27
  },
  methods: {
zhanghou committed
28
    async goPreview () {
29 30 31
      let params = window.opener["params"];
      let blob = params.blob
      renderAsync(blob, this.$refs.file)
32 33 34 35 36
      this.$nextTick(() => {
        let dom = document.querySelector('.docWrap')
        dom.style.height = '100vh'
        dom.style.overflow = 'auto'
      })
zhanghou committed
37 38
    },
    async downLoad () {
39 40 41
      let params = window.opener["params"];
      let blob = params.blob
      let docnam = params.docnam
42 43 44 45
      this.fileDownLoad(docnam,blob)
    },
    fileDownLoad(docnam,blob){
      let a = document.createElement("a"); //创建一个<a></a>标
46 47 48 49 50 51
      a.href = URL.createObjectURL(blob); // 将流文件写入a标签的href属性值
      a.download = docnam; //设置文件名
      a.style.display = "none"; // 障眼法藏起来a标签
      document.body.appendChild(a); // 将a标签追加到文档对象中
      a.click(); // 模拟点击了a标签,会触发a标签的href的读取,浏览器就会自动下载了
      a.remove(); // 一次性的,用完就删除a标签
52 53 54 55
    },
    async downLoadPdf () {
      let params = window.opener["params"];
      let docnam = params.docnam
56 57 58 59 60 61 62 63 64 65 66 67 68 69
      let rtnmsg = await Api.post('/service/gitopn/download', this.wrapper(docnam));
      if (rtnmsg.respCode == SUCCESS) {
        let base64Str = rtnmsg.data.download;
        let bstr = window.atob(base64Str); // 解码 base-64 编码的字符串,base-64 编码使用方法是 btoa()
        let length = bstr.length;
        let u8arr = new Uint8Array(length); // 创建初始化为0的,包含length个元素的无符号整型数组
        while (length--) {
          u8arr[length] = bstr.charCodeAt(length); // 返回在指定的位置的字符的 Unicode 编码
        }
        let blob = new Blob([u8arr]);
        let index = docnam.lastIndexOf(".");
        docnam = docnam.substring(0,index)+".pdf";
        this.fileDownLoad(docnam,blob)
      }
70 71
    }
  }
SunJie committed
72
};
1377875331@qq.com committed
73
</script>
74
<style scoped></style>