基于vue-office實現(xiàn)docx、xlsx、pdf文件的在線預(yù)覽

概述

在做項目的時候會遇到docx、xlsx、pdf等文件的在線預(yù)覽需求,實現(xiàn)此需求可以有多種解決方式,本文基于vue-office實現(xiàn)純前端的文件預(yù)覽。

效果

如下圖,分別為docx、xlsx、pdf三種類型的文件在線加載后的效果。你也可以訪問官方預(yù)覽網(wǎng)址查看效果。

image.png

實現(xiàn)

1. 添加依賴

package.json文件中添加如下依賴,并通過命令npm i安裝依賴。

{
  ...,
  "dependencies": {
    "@vue-office/docx": "1.6.0",
    "@vue-office/excel": "1.6.0",
    "@vue-office/pdf": "1.6.0"
  },
}

2. 引入依賴

vue文件中引入依賴,示例代碼如下:

//引入相關(guān)樣式
import '@vue-office/docx/lib/index.css'
import '@vue-office/excel/lib/index.css'

//引入VueOffice組件
import VueOfficeDocx from '@vue-office/docx'
import VueOfficeExcel from '@vue-office/excel'
import VueOfficePdf from '@vue-office/pdf'

export default {
  components: {
    VueOfficeDocx,
    VueOfficeExcel,
    VueOfficePdf
  },
}

3. 使用組件

<template>
  <div class="layout-file">
    <div class="layout-file-title">{{docx}}</div>
    <vue-office-docx :src="docx" @rendered="rendered"/>
  </div>
  <div class="layout-file">
    <div class="layout-file-title">{{excel}}</div>
    <vue-office-excel :src="excel" @rendered="rendered"/>
  </div>
  <div class="layout-file">
    <div class="layout-file-title">{{pdf}}</div>
    <vue-office-pdf style="height: 100%;" :src="pdf" @rendered="rendered"/>
  </div>
</template>

完整的實現(xiàn)代碼如下:

<template>
  <div class="layout-file">
    <div class="layout-file-title">{{docx}}</div>
    <vue-office-docx :src="docx" @rendered="rendered"/>
  </div>
  <div class="layout-file">
    <div class="layout-file-title">{{excel}}</div>
    <vue-office-excel :src="excel" @rendered="rendered"/>
  </div>
  <div class="layout-file">
    <div class="layout-file-title">{{pdf}}</div>
    <vue-office-pdf style="height: 100%;" :src="pdf" @rendered="rendered"/>
  </div>
</template>

<script>
//引入相關(guān)樣式
import '@vue-office/docx/lib/index.css'
import '@vue-office/excel/lib/index.css'

//引入VueOffice組件
import VueOfficeDocx from '@vue-office/docx'
import VueOfficeExcel from '@vue-office/excel'
import VueOfficePdf from '@vue-office/pdf'

export default {
  components: {
    VueOfficeDocx,
    VueOfficeExcel,
    VueOfficePdf
  },
  data() {
    return {
      pdf: 'http://localhost:18081/doc.pdf',
      excel: 'http://localhost:18081/doc.xlsx',
      docx: 'http://localhost:18081/doc.docx',
      ppt: 'http://localhost:18081/doc.pptx'
    }
  },
  methods: {
    rendered() {
      console.log('rendered')
    }
  }
}
</script>

<style lang="scss" scoped>
.layout-file {
  width: calc(50% - 1rem);
  height: 50%;
  float: left;
  margin-top: 0.8rem;
  margin-right: 0.8rem;
  position: relative;
  border: 1px solid #f00;
  border-radius: 0.3rem;
  &:nth-child(1), &:nth-child(2) {
    margin-top: 0;
  }
  .layout-file-title {
    position: absolute;
    top: 0.5rem;
    right: 1.5rem;
    background-color: rgba(255,0,0,0.8);
    padding: 0.1rem 0.4rem;
    z-index: 99;
    color: #fff;
    border-radius: 0.3rem;
    font-size: 12px;
  }
}
</style>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容