前端预览文件

import axios from "axios";

一、txt

<div id="txtPre" class="main-txt"></div>

let reader = new FileReader();
axios({
      method: "get",
      responseType: "blob",
      url: 地址,
}).then(({ data }) => {
      reader.readAsText(data);
});
reader.onload = function (e) {
      let txtData: any = document.getElementById("txtPre");
      txtData.innerHTML = e.target.result;
};

二、xlsx

npm i xlsx
import * as XLSX from "xlsx/xlsx.mjs"; //引入xlsx
<div class="csv-box">
    <el-tabs type="border-card">
      <el-tab-pane :label="item.name" v-for="item in state.excelSheetCsv" :key="item">
        <div class="table-csv" v-html="item.innerHTML"></div>
      </el-tab-pane>
    </el-tabs>
</div>
const state:any=reactive({
   excelSheetCsv: [], //xlsx
})
axios({
      method: "get",
      responseType: "arraybuffer",
      url: 地址,
    }).then((s) => {
      let data = new Uint8Array(s.data);
      let workbook = XLSX.read(data, {
        type: "array",
});
// 删除掉没有数据的sheet
Object.values(workbook.Sheets).forEach((sheet: any, index: any) => {
        if (Object.keys(sheet).indexOf("!ref") === -1) {
          delete workbook.Sheets[workbook.SheetNames[index]];
        }
});
      tableToHtml(workbook);
});
// 处理得到的csv数据
const tableToHtml = (workbook: any) => {
    let sheetList: any = workbook.SheetNames.filter(
      (v: any) => v.indexOf("数据源") === -1
    );
    sheetList.forEach((sheet: any) => {
      let worksheet = workbook.Sheets[sheet];
      if (worksheet) {
        let innerHTML = XLSX.utils.sheet_to_html(worksheet);
        state.excelSheetCsv.push({
          name: sheet,
          innerHTML: innerHTML,
        });
      } else {
        state.excelSheetCsv.push({
          name: sheet,
          innerHTML: "暂无数据",
        });
      }
    });
};

三、docx

npm i docx-preview
import { renderAsync } from "docx-preview";
<div ref="fileDocx" key="fileDocx" class="file-docx"></div>
let fileDocx=ref()
axios({
      method: "get",
      responseType: "blob",
      url: 地址,
    }).then(({ data }) => {
      renderAsync(data, fileDocx.value); // 渲染到页面
});

四、pdf

npm i pdfjs-dist@2.5.207
import * as pdfjs from "pdfjs-dist";
import pdfjsWorker from "pdfjs-dist/build/pdf.worker.entry";
pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;

<div class="pdf-content" >
      <canvas :id="`pdf-canvas-${state.currentNum}`" class="pdf-page" />
       <div class="total-style">
              <button class="btn" @click="changePdfPage(0)">上一页</button>
              <button class="btn" @click="changePdfPage(1)">下一页</button>
              <span>当前第{{ state.currentNum }}页/共{{ state.numPages }}页</span>
       </div>
</div>

const state:any=reactive({
   currentNum: 1, //当前页码
   numPages: 0, // pdf 总页数
   pdfCtx:null 
})

// pdf
const getPdf = (地址: any) => {
    let loadingTask = pdfjs.getDocument(地址);
    loadingTask.promise.then((pdf) => {
      state.pdfCtx = pdf;
      state.numPages = pdf._pdfInfo.numPages;
      nextTick(() => {
        renderPdf();
      });
    });
};
 // 渲染pdf
const renderPdf = () => {
    state.pdfCtx.getPage(state.currentNum).then((page) => {
      const canvas = document.getElementById(`pdf-canvas-${state.currentNum}`);
      const ctx = canvas.getContext("2d");
      const viewport = page.getViewport({ scale: 1 });
      canvas.height = viewport.height;
      canvas.width = viewport.width;
      canvas.style.width = "950px";
      canvas.style.height = "650" * (viewport.height / viewport.width) + "px";
      page.render({
        canvasContext: ctx,
        viewport,
      });
    });
};
 // 分页
const changePdfPage = (val: any) => {
    if (val == 0 && state.currentNum > 1) {
      state.currentNum--;
      renderPdf();
    } else if (val == 1 && state.currentNum < state.numPages) {
      state.currentNum++;
      renderPdf();
    }
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值