mammoth.js/sheetjs/vue-pdf内网文件的预览问题


前端小功能:Word,PDF,Excel文档vue预览

最新需求需要内网环境进行预览,pdf可以直接使用浏览器自带的方式进行预览,但是word和excel需要借助插件,预览本地文件,或者是内网文件,可以使用以下方法进行预览:

PDF:Vue-pdf

Word: mammoth.js

Excel: SheetJS

一、word预览–mammoth.js

安装:npm install --save mammoth

github地址

tip:只能预览.docx文件

word.vue:

 <template>
  <div>
    <div id="wordView" v-html="vHtml" />
  </div>
</template>

<script>
import mammoth from "mammoth";
export default {
  name: "word",
  data() {
    return {
      vHtml: "",
      wordURL:''//文件地址
    };
  },
  created() {
    let vm=this;
    vm.wordURL = this.$route.query.wordURL;

    const xhr = new XMLHttpRequest();
    xhr.open("get", this.wordURL, true);
    xhr.responseType = "arraybuffer";
    xhr.onload = function () {
      if (xhr.status == 200) {
        mammoth
          .convertToHtml({ arrayBuffer: new Uint8Array(xhr.response) })
          .then(function (resultObject) {
            vm.$nextTick(() => {
              // document.querySelector("#wordView").innerHTML =
              //   resultObject.value;
              vm.vHtml=resultObject.value;
            });
          });
      }
    };
    xhr.send();
  },
  methods: {
  },
};
</script>

<style>
</style>

跳转带的参数:

if (row.fileType == 3) {
         //word
         let routeData = this.$router.resolve({
           path: "/word",
           query: {
             wordURL: response.data,
           },
         });
         window.open(routeData.href, "_blank"); 
       } else if (row.fileType == 5) {
         //pdf
         window.open(response.data);
       } else if (row.fileType == 4) {
         //excel
         let routeData = this.$router.resolve({
           path: "/excel",
           query: {
             excelURL: response.data,
           },
         });
         window.open(routeData.href, "_blank");
       }

二、excel预览–sheetjs

安装:npm install --save xlsx

github地址

excel.vue:

<template>
  <div id="table">
    <el-table :data="tableData" style="width: 100%">
      <el-table-column
        v-for="(value,key,index) in tableData[2]"
        :key="index"
        :prop="key"
        :label="key"
      ></el-table-column>
    </el-table>
  </div>
</template>

<script>
import XLSX from "xlsx";
export default {
  data() {
    return {
      tableData: [],
      workbook: {},
      excelURL: "",
    };
  },
  mounted() {
    this.excelURL = this.$route.query.excelURL;
    this.readWorkbookFromRemoteFile(this.excelURL);
  },
  methods: {
    readWorkbookFromRemoteFile: function (url) {
      var xhr = new XMLHttpRequest();
      xhr.open("get", url, true);
      xhr.responseType = "arraybuffer";
      let _this = this;
      xhr.onload = function (e) {
        if (xhr.status === 200) {
          var data = new Uint8Array(xhr.response);
          var workbook = XLSX.read(data, { type: "array" });
          console.log(workbook);

          var sheetNames = workbook.SheetNames; // 工作表名称集合
          _this.workbook = workbook;
          _this.getTable(sheetNames[0]);
        }
      };
      xhr.send();
    },
    getTable(sheetName) {
      console.log(sheetName);
      var worksheet = this.workbook.Sheets[sheetName];
      this.tableData = XLSX.utils.sheet_to_json(worksheet);
      console.log(this.tableData);
    },
  },
};
</script>

<style lang="stylus" scoped>
#table {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
  margin-top: 60px;
  border: 1px solid #ebebeb;
  padding: 20px;
  width: 80%;
  margin: 20px auto;
  border-shadow: 0 0 8px 0 rgba(232, 237, 250, 0.6), 0 2px 4px 0 rgba(232, 237, 250, 0.5);
  border-radius: 10px;
  overflow: scroll;
  height: 100%;

  .tab {
    margin: 0 0 20px 0;
    display: flex;
    flex-direction: row;
  }
}
</style>

<style scoped>
.is-active {
  background-color: #409eff;
}
span {
  background-color: red;
}
</style>

三、pdf预览——vue-pdf

安装:npm install --save vue-pdf

<template>
    <div>
          <pdf ref="pdf" :src="pdfUrl" style="width: 100%;" />
    </div>
</template>
<script>
import pdf from 'vue-pdf'
export default {
    data(){
        return: {
            pdfUrl: '',
        }
    }
    created() {
       const path = 'test.pdf'// 你获取到的pdf路径
       // pdf.createLoadingTask解决文件件跨域问题
       this.pdfUrl = pdf.createLoadingTask(path)
  },
}
</script>
  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 34
    评论
Mammoth.js是一个用于将.docx文档转换为HTML的工具。它的目标是通过使用文档中的语义信息来生成简洁的HTML,而不是完全复制文档的样式。比如,Mammoth会将应用标题1样式的段落转换为h1元素,而不是尝试复制标题的字体、大小和颜色等样式。\[1\] 在使用Mammoth.js时,可以通过引入mammoth库并调用convertToHtml方法来将.docx文档转换为HTML。在Vue.js中的示例代码中,通过使用XMLHttpRequest获取.docx文件的arraybuffer,并将其传递给convertToHtml方法进行转换。转换后的HTML可以通过v-html指令绑定到页面上的元素上,从而显示转换后的内容。\[2\] 另外,根据提供的代码片段,还可以看到在某些情况下,通过跳转带参数的方式使用Mammoth.js进行文档预览。具体来说,当文件类型为word时,会通过路由跳转到word页面,并将word文件的URL作为参数传递给该页面。然后在word页面中,使用Mammoth.js将word文件转换为HTML,并将转换后的HTML显示在页面上。\[3\] 总之,Mammoth.js是一个用于将.docx文档转换为HTML的工具,它可以帮助我们生成简洁的HTML内容,并可以与Vue.js等前端框架结合使用。 #### 引用[.reference_title] - *1* [Vue Word预览mammoth.js](https://blog.csdn.net/qq_42697806/article/details/125423742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mammoth.js/sheetjs/vue-pdf内网文件预览问题](https://blog.csdn.net/qq_38143787/article/details/108474254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo忘川

谢谢老板们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值