实现方案

找了网上的实现方案,效果看起来不错,放在下面的表格里,里面有一些是可以直接通过npm在vue中引入使用。

文档格式 老的开源组件 替代开源组件
word(docx) mammoth docx-preview(npm)
powerpoint(pptx) pptxjs pptxjs改造开发
excel(xlsx) sheetjs、handsontable exceljs(npm)、handsontable(npm)
pdf(pdf) pdfjs pdfjs-dist(npm)

docx文件实现前端预览

代码实现

  • 首先npm i docx-preview (官网连接:https://www.npmjs.com/package/docx-preview)
    引入renderAsync方法
    将blob数据流传入方法中,渲染word文档
    只支持Blob | ArrayBuffer | Uint8Array这三种类型的数据
import { defaultOptions, renderAsync } from "docx-preview";
renderAsync( Blob | ArrayBuffer | Uint8Array, document.getElementById("container"), null,{className: string = "docx", // 默认和文档样式类的类名/前缀inWrapper: boolean = true, // 启用围绕文档内容渲染包装器ignoreWidth: boolean = false, // 禁止页面渲染宽度ignoreHeight: boolean = false, // 禁止页面渲染高度ignoreFonts: boolean = false, // 禁止字体渲染breakPages: boolean = true, // 在分页符上启用分页ignoreLastRenderedPageBreak: boolean = true,//禁用lastRenderedPageBreak元素的分页experimental: boolean = false, //启用实验性功能(制表符停止计算)trimXmlDeclaration: boolean = true, //如果为真,xml声明将在解析之前从xml文档中删除debug: boolean = false, // 启用额外的日志记录}
);

实现效果

pdf实现前端预览

使用步骤

  1. 首先npm i pdfjs-dist
  2. 设置PDFJS.GlobalWorkerOptions.workerSrc的地址
  3. 通过PDFJS.getDocument处理pdf数据,返回一个对象pdfDoc
  4. 通过pdfDoc.getPage单独获取第1页的数据
  5. 创建一个dom元素,设置元素的画布属性
  6. 通过page.render方法,将数据渲染到画布上

代码实现

import * as PDFJS from "pdfjs-dist/legacy/build/pdf";
// 设置pdf.worker.js文件的引入地址
PDFJS.GlobalWorkerOptions.workerSrc = require("pdfjs-dist/legacy/build/pdf.worker.entry.js");
// data是一个ArrayBuffer格式,也是一个buffer流的数据
PDFJS.getDocument(data).promise.then(pdfDoc=>{const numPages = pdfDoc.numPages; // pdf的总页数// 获取第1页的数据pdfDoc.getPage(1).then(page =>{// 设置canvas相关的属性const canvas = document.getElementById("the_canvas");const ctx = canvas.getContext("2d");const dpr = window.devicePixelRatio || 1;const bsr =ctx.webkitBackingStorePixelRatio ||ctx.mozBackingStorePixelRatio ||ctx.msBackingStorePixelRatio ||ctx.oBackingStorePixelRatio ||ctx.backingStorePixelRatio ||1;const ratio = dpr / bsr;const viewport = page.getViewport({ scale: 1 });canvas.width = viewport.width * ratio;canvas.height = viewport.height * ratio;canvas.style.width = viewport.width + "px";canvas.style.height = viewport.height + "px";ctx.setTransform(ratio, 0, 0, ratio, 0, 0);const renderContext = {canvasContext: ctx,viewport: viewport,};// 数据渲染到canvas画布上page.render(renderContext);})
})

实现效果

ps:当然服务器也可以穿pdf的在线预览链接,我们通过window.open(’pdf地址‘) 重新打开一个浏览器窗口就能浏览了。

excel实现前端预览

使用步骤

  1. npm install xlsx ,注意要安装0.16.0的版本
<template><div><input type="file" @change="upload" /></div>
</template><script setup>
//在线预览excel
import XLSX from "xlsx";
//我们一般从后台获取文件数据或者本地读取xlsx格式的文件基本都是获取的arraybuffer类型,我们将其转为unit8Array格式的数组,之后xlsx插件会帮我们将其解析。
//最终解析出来的数据格式是一个数组,数组每一项是一个对象,该对象代表之前xlsx每一行数据。对象中的每个属性代表每一列的表头
var upload = function (e) {const reader = new FileReader();var file = e.target.files[0];reader.readAsArrayBuffer(file);//将文件对象读取为arraybuffer类型的数据reader.onload = (event) => {var data = new Uint8Array(event.target.result);var workbook = XLSX.read(data, { type: "array" });var sheetNames = workbook.SheetNames; // 工作表名称集合var worksheet = workbook.Sheets[sheetNames[0]];var excelData = XLSX.utils.sheet_to_json(worksheet);console.log(excelData)//最终解析xlsx格式的文件得出来的数据};
};
</script><style>
</style>

实现效果

pptx的前端预览

主要是通过jszip库,加载二进制文件,再经过一些列处理处理转换实现预览效果,实现起来比较麻烦,就不贴代码了,感兴趣的可以下载代码查看。

实现效果

代码地址:https://github.com/zhuye1993/file-view
作者:竹业 https://juejin.cn/post/7071598747519549454

前端实现在线预览word(docx),pdf,excel类型的文件相关推荐

  1. (开源kkFileView、kkOffice)在线预览word、pdf、ofd、excel、ppt、压缩包、图片等等

    (开源kkFileView.kkOffice)在线预览word.pdf.ofd.excel.ppt.压缩包.图片等 前言 此项目为文件文档在线预览项目解决方案,对标业内付费产品有[永中office][ ...

  2. 在线预览Word、PDF、图片(IE、Edge、Google、FireFox等主流浏览器)

    支持IE.Edge.Google.FireFox等主流浏览器处理在线预览Word.PDF.JPG.JPEG等格式文件或图片. var id=ID; if(id!=undefined){var hasI ...

  3. vue在线预览word,pdf, xls,ppt 文档

    首先先踩坑(也不算坑,只是跟我的需求不匹配) 一 ,官方渠道 使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officea ...

  4. 在线预览word文档

    在线预览word文档 在线预览word文档 Java 使用wps将word文件转换pdf文件 转成PDF 在线预览word(转成pdf)前端展示 欢迎来提更好的意见 在线预览word文档 昨天下午组长 ...

  5. 前端在线预览word,excel,pdf

    前端在线预览word,excel,pdf 预览Word 预览pdf 预览Excel 预览Word 微软的在线预览功能,可以预览word.ppt.Excel.PDF 局限: 需要外网能访问文件,如果是只 ...

  6. 【前端实现在线预览ppt、word、xls、pdf、视频】

    前端实现在线预览ppt.word.xls.pdf.视频 一. 预览ppt.word.xls 注意:无法打开文档? 二. pdf 三. 视频预览 一. 预览ppt.word.xls 转载地址: http ...

  7. 在线浏览pdf doc html,前端实现在线预览pdf、word、xls、ppt等文件

    1.前端实现pdf文件在线预览功能 方式一: 通过a标签href属性实现 pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签hr ...

  8. 前端页面预览word_详解html实现在线预览word、excel、pdf等文件的功能(附代码)_WEB前端开发...

    JavaScript判断"字典"为空的方法_WEB前端开发 字典是一种存储键值对的数据结构,Javascript中的Object类内部即实现为一个字典,本文就来为大家介绍一下判断字 ...

  9. Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等

    前言 PDF.TXT 只要资源可访问,根本就不需要进行任何处理,直接访问查看就完事了. 也是因为这个PDF可以直接查看(现在浏览器基本支持了),那么我们实现Word文档在线预览,其实也是 把WORD文 ...

  10. mvc直接在html页面预览pdf,Asp.net MVC 实现在线预览word、excel、ppt、pdf文件

    在线预览word.excel.ppt 原理:主要是引用第三方Dll使本地word.excel.ppt文件转换成Html 需要引用 : Aspose.Cells.dll Aspose.Slides.dl ...

最新文章

  1. python 自动生成C++代码 (代码生成器)
  2. 腾讯裁撤中层干部,拥抱年轻人
  3. 415 (Unsupported Media Type)
  4. 项目三(2)——抽象类
  5. 嵌入式开发中对(*(volatile unsigned long *)) 的理解
  6. 【Unity】6.8 Quaternion类(四元数)
  7. 【NOI2016】优秀的拆分【后缀数组】【ST表】【关键点】【调和级数复杂度】【差分】
  8. 14种方法助你参与开源项目
  9. requirejs加载顺序_前端模块化之AMD — Requirejs的使用
  10. ios中蓝牙自动连接出现硬件提示框的问题
  11. redis双写一致性问题
  12. 9大代理服务器软件的比较与分析
  13. python-RFM模型
  14. 【Python 项目】02 微信定时发送消息
  15. CSS3元素闪烁效果
  16. Nginx正则表达式locationrewrite
  17. YUI中一些方法总结
  18. 电商平台分析平台----需求六:实时统计之黑名单机制
  19. 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作
  20. 5-5中央处理器-指令流水线

热门文章

  1. Centos7 设置环境变量
  2. html左侧树形图,Qunee for HTML5 - 中文 : 树形布局
  3. windows系统注册dll文件
  4. python采集直播间数据_利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!...
  5. 使用Zoiper与freeSWITCH开视频会议
  6. 从0到1打造自己的网络电话系统
  7. mt4怎么用云服务器跟单,免费好用的跟单系统 神速MT4跟单ea系统使用教程
  8. html点击图片局部放大,鼠标单击实现放大镜图片局部放大效果
  9. 2.3安装工业相机SDK及测试
  10. Jmeter接口压力测试学习总结