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…

【已解决】UE5 plugin ‘xxx‘ failed to load because module ‘xxx‘ could not be found.

运行unrealeditor-cmd跑commandlet的时候遇到如下报错&#xff1a; plugin ‘xxx’ failed to load because module ‘xxx’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. 解决方案 重编…

Hadoop-Yarn-NodeManager是如何监控容器的

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、上下文 在我的博客<Hadoop-Yarn-NodeManager是如何启动容器的>中的ContainerLaunch prepareForLaunch()会触发Containe…

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;你怎样定义类的作用域…

acwing算法提高之搜索--多源BFS与双端队列BFS

目录 1 专题说明2 训练 1 专题说明 本专题用来计算使用多源BFS和双端队列BFS求解的题目。 2 训练 题目1&#xff1a;173矩阵距离 C代码如下&#xff0c; #include <iostream> #include <queue> #include <cstring>using namespace std;const int N 101…

【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 方法中声明, 如果没有就自己新建一个, 代码如下 然后就是写你的业务逻辑 执行定时任务 方法写好了…

速盾网络:CDN原理是什么意思啊

CDN&#xff08;内容分发网络&#xff09;是一种网络架构&#xff0c;旨在提高网站的性能、可用性和安全性。它通过在全球范围内部署服务器节点&#xff0c;并将内容存储在这些节点上&#xff0c;以缓解服务器负载、减少用户访问延迟&#xff0c;从而改善用户体验。那么&#x…

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的思想来训练…

cv2.warpAffine和F.grid_sample转换关系

个人笔记&#xff1a; Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

【Kubernetes】部署安装 K8s 为什么要关闭 swap 分区?

目录 swap部署安装 K8s 为什么要关闭 swap 分区&#xff1f; swap 关于什么是swap以及swap有什么用&#xff0c;可以看看这篇文章&#xff1a;Linux 的交换空间&#xff08;swap&#xff09;是什么&#xff1f;有什么用&#xff1f; 部署安装 K8s 为什么要关闭 swap 分区&…

【学习笔记】WOS导出Endnote参考文献步骤

从 Web of Science 导出文献到 EndNote 的基本步骤如下&#xff1a; 访问 Web of Science 数据库&#xff1a; 通过所属学术机构的图书馆网站访问 Web of Science&#xff0c;大多数情况下需要校园网络或VPN。 进行文献检索&#xff1a; 在 Web of Science 中进行关键词搜索&am…

【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 拖入网页搜索替换…

TensorRT及CUDA自学笔记004 内核函数以及两个简单的内核函数demo

TensorRT及CUDA自学笔记004 内核函数以及两个简单的内核函数demo 内核函数是能够在GPU上被线程并发执行的函数 CUDA程序中的函数修饰符 修饰符执行位置调用注意global在设备&#xff08;device&#xff09;上执行主机和compute capabilitiy 3&#xff08;计算能力三级&#…