vue_pdf,word,excel,pptx等文件预览

项目背景:vue3+elementPlus+vite

1.pdf

1.1 iframe预览

+ '#toolbar=0' 拼接到src后,可隐藏iframe顶部的工具栏

<template><div class="viewPDF.vue"><uploadFile @file="getFile" accept=".pdf,.PDF" ></uploadFile><iframe :src="fileUrl+ '#toolbar=0'" frameborder="0"></iframe></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue'
import PDFObject from 'pdfobject'
import uploadFile from '@/components/uploadFile.vue'const fileUrl = ref('https://soft.xiaoz.org/office/hee%20hee.pdf')
function getFile(val: any) {let file = URL.createObjectURL(val.raw)fileUrl.value = file
}</script><style scoped lang="less">
.pdfobject-container {height: 680px;
}
</style>
1.2 pdfobject 插件
  • 安装及管网
    https://pdfobject.com/api/
    npm i pdfobject
  • 代码实现及配置
<template><div class="viewPDF.vue"><uploadFile @file="getFile" accept=".pdf,.PDF" ></uploadFile><div id="mypdf"></div></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue'
import PDFObject from 'pdfobject'
import uploadFile from '@/components/uploadFile.vue'const fileUrl = ref('https://soft.xiaoz.org/office/hee%20hee.pdf')
function getFile(val: any) {let file = URL.createObjectURL(val.raw)fileUrl.value = filevar options = {pdfOpenParams: {scrollbars: "0",toolbar: "0",statusbar: "0",zoom: "100",view: "100%",fallbackLink: true,}, //禁用工具栏代码等一些配置};PDFObject.embed(fileUrl.value, '#mypdf', options)
}</script>
1.3 vue-office/pdf插件
  • 安装
    npm install @vue-office/pdf vue-demi
  • 使用
<template><div class="viewPDF.vue"><uploadFile @file="getFile" accept=".pdf,.PDF" ></uploadFile><vue-office-pdf :src="fileUrl"  style="height: 600px" /></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue'
import VueOfficePdf from '@vue-office/pdf'
import uploadFile from '@/components/uploadFile.vue'const fileUrl = ref('https://soft.xiaoz.org/office/hee%20hee.pdf')
function getFile(val: any) {let file = URL.createObjectURL(val.raw)fileUrl.value = file
}
</script>

2. docx

2.1 vue-office/docx插件
  • 安装
    npm install @vue-office/docx vue-demi
  • 使用
<template><div class="viewPDF.vue"><uploadFile @file="getFile" accept=".doc,.docx" ></uploadFile><vue-office-docx :src="docx" @rendered="rendered"/></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue'
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx'
//引入相关样式
import '@vue-office/docx/lib/index.css'
import uploadFile from '@/components/uploadFile.vue'const docx= ref('https://soft.xiaoz.org/office/hee%20hee.pdf')
function getFile(val: any) {let file = URL.createObjectURL(val.raw)docx.value = file
}
</script>

上传doc后缀的文件,也能成功预览

3.excel

3.1 vue-office/excel插件

只能预览xlsx文件

  • 安装
    npm install @vue-office/excel vue-demi
  • 使用
<template><div class="viewPDF.vue"><uploadFile @file="getFile" accept=".doc,.docx" ></uploadFile><vue-office-excel:src="excel"style="height: 600px"@rendered="renderedHandler"@error="errorHandler"/></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue'
import VueOfficeExcel from '@vue-office/excel'
import '@vue-office/excel/lib/index.css'
import uploadFile from '@/components/uploadFile.vue'const excel = ref('https://501351981.github.io/vue-office/examples/dist/static/test-files/test.xlsx')
function getFile(val: any) {let file = URL.createObjectURL(val.raw)excel.value = file
}
function renderedHandler() {console.log('渲染完成')
}
function errorHandler() {console.log('渲染失败')
}
</script>
3.2 xlsx插件

支持xlsx,xls文件的预览

  • 安装
    npm i xlsx@0.17.0
  • 使用
<template><div v-if="tableData.length>0" class="tab"><table class="table"><thead><tr><th v-for="header in tableHeaders" :key="header">{{ header }}</th></tr></thead><tbody><tr v-for="(row, rowIndex) in renderData" :key="rowIndex"><td v-for="(cell, cellIndex) in row" :key="cellIndex">{{ cell }}</td></tr></tbody></table><div class="btn"><div v-for="(item, index) in sheetName" @click="handleSheet(index)" :class="{isActive:activeIndex==index}">{{ item }}</div></div></div></template><script setup lang="ts">import { ref } from 'vue'import XLSX from 'xlsx'defineExpose({handleFileUpload})const tableData = ref<any[]>([])const tableHeaders = ref<any[]>([])const renderData = ref()const sheetName = ref()function handleFileUpload(fileCurrent: any) {const file = fileCurrentif (file) {const reader = new FileReader()reader.onload = (e: any) => {console.log(e.target.result);const data = new Uint8Array(e.target.result)const workbook = XLSX.read(data, { type: 'array' })// 获取第一个工作表const sheetNameArr = workbook.SheetNamessheetName.value = sheetNameArrsheetNameArr.forEach((sheetName) => {tableData.value.push({sheetName: sheetName,sheet: XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1 })})})console.log(tableData.value)renderData.value = tableData.value[0].sheet}reader.readAsArrayBuffer(file)}}const activeIndex = ref(0)function handleSheet(index:number){activeIndex.value = indexrenderData.value = tableData.value[index].sheet}</script><style scoped lang="less">.tab{height: calc(100% - 7px);}.table{height: calc(100% - 50px);overflow: auto;display:inline-block}table {width: 100%;border-collapse: collapse;}th,td,tr {border: 1px solid #ddd;padding: 8px;text-align: left;font-size: 14px;color:#0a0a0a}th {background-color: #f2f2f2;}.btn {text-align: left;background-color: #f5f6f7;display: flex;border: 1px solid #e8eaed;& > div {line-height: 40px;height: 40px;padding:4px 10px;vertical-align: middle;border-right: 1px solid #e8eaed;color: #000000a6;cursor: pointer;font-size: 14px;}.isActive{background-color: #fff;}}</style>

4.pptx

4.1 pptxjs插件
  • 安装
    pptxjs管网 下载插件

  • 将下载的内容(lib)放到public文件夹下
    在这里插入图片描述

  • index.html中引入相关文件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>vite</title><link rel="stylesheet" href="/lib/css/pptxjs.css" /><link rel="stylesheet" href="/lib/css/nv.d3.min.css" /><script type="text/javascript" src="/lib/js/jquery-1.11.3.min.js"></script><script type="text/javascript" src="/lib/js/jszip.min.js"></script><script type="text/javascript" src="/lib/js/filereader.js"></script><script type="text/javascript" src="/lib/js/d3.min.js"></script><script type="text/javascript" src="/lib/js/nv.d3.min.js"></script><script type="text/javascript" src="/lib/js/pptxjs.js"></script><script type="text/javascript" src="/lib/js/divs2slides.js"></script><script type="text/javascript" src="/lib/js/jquery.fullscreen-min.js"></script></head><body><div id="app"></div><script type="module" src="/src/main.ts"></script></body>
</html>
  • vue文件中使用
<template><div class="viewXls.vue"><uploadFile accept=".pptx,.PPTX"  @file="getFile"></uploadFile><div ref="pptx" id="pptx"></div></div>
</template><script setup lang="ts">
import { ref } from 'vue'
const pptxUrl = ref()
const pptx = ref()
function getFile(val: any) {let file = URL.createObjectURL(val.raw)pptxUrl.value = file+console.log( pptxUrl.value);// @ts-ignore$("#pptx").pptxToHtml({ pptxFileUrl:  pptxUrl.value, //pptx文件地址slidesScale: "100%", })
}
</script>

5. 文本(csv,json,jsonl,md,txt,py等文本类型的文件)

  • 读取文件内容相关方法:
import jschardet from 'jschardet'
//buffer转文字
export async function readText(buffer:any,fileType:string) {return new Promise((resolve, reject) => {const viewBuf = new Uint8Array(buffer);console.log(viewBuf,'viewBuf');let str = "";for (var index in viewBuf) {str += String.fromCharCode(viewBuf[index]);// @ts-ignoreif (index >= 1000) {//考虑到效率,只取前1000个用于判断字符集break;}}// 判断编码方式的插件,使用上有问题,先写死了编码方式//   var codepage = jschardet.detect(str.substring(0, 1000)).encoding;let code = fileType=='text/csv'?'GB2312':'UTF-8'const reader = new FileReader();reader.onload = loadEvent => resolve(loadEvent.target!.result);reader.onerror = e => reject(e);reader.readAsText(new Blob([buffer]), code);});}
//文件转bufferexport async function readBuffer(file:any) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.onload = loadEvent => resolve(loadEvent.target!.result);reader.onerror = e => reject(e);reader.readAsArrayBuffer(file);});}
  • vue文件中使用
<template><pre><span v-html="text" style=" white-space: pre-wrap;word-wrap: break-word;"></span></pre>
</template><script setup lang="ts">
import { ref } from 'vue'
import { readBuffer, readText } from "@/utils/renderFile";const text = ref();
const fileType = ref("");
async function getFile(val: any) {let file = URL.createObjectURL(val.raw)fileType.value = val.raw.type;let blobFile = new Blob([val]);const buffer = await readBuffer(blobFile);text.value = await readText(buffer, fileType.value);console.log(text,'text');
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis八股

文章目录 数据类型字符串实现使用场景 List 列表实现使用场景 Hash 哈希实现使用场景 Set 集合实现使用场景 ZSet 有序集合实现使用场景 BitMap实现使用场景 Stream使用场景pubsub为什么不能作为消息队列 数据结构机制SDS 简单动态字符串压缩列表哈希表整数集合跳表quicklistli…

vue3+electron开发桌面应用,静态资源处理方式及路径问题总结

1、静态资源放到src/assets/目录下 静态资源,例如图片、静态的JSON文件、视频、CSS等等,放到src/assets目录下。 不然会很蛋疼,这个坑我踩过了。切记,切记!! 以下是CHATGPT-4 Turbo的回答: 在 Vue 应用程序中,src/assets 目录确实有特别的处理。当你使用 Vue CLI 创…

每日五道java面试题之spring篇(七)

目录&#xff1a; 第一题. 什么是Spring beans&#xff1f;第二题. 一个 Spring Bean 定义 包含什么&#xff1f;第三题. 如何给Spring 容器提供配置元数据&#xff1f;Spring有几种配置方式?第四题. Spring基于xml注入bean的几种方式?第五题&#xff1a;你怎样定义类的作用域…

【USENIX论文阅读】Day2

Birds of a Feather Flock Together: How Set Bias Helps to Deanonymize You via Revealed Intersection Sizes&#xff08;"物以类聚&#xff1a;集合偏差如何帮助去匿名化——通过揭示交集大小&#xff09; Xiaojie Guo, Ye Han, Zheli Liu, Ding Wang, Yan Jia, Jin L…

thinkphp6定时任务

这里主要是教没有用过定时任务没有头绪的朋友, 定时任务可以处理一些定时备份数据库等一系列操作, 具体根据自己的业务逻辑进行更改 直接上代码 首先, 是先在 tp 中的 command 方法中声明, 如果没有就自己新建一个, 代码如下 然后就是写你的业务逻辑 执行定时任务 方法写好了…

ConvNeXt V2:用MAE训练CNN

论文名称&#xff1a;ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间&#xff1a;CVPR2023 code链接&#xff1a;代码 作者及组织: Sanghyun Woo&#xff0c;Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

【PyTorch][chapter 18][李宏毅深度学习]【无监督学习][ VAE]

前言: VAE——Variational Auto-Encoder&#xff0c;变分自编码器&#xff0c;是由 Kingma 等人于 2014 年提出的基于变分贝叶斯&#xff08;Variational Bayes&#xff0c;VB&#xff09;推断的生成式网络结构。与传统的自编码器通过数值的方式描述潜在空间不同&#xff0c;它…

排序(9.17)

1.排序的概念及其运用 1.1排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记…

实战 vue3 使用百度编辑器ueditor

前言 在开发项目由于需求vue自带对编辑器不能满足使用&#xff0c;所以改为百度编辑器&#xff0c;但是在网上搜索发现都讲得非常乱&#xff0c;所以写一篇使用流程的文章 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、下载ueditor编辑器 一个“…

三数之和(哈希,双指针)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 方法1&#xff1a;哈希算法&#xff08;不推荐&#xff09; 缺点&#xff1a;时间复杂度O&#xff08;N^2&#xff09;&#xff0c;去重情况复杂 class Solution { public:vector<vector<int>> threeSum(ve…

【Java EE初阶二十五】简单的表白墙(一)

1. 前端部分 1.1 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版&#xff0c;省的安装。。解压到任意位置&#xff0c;备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…

【非递归版】归并排序算法(2)

目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析​ 代码实现 时间复杂度 归并排序在硬盘上的应用&#xff08;外排序&#xff09; MergeSortNonR归并排序 前面的快速排序的非递归实现&#xff0c;我们借助栈实现。这里我们能否也借助栈去…

国产服务器操作系统

为何记录 最近的开发工作经常接触到国产服务器操作系统的业务&#xff0c;经常被x86、arm、龙芯、鲲鹏、欧拉...搞得一脸懵逼&#xff0c;遂记之&#xff01; 操作系统 这里按照应用场景分&#xff1a; 桌面操作系统&#xff1a;主要用于pc&#xff0c;如Windows、macOS、Li…

MATLAB练习题:电子管的更换策略问题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在一台设备上&#xff0c;安装有四只型号和规格完全相同的电子…

腾讯design vue项目 上传桶 腾讯云的桶 对象存储 打包web端项目上传dist

1.说明 将腾讯design 项目上传到 腾讯云的对象存储中 &#xff0c;但是发现 再这个腾讯design项目中 直接npm run build 打包以后 上传 发现 不能用 需要配置东西 2.解决 使用腾讯云的cos-nodejs-sdk-v5 插件 代码上传 cos-nodejs-sdk-v5 - npm npm i cos-nodejs-sdk-v5 …

[算法沉淀记录]排序算法 —— 快速排序

排序算法 —— 快速排序介绍 基本概念 快速排序&#xff08;Quicksort&#xff09;是一种排序算法&#xff0c;最早由东尼霍尔提出。在平均状况下&#xff0c;排序 n 个项目要 Ο(n log n) 次比较。在最坏状况下则需要 Ο(n2) 次比较&#xff0c;但这种状况并不常见。事实上&…

《论文阅读》一个基于情感原因的在线共情聊天机器人 SIGIR 2021

《论文阅读》一个基于情感原因的在线共情聊天机器人 前言简介数据集构建模型架构损失函数实验结果咨询策略总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Towards an Online Empathetic Chatbot…

EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成

EMQX Enterprise 5.5.0 版本已正式发布&#xff01; 在这个版本中&#xff0c;我们引入了一系列新的功能和改进&#xff0c;包括对 Elasticsearch 的集成、Apache IoTDB 和 OpenTSDB 数据集成优化、授权缓存支持排除主题等功能。此外&#xff0c;新版本还进行了多项改进以及 B…

设计模式(二)单例模式的七种写法

相关文章设计模式系列 面试的时候&#xff0c;问到许多年轻的Android开发他所会的设计模式是什么&#xff0c;基本上都会提到单例模式&#xff0c;但是对单例模式也是一知半解&#xff0c;在Android开发中我们经常会运用单例模式&#xff0c;所以我们还是要更了解单例模式才对…