加载中...

vue-office

vue-office

vue-office

支持多种文件(docx、pdf、excel)预览的vue组件套装,支持vue2/3。

查看demo演示

源码

安装

//docx文档预览组件
npm install @vue-office/docx

//excel文档预览组件
npm install @vue-office/excel

//pdf文档预览组件
npm install @vue-office/pdf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用示例

文档预览场景大致可以分为两种:
有文档网络地址,比如 https://***.docx
文件上传时预览,此时可以获取文件的ArrayBuffer或Blob

docx文档的预览
使用网络地址预览

<template>
  <vue-office-docx :src="docx" @rendered="rendered"/>
</template>

<script>
//引入VueOfficeDocx组件
import VueOfficeDocx from ''@vue-office/docx''
//引入相关样式
import ''@vue-office/docx/lib/index.css''

export default {
  components:{
    VueOfficeDocx
  },
  data(){
    return {
      docx: ''http://static.shanhuxueyuan.com/test6.docx'' //设置文档网络地址,可以是相对地址
    }
  },
  methods:{
    rendered(){
      console.log("渲染完成")
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

上传文件预览

我们使用element的上传组件作为示例,当然也可以使用普通的input type=“file”,只要能获取文件的arrayBuffer即可

<template>
  <div id="docx-demo">
    <el-upload :limit="1" :file-list="fileList" accept=".docx" :beforeUpload="beforeUpload" action="">
      <el-button size="small" type="warning">点击上传</el-button>
    </el-upload>
    <vue-office-docx :src="src" />
  </div>
</template>

<script>
import VueOfficeDocx from ''@vue-office/docx''
import ''@vue-office/docx/lib/index.css''
export default {
  components: {
    VueOfficeDocx
  },
  data(){
    return {
      src:'''',
      fileList:[]
    }
  },
  methods:{

    beforeUpload(file){
      let reader = new FileReader();
      reader.readAsArrayBuffer(file);
      reader.onload = (loadEvent) => {
        let arrayBuffer = loadEvent.target.result;
        this.src = arrayBuffer
      };
      return false
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

如果是原生的input type=“file”,也是类似的

<template>
  <div>
    <input type="file" @change="changeHandle"/>
    <vue-office-docx :src="src"/>
  </div>
</template>

<script>
import VueOfficeDocx from ''@vue-office/docx''
import ''@vue-office/docx/lib/index.css''

export default {
  components: {
    VueOfficeDocx
  },
  data(){
    return {
      src: ''''
    }
  },
  methods:{
    changeHandle(event){
      let file = event.target.files[0]
      let fileReader = new FileReader()
      fileReader.readAsArrayBuffer(file)
      fileReader.onload =  () => {
        this.src = fileReader.result
      }
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

excel文档预览

<template>
  <vue-office-excel :src="excel" @rendered="rendered"/>
</template>

<script>
//引入VueOfficeExcel组件
import VueOfficeExcel from ''@vue-office/excel''
//引入相关样式
import ''@vue-office/excel/lib/index.css''

export default {
  components:{
    VueOfficeExcel
  },
  data(){
    return {
      excel: ''http://static.shanhuxueyuan.com/demo/excel.xlsx''//设置文档地址
    }
  },
  methods:{
    rendered(){
      console.log("渲染完成")
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

pdf文档预览

<template>
  <vue-office-pdf :src="pdf" @rendered="rendered"/>
</template>

<script>
//引入VueOfficePdf组件
import VueOfficePdf from ''@vue-office/pdf''

export default {
  components:{
    VueOfficePdf
  },
  data(){
    return {
      pdf: ''http://static.shanhuxueyuan.com/test.pdf'' //设置文档地址
    }
  },
  methods:{
    rendered(){
      console.log("渲染完成")
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

excel和pdf,也同样支持通过文件上传进行预览,代码和docx的预览一样。

API

为了使用简单,这几种组件的API尽量保持一致,如果是某个组件特有的,会单独注明

属性
New Image

事件
New Image