js前端如何实现图片文本文件预览功能

    实现方案

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

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

    docx文件实现前端预览

    代码实现

    • 首先npm i docx-preview

    • 引入renderAsync方法

    • 将blob数据流传入方法中,渲染word文档

    import { defaultOptions, renderAsync } from "docx-preview";renderAsync(buffer, document.getElementById("container"), null,options: {       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, // 启用额外的日志记录   });

    实现效果

    js前端如何实现图片文本文件预览功能

    pdf实现前端预览

    代码实现

    • 首先npm i pdfjs-dist

    • 设置PDFJS.GlobalWorkerOptions.workerSrc的地址

    • 通过PDFJS.getDocument处理pdf数据,返回一个对象pdfDoc

    • 通过pdfDoc.getPage单独获取第1页的数据

    • 创建一个dom元素,设置元素的画布属性

    • 通过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);    })})

    实现效果

    js前端如何实现图片文本文件预览功能

    excel实现前端预览

    代码实现

    • 下载exceljs、handsontable的库

    • 通过exceljs读取到文件的数据

    • 通过workbook.getWorksheet方法获取到每一个工作表的数据,将数据处理成一个二维数组的数据

    • 引入@handsontable/vue的组件HotTable

    • 通过settings属性,将一些配置参数和二维数组数据传入组件,渲染成excel样式,实现预览

    // 加载excel的数据(new ExcelJS.Workbook().xlsx.load(buffer)).then(workbook=>{   // 获取excel的第一页的数据   const ws = workbook.getWorksheet(1);   // 获取每一行的数据   const data = ws.getRows(1, ws.actualRowCount); })// 渲染页面import { HotTable } from "@handsontable/vue";<hot-table  :settings="hotSettings"></hot-table>hotSettings = {   language: "zh-CN",   readOnly: true,   data: this.data,   cell: this.cell,   mergeCells: this.merge,   colHeaders: true,   rowHeaders: true,   height: "calc(100vh - 107px)",   // contextMenu: true,   // manualRowMove: true,   // 关闭外部点击取消选中时间的行为   outsideClickDeselects: false,   // fillHandle: {   //   direction: 'vertical',   //   autoInsertRow: true   // },   // afterSelectionEnd: this.afterSelectionEnd,   // bindRowsWithHeaders: 'strict',   licenseKey: "non-commercial-and-evaluation"}

    实现效果

    js前端如何实现图片文本文件预览功能

    pptx的前端预览

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

    实现效果

    js前端如何实现图片文本文件预览功能

    以上就是关于“js前端如何实现图片文本文件预览功能”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    文章标题:js前端如何实现图片文本文件预览功能,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22976

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022年9月2日 下午10:21
    下一篇 2022年9月5日 下午11:57

    相关推荐

    • MySQL的rollback实例分析

      本文主要介绍“MySQL的rollback实例分析”的相关知识,文中所提到的一些操作方法不仅实用性强,且操作简单、快捷,不仅能帮助大家取得一定工作成果,而且还能提升工作效率,如果感兴趣的话,请耐心阅读! 事务回滚 事务是关系型数据库里的执行单位,可以通过最后阶段控制选择提交或回滚。在各种无法保证完整…

      2022年6月27日
      16200
    • mysql增加的语句是什么

      增加语句有:1、CREATE DATABASE语句,用于增加数据库,语法“CREATE DATABASE 数据库名;”;2、CREATE TABLE语句,用于增加数据表,语法“CREATE TABLE 表名(列名 类型);”;3、ALTER TABLE语句,可向数据表添加字段,语法“ALTER TA…

      2022年9月21日
      8400
    • win7对象不支持此属性或方法怎么解决

      解决win7对象不支持此属性或方法的步骤 1、打开浏览器,点击右上角工具选项,选择internet选项,如图所示 2、在internet选择中,点击安全选项,点击默认级别,如图所示 3、之后点击“默认级别”选项,点击右下角的“应用”选项,如图所示 4、切换到“高级”选项中将“禁用脚本调试(Inter…

      2022年9月24日
      8100
    • Go中的并发方法实例代码分析

      Hello, Concurrent world 代码很简单——单个通道,单个goroutine,单次写入,单次读取。 package mainfunc main() { // 创建一个int类型的通道 ch := make(chan int) // 开启一个匿名 goroutine go func(…

      2022年9月8日
      11300
    • jmeter正则表达式提取器怎么使用

      使用方法 1,把正则表达式添加到需要提取返回内容的http请求里,添加步骤是,,右键http请求–添加–后置处理器–正则表达式处理器 2,在正则表达式提取器配置设置页里, 1)要检查的响应字段:相当于是要提取哪个位置的内容数据 2)引用名称:我们把内容提取出来后要…

      2022年9月21日
      19100
    • microsoft visual c++可不可以卸载

      microsoft visual c++可以卸载吗 microsoft visual c++不建议卸载。 1.Microsoft Visual C++ Redistributable Package是Visual C++的运行时组件和库 2.很多软件,尤其是游戏所必须的 Microsoft VC++…

      2022年9月2日
      55000
    • SQL查询怎么给表起别名

      可以通过空格或者as给表起别名 但是注意如果操作的数据库是Oracle的话,只能使用空格,as不符合Oracle的语法。 举个栗子 简单查询中使用别名 select *from student swhere s.id = ’10’; 在简单的查询中使用别名,一般没有特别需要注意的地方,要做的操作少 …

      2022年9月8日
      17200
    • Google网页快照对抗小技巧是什么

      Google搜索引擎是大家经常用的搜索工具,更新内容快速,搜索内容准确,但是就是因为更新内容快速,导致有的时候特别讨厌,比如我删除了一个贴子,但是由于网站权值很高,你一发送这个贴子,Google就收录了,导致后来即使你删除了贴子也没有什么用&hellip;&hellip; 那么我们有…

      2022年9月26日
      15200
    • 如何进行bee-box LDAP注入的靶场练习

      如果说sql注入的本质是拼接字符串的话,那么一切可以注入的本质都是拼接字符串,LDAP注入作为注入的一种也不例外,更有趣一点的说它是在拼接圆括号(sql注入也拼接圆括号,但是更习惯性的是说它拼接字符串)。 在环境配置篇里面已经很详细的说了bee-box中ldap环境的配置,靶场练习篇更多的是php与…

      2022年9月18日
      20700
    • MySQL占用内存过大如何解决

      前言 对于部分小资玩家来说,服务器数量和内存往往是很有限的,像我个人的服务器配置就是2核4G5M。 4G内存对于Java玩家来说,真的不大,开几个中间件+自己的微服务真的还蛮挤的,然后又摊上MySQL这个大冤种。我本机上的MySQL仅仅只占几M内存(虽然我不怎么用,但是本机MySQL确实是开着的):…

      2022年9月16日
      26300
    联系我们
    站长微信
    站长微信
    分享本页
    返回顶部