简易Excel表与PDF预览实现

本地Excel表预览(纯前端):

采用XLSX的插件库(npm)

是基于SheetJs的Excel分析库

npm地址:www.npmjs.com/package/xls...

复制代码
npm install xlsx

原理是将excel表分析成对应的html格式(异步)

文件通过上传组件获取到对应的File格式,传给excel表处理函数file2Preview

js 复制代码
import * as XLSX from 'xlsx';
// 返回一个异步,并且返回Excel文件读取后的结果
export const file2Preview = (file: File) => {
    return new Promise((resolve) => {
        // 读取文件流
        const reader = new FileReader()
        // 文件加载
        reader.onload = (e) => {
            const data = e.target?.result
            const workbook = XLSX.read(data, {
                    type: "binary",
                    cellDates: true,
                })
                // execl表格中的第一页
                const worksheet = workbook.Sheets[workbook.SheetNames[0]];
                // 处理成html格式
                const html = XLSX.utils.sheet_to_html(worksheet)
                resolve(html)
        }
            reader.readAsBinaryString(file)//读取二进制字符串
}

返回的就是被分析成html格式的excel表

js 复制代码
<template>
    <div v-html="html"></div>
</template>
js 复制代码
<script setup>
    const html = ref("");
    //文件上传获取文件file
    const handleChange = async (info) => {
  html.value = await file2Preview(info.file.originFileObj);
};
</script>

简单预览:

PDF文件预览(本地与远程地址URL):

采用vue-office/PDF的插件库

vue-office是一个支持多种文件(docx、.xlsx、pdf)预览的vue组件库,支持vue2和vue3

官方地址:501351981.github.io/vue-office/...

bash 复制代码
npm install @vue-office/pdf vue-demi

这个插件库支持两种预览方式,一种是给远程地址URL,另一种是给ArrayBuffer

ArrayBuffer方式

js 复制代码
// 返回一个异步,并且PDF文件返回读取后的结果
export const pdf2Preview = (file: File) => {
    return new Promise((resolve) => {
        // 读取文件流
        const reader = new FileReader()
        // 文件加载
        reader.onload = (e) => {
            const data = e.target?.result
            resolve(data);
        }
        reader.readAsArrayBuffer(file)
    })
}

直接将ArrayBuffer传入vue-office-pdf组件中

js 复制代码
<template>
    <vue-office-pdf v-model:src="pdf_src"  />
</template>
js 复制代码
<script setup>
    const pdf_src = ref("");
    //文件上传获取文件file
    const handleChange = async (info) => {
        pdf_src.value = await pdf2Preview(info.file.originFileObj);
    };
</script>

简单预览:

远程地址URL方式

直接将pdf_src换成对应的远程地址就可以

相关推荐
_codeOH2 小时前
Vue 3 vs React 19:框架还在卷,核心原理就这些
前端·vue.js
英勇无比的消炎药3 小时前
新手必看玩转TinyRobot一定要避开这些坑
前端·vue.js
英勇无比的消炎药3 小时前
别再盲目混用AI组件库和传统组件库差距原来这么大
前端·vue.js
英勇无比的消炎药5 小时前
前端提效神器全新AI组件库TinyRobot改写日常开发模式
前端·vue.js
英勇无比的消炎药6 小时前
前端提效神器TinyRobot
前端·vue.js
CDwenhuohuo6 小时前
uni 背景色渐变 全屏
前端·javascript·vue.js
爱怪笑的小杰杰6 小时前
Vue 项目交付第三方开发,如何隐藏核心 JS 源码?
前端·javascript·vue.js
小二·6 小时前
Vue 3 组合式 API 进阶实战
前端·javascript·vue.js
rising start7 小时前
九、vue3 组件通信:全场景详解
前端·vue.js·typescript
编程技术手记8 小时前
Vue Scoped CSS 与动态创建 DOM 的兼容性问题
前端·css·vue.js