位置: IT常识 - 正文

vue 预览 word(vue预览word加水印)

编辑:rootadmin
vue 预览 word

推荐整理分享vue 预览 word(vue预览word加水印),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue预览word文件并能打印,vue预览word插件,vue预览word文件并能打印,vue预览word插件,vue预览word文件并能打印,vue预览word文件并能打印,vue预览word文件二进制流,vue预览word插件,内容如对您有帮助,希望把文章链接给更多的朋友!

最近做的项目要求实现预览word, pdf,png等文件功能,pdf以及png都很简单,轻松百度搞定,但是word预览研究了好久,所以特此记录分享。

前端实现预览word分为两种,一种是上传前预览(也就是前端使用input或者组件等选择文件后直接预览,此时还没有上传给后端,我定义为纯前端预览),一种是上传后预览(就是文档已经上传到后端,通过后端给的文件流实现预览)

一、先说第一种的实现方式:

首先下载安装docx-preview,引入

npm install xlsx docx-preview --saveimport { defaultOptions, renderAsync } from "docx-preview";var docxx = require("docx-preview");

我这里使用的是element ui 上传组件

<el-upload    class="upload-demo"    action=""    :http-request="myUpload"    :show-file-list="false"    >    <span class = "uploadEnclosure">上传附件</span>    </el-upload>

选择文件以后

myUpload(content){console.log(content);const downUrl = URL.createObjectURL(content.file)const a = document.createElement('a');this.$refs.selectFileNameBox.innerHTML = "";this.$refs.selectFileNameBox.append(a);a.innerHTML = content.file.name;a.href = downUrla.download = content.file.name;a.target = '_blank';const addTypeArray = content.file.name.split(".");const addType = addTypeArray[addTypeArray.length - 1];console.log(addType);this.uploadFileName = content.file.name;this.uploadFileObj = content.file;if (addType === "pdf") {const url = URL.createObjectURL(content.file);console.log(url);this.xzbjPreviewIframeSrc = url;this.xzbjIframeIsShow = true;this.xzbjDialogPreviewDiv = false;this.xzbjPreviewImgUrl = "";this.xzbjDocPreviewFlag = false;this.previewBoxStyle = "height:400px;position: relative;overflow:hidden;"}else if(addType === "doc" || addType === "docx" || addType === "word"){console.log("word文件预览")this.xzbjPreviewImgUrl = "";this.xzbjPreviewIframeSrc = "";this.xzbjDialogPreviewDiv = false;this.xzbjDocPreviewFlag = true;this.xzbjIframeIsShow = false;// 将file转为bufferlet fr = new FileReader();fr.readAsArrayBuffer(content.file);fr.addEventListener("loadend",(e) => {console.log("loadend---->", e)let buffer = e.target.result;this.docxRender(buffer);},false);}//".rar, .zip, .doc, .docx, .xls, .txt, .pdf, .jpg, .png, .jpeg,"else if (["png", "jpg", "jpeg","bmp"].includes(addType)) {this.xzbjPreviewIframeSrc = "";this.xzbjIframeIsShow = false;this.xzbjDocPreviewFlag = false;this.imgPreview(content.file);this.previewBoxStyle = "height:400px;position: relative;overflow:auto;"} else if (addType === "rar" || addType === "zip" || addType === "7z") {this.filePreviewInfo = "请下载附件进行查看"this.xzbjPreviewImgUrl = "";this.xzbjPreviewIframeSrc = "";this.xzbjDocPreviewFlag = false;this.xzbjDialogPreviewDiv = true;this.$message({message: "该文件类型暂不支持预览",type: "warning",});return false;}else{this.filePreviewInfo = "该文件类型暂不支持预览"this.xzbjPreviewIframeSrc = "";this.xzbjIframeIsShow = false;this.xzbjDialogPreviewDiv = true;this.xzbjPreviewImgUrl = "";this.xzbjDocPreviewFlag = false;this.$message({message: "请仅允许上传后缀为pdf、doc、docx、word、jpg、png、bmp、rar、zip、7z的附件",type: "warning",});}}// 渲染docxdocxRender(buffer) {let bodyContainer = document.getElementById("demoDocContainer");renderAsync(buffer, // Blob | ArrayBuffer | Uint8Array, 可以是 JSZip.loadAsync 支持的任何类型bodyContainer, // HTMLElement 渲染文档内容的元素,null, // HTMLElement, 用于呈现文档样式、数字、字体的元素。如果为 null,则将使用 bodyContainer。this.docxOptions // 配置).then(res => {console.log("res---->", res)})},vue 预览 word(vue预览word加水印)

下面是图片预览核心代码

imgPreview(file) {// 看支持不支持FileReaderif (!file || !window.FileReader) return;// console.log(/^image/.test(file.type), "---/^image/.test(file.type)")if (/^image/.test(file.type)) {// 创建一个readerlet reader = new FileReader();// 将图片将转成 base64 格式reader.readAsDataURL(file);// 读取成功后的回调reader.onload = ({ target }) => {this.xzbjDialogPreviewDiv = false;this.xzbjPreviewImgUrl = target.result; //将img转化为二进制数据// console.log("target:", target);};}},

这样就实现了纯前端预览word功能

二、接下来实现 配合后端预览word

根据后端返回的流预览word

request({    method: "get",    url: "/notice/noticeFileView",    responseType: 'blob',    params:{    id:row.id    },    headers: {    "Content-Type": 'application/json'    },    }).then(res=>{    console.log(res,"---文件预览");       if(row.suffix.includes("pdf")){    this.previewPdfFn(res);    // let blob = new Blob([res],{    // type: 'application/pdf'    // })    // let url = window.URL.createObjectURL(blob);    this.xqPreviewImgUrl = "";    this.xqPreviewPdfUrl = this.previewPdfFn(res);    this.xqPdfPreviewFlag = true;    this.xqDocPreviewFlag = false;    this.xqPerviewStyle = "height:600px;position: relative;overflow:hidden"    }else if(row.suffix.includes("docx") || row.suffix.includes("doc")|| row.suffix.includes("word")){    console.log("预览word")    this.xqDocPreviewFlag = true;    let blob = new Blob([res],{    type: 'application/pdf'    })    this.$nextTick(()=>{    console.log(this.$refs.xqDocContainer,"---this.$refs.xqDocContainer")    docxx.renderAsync(blob, this.$refs.xqDocContainer)    })       } else if (row.suffix === ".rar" || row.suffix === ".zip" || row.suffix === "7z") {    this.xqDocPreviewFlag = false;    this.xzbjPreviewImgUrl = "";    this.xzbjPreviewIframeSrc = "";    this.$message({    message: "该文件类型暂不支持预览",    type: "warning",    });    return false;    }else if([".png", ".jpg", ".jpeg",".bmp"].includes(row.suffix)){    let blob = new Blob([res],{    type: 'application/pdf'    })    console.log(blob,"---blob")    let url = window.URL.createObjectURL(blob);    this.xqPreviewImgUrl = url;    this.xqPdfPreviewFlag = false;    this.xqDocPreviewFlag = false;    this.xqPreviewPdfUrl = "";    this.xqPerviewStyle = "height:600px;position: relative;overflow:auto"    }       this.xqDialogPreviewDiv = false;    }).catch(err=>{    console.log(err,"--文件预览失败")    })

完毕

下面是参考链接:

https://www.jianshu.com/p/8e1e90570c52 预览word excel

https://blog.csdn.net/kaimo313/article/details/127012225 vue里使用docx-preview预览docx文件

https://volodymyrbaydalka.github.io/docxjs/

最后是一个好友赠送的组件

<template><div class="docx-preview-wrap"><h4><input type="file" id="file" accept=".docx" @change="getFile"/></h4><div id="bodyContainer"></div></div></template><script>import { defaultOptions, renderAsync } from "docx-preview";console.log(defaultOptions);export default {name: 'DocxPreview',data () {return {docxOptions: {className: "kaimo-docx-666", // string:默认和文档样式类的类名/前缀inWrapper: true, // boolean:启用围绕文档内容的包装器渲染ignoreWidth: false, // boolean:禁用页面的渲染宽度ignoreHeight: false, // boolean:禁止渲染页面高度ignoreFonts: false, // boolean:禁用字体渲染breakPages: true, // boolean:在分页符上启用分页ignoreLastRenderedPageBreak: true, // boolean:在 lastRenderedPageBreak 元素上禁用分页experimental: false, // boolean:启用实验功能(制表符停止计算)trimXmlDeclaration: true, // boolean:如果为true,解析前会从​​ xml 文档中移除 xml
本文链接地址:https://www.jiuchutong.com/zhishi/300043.html 转载请保留说明!

上一篇:过来人告诉你:Java学到什么程度可以找工作?(过来人告诉你:女人最珍贵的三种东西,舍得给你说明爱你)

下一篇:nodejs的下载安装(nodejs 下载)

  • 苹果手机怎么开120帧数设置(苹果手机怎么开闪光灯)

    苹果手机怎么开120帧数设置(苹果手机怎么开闪光灯)

  • 华为nova5i pro上网慢怎么办(华为nova5ipro上拉功能)

    华为nova5i pro上网慢怎么办(华为nova5ipro上拉功能)

  • 取消网页导航如何恢复(已取消网页导航弹窗)

    取消网页导航如何恢复(已取消网页导航弹窗)

  • ios13什么时间更新(ios13.4什么时候更新)

    ios13什么时间更新(ios13.4什么时候更新)

  • 华为怎么设置10分钟锁屏(华为怎么设置10秒后拍照)

    华为怎么设置10分钟锁屏(华为怎么设置10秒后拍照)

  • 小程序商城和微商城的区别(小程序商城和微信小店的区别)

    小程序商城和微商城的区别(小程序商城和微信小店的区别)

  • UV即独立访客(uv访问量)

    UV即独立访客(uv访问量)

  • 华为手机怎么换免费铃声(华为手机怎么换锁屏壁纸)

    华为手机怎么换免费铃声(华为手机怎么换锁屏壁纸)

  • 模拟电视和数字电视是什么意思(模拟电视和数字地面)

    模拟电视和数字电视是什么意思(模拟电视和数字地面)

  • b站充电是什么意思(b站充电能赚钱吗)

    b站充电是什么意思(b站充电能赚钱吗)

  • 离线与离线请留言有什么区别(离线与离线请留言的区别)

    离线与离线请留言有什么区别(离线与离线请留言的区别)

  • 华为白名单什么意思(华为白名单什么用)

    华为白名单什么意思(华为白名单什么用)

  • mqa62cha是什么版本(mqa62zp/a是什么版本)

    mqa62cha是什么版本(mqa62zp/a是什么版本)

  • ps图像大小调整快捷键(ps图像大小调整正方形)

    ps图像大小调整快捷键(ps图像大小调整正方形)

  • 小米换机卡住不动了怎么办(小米手机换机过程中一直卡在44%)

    小米换机卡住不动了怎么办(小米手机换机过程中一直卡在44%)

  • iphone6s用什么卡(6s插什么卡)

    iphone6s用什么卡(6s插什么卡)

  • 苹果远程热点故障什么意思(苹果远程热点故障)

    苹果远程热点故障什么意思(苹果远程热点故障)

  • 手机怎么互传软件(手机怎么互传软件数据)

    手机怎么互传软件(手机怎么互传软件数据)

  • ios应用与数据在哪(ipone应用与数据)

    ios应用与数据在哪(ipone应用与数据)

  • 华为mate30单卡还是双卡(华为mate30有单卡机吗)

    华为mate30单卡还是双卡(华为mate30有单卡机吗)

  • nova5pro耳机孔在哪(nova5z耳机孔)

    nova5pro耳机孔在哪(nova5z耳机孔)

  •  qq被盗了绑了其他手机号怎么办(qq被盗了绑了其他手机号怎么办2022)

    qq被盗了绑了其他手机号怎么办(qq被盗了绑了其他手机号怎么办2022)

  • 苹果手机升级微信最新版本教程(苹果手机升级微信版本)

    苹果手机升级微信最新版本教程(苹果手机升级微信版本)

  • 克林格尔农场的Mazezilla玉米田迷宫,宾夕法尼亚州  (© Alex Potemkin/Getty Images)(克雷格格林)

    克林格尔农场的Mazezilla玉米田迷宫,宾夕法尼亚州 (© Alex Potemkin/Getty Images)(克雷格格林)

  • vue-treeselect 的基本使用(vue treegrid)

    vue-treeselect 的基本使用(vue treegrid)

  • 税后经营净利率什么意思
  • 五万元劳务费税率
  • 增值税专票开户行
  • 进销存账需要合并吗
  • 企业销售使用过的固定资产
  • 企业想成为退税商店需具备哪些条件
  • 旅游费用可以报销吗
  • 企业收到银行收款通知
  • 单独计价入账的土地是无形资产吗
  • 销售库存商品是什么凭证
  • 企业汽油费会计分录
  • 实验设备折旧率
  • .车船税不在汽车保险里如何入账
  • 待抵扣进项税额转出会计分录
  • 超过三年的坏帐损失税前扣除怎样规定?
  • 鸿蒙系统通知栏和控制
  • 鸿蒙系统开发人员选项
  • 微软发布新windows
  • 路由器管家怎么登录
  • 应收账款的内容包括
  • 银行承兑汇票接收
  • 车辆维修费可以抵扣进项吗
  • internet笔记
  • 老板和公司账务处理流程
  • flash player用不了怎么办
  • 用系统自带命令行安装WIN10
  • 在XP中,为什么"网络连接"图标消失?
  • igfxsrve.exe
  • 公司为什么每年都要招人
  • 以太网默认网关怎么查看
  • pavprot.exe - pavprot是什么进程 作用是什么
  • 公司为员工发放生日福利
  • (二) Vue3 + Element-Plus 实现动态菜单栏
  • 公允价值的利弊
  • vue 滚动条往下滑
  • 非城市公交企业管理办法
  • 材料成本差异属于流动资产吗
  • 定额材料损耗的计算公式
  • PHP isset()与empty()的使用区别详解
  • 筹建期如果是一般纳税人 专票以后可以留着抵扣吗
  • vue 父组件调用子组件效果
  • 网络命令netstat
  • php封装app
  • php如何入门
  • 民营医院发票样式
  • 帝国cms如何搭建的
  • PHPCMS 是 ThinkPHP 开发的吗?
  • 弃置费用的现值计入固定资产
  • 当期可抵扣进项税额包括进项转出额吗
  • SQLServer2005与SQLServer2008数据库同步图文教程
  • 个体工商户增值税怎么计算
  • 房地产企业土地增值税预缴
  • 冲销以前年度多提税金
  • 公司地址的变更需要哪些资料和手续
  • 费用利润率计算公式是怎样的?
  • 哪些费用不得计税
  • 未开票收入如何申报增值税,下个月怎么操作
  • 公司变更名字后,公账怎么办
  • 接受政府补助的应纳税所得
  • 冲减多计提的工资摘要怎么写
  • 核销预收账款是否需要计提增值税
  • 英语培训机构成人浦口区
  • 企业被收购的账务处理
  • 年末净利润为负数结转本年利润实例
  • 零售商品购进的核算需要设置什么科目
  • 如何获取数据库的sid
  • xp系统安装惠普1010教程
  • ubuntu 14.04安装
  • ubuntu 无法正常启动
  • mousemenu是什么文件夹
  • 怎么学linux
  • cocos2d getPosition()取不到实际坐标问题
  • js函数调用常用字符串
  • javascript图片切换代码
  • android数据存储总结
  • Javascript字符串奇数位替换
  • 国家税务局科员属于什么级别
  • 内蒙古税务总局网站官网
  • 季度预缴申报表在哪里查询
  • 中华人民共和国道路交通安全法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设