位置: 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 下载)

  • 鸿蒙OS原生版1.02怎么样(鸿蒙os1.0.1.66)

    鸿蒙OS原生版1.02怎么样(鸿蒙os1.0.1.66)

  • 隔空投送失败(隔空投送失败是为什么)

    隔空投送失败(隔空投送失败是为什么)

  • 华为手机不灭屏怎么办(华为手机不灭屏怎么弄)

    华为手机不灭屏怎么办(华为手机不灭屏怎么弄)

  • 华为手机怎么停止运行(华为手机怎么停用另一张卡)

    华为手机怎么停止运行(华为手机怎么停用另一张卡)

  • 芒果tv手机浮窗权限在哪设置(手机芒果tv浮窗在哪里)

    芒果tv手机浮窗权限在哪设置(手机芒果tv浮窗在哪里)

  • 麒麟820等于骁龙多少(麒麟820等于骁龙多)

    麒麟820等于骁龙多少(麒麟820等于骁龙多)

  • 烧屏可以保修吗(烧屏保修吗好的)

    烧屏可以保修吗(烧屏保修吗好的)

  • 微信电话和qq电话可以一起打吗(微信电话和qq电话哪个更稳定)

    微信电话和qq电话可以一起打吗(微信电话和qq电话哪个更稳定)

  • xp系统ip冲突怎么解决

    xp系统ip冲突怎么解决

  • 360浏览器下载速度慢怎么办(360浏览器下载速度慢)

    360浏览器下载速度慢怎么办(360浏览器下载速度慢)

  • 华为可以用谷歌吗(华为可以用谷歌相机吗)

    华为可以用谷歌吗(华为可以用谷歌相机吗)

  • 索尼电视连接音响不响(索尼电视连接音响没声音)

    索尼电视连接音响不响(索尼电视连接音响没声音)

  • 天猫淘气值怎么增加(天猫淘气值怎么到1000要消费多少)

    天猫淘气值怎么增加(天猫淘气值怎么到1000要消费多少)

  • 如何开启快手直播权限(如何开启快手直播回放)

    如何开启快手直播权限(如何开启快手直播回放)

  • 乐视手机怎么导入联系人(乐视手机怎么导出联系人到sim卡)

    乐视手机怎么导入联系人(乐视手机怎么导出联系人到sim卡)

  • icloud满了怎么删除(icloud满了怎么清理)

    icloud满了怎么删除(icloud满了怎么清理)

  • 怎么看苹果手机基带是高通还是英特尔(怎么看苹果手机内存)

    怎么看苹果手机基带是高通还是英特尔(怎么看苹果手机内存)

  • 联想笔记本怎么进入安全模式(联想笔记本怎么开机按哪个键啊)

    联想笔记本怎么进入安全模式(联想笔记本怎么开机按哪个键啊)

  • 电信ipv6是什么网络(电信ipv6是固定的吗)

    电信ipv6是什么网络(电信ipv6是固定的吗)

  • qq怎样获得内测资格(怎样获得qq内测版)

    qq怎样获得内测资格(怎样获得qq内测版)

  • uni-app 自定义下拉框(uniapp自定义下拉刷新上拉加载)

    uni-app 自定义下拉框(uniapp自定义下拉刷新上拉加载)

  • 纽约公共图书馆总部翻新后的玫瑰主阅览室,纽约市 (© Sascha Kilmer/Getty Images)(纽约公共图书馆开放时间)

    纽约公共图书馆总部翻新后的玫瑰主阅览室,纽约市 (© Sascha Kilmer/Getty Images)(纽约公共图书馆开放时间)

  • YOLOv7(目标检测)入门教程详解---检测,推理,训练(yolov5目标检测代码)

    YOLOv7(目标检测)入门教程详解---检测,推理,训练(yolov5目标检测代码)

  • 代收车船税如何计算
  • 银行收取的账户管理费是什么费用
  • 劳务费发票可以抵扣进项税吗
  • 其他债权投资的交易费用计入什么科目
  • 小规模纳税人开票税率
  • 纳税申报方式如何更改
  • 出纳日常工作内容总结
  • 企业所得税的征税对象包括
  • 一般纳税人资格证明在哪里打印
  • 以旧换新的会计处理规定
  • 其他应付款重分类到哪个科目
  • 公司名字开错了,认证过了怎么处理
  • 社会保险基金管理局是干什么的
  • 汽车融资租赁行业发展趋势
  • 工会经费的计税基础
  • 其他业务收入是什么意思
  • 房地产企业转让股权缴纳土地增值税
  • 无产权车位20年到期后还收费吗
  • 公司注册资金未实缴可以申请破产吗
  • 没有及时去做财务会计制度备案怎么办?
  • 调整以前年度损益调整汇算清缴
  • 资产负债表要填年初余额吗
  • 库存与账面不符怎么办
  • appdata如何移动
  • windows11怎么创建宽带拨号连接图标
  • 出纳交接工作注意
  • 增值税发票是不是可以抵税
  • 购买保本理财产品
  • 企业废业实收资产怎么算
  • PHP:mb_ereg_match()的用法_mbstring函数
  • 苹果15手机价格和图片颜色
  • win10excel闪退是什么原因
  • 一次摊销法优缺点
  • 购货返利怎么做账
  • 银行收取对公账户服务费有什么用
  • 坏账准备的会计准则规定
  • 工业设备类型分为以下三类
  • php获取表单数据保存到mysql中
  • 分页的实现
  • 【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?
  • php t_string
  • 法院判定支付对方诉讼费,我可以入账吗
  • python导入其他文件的函数
  • 退货可以开红字发票吗
  • 纳税调整项目明细表利息支出怎么填
  • mongodb从入门到商业实战
  • php指定域名访问
  • 作废发票要不回来了怎么办
  • 实收资本的账务处理与其他应收款
  • 利润表中的所得税费用包括哪些
  • 商业承兑汇票如何承兑?
  • 留抵进项税太多怎么办
  • 公司水电费分摊怎么算
  • 库存现金盘点表模板
  • 公司发放节日礼品
  • 汇算清缴缴纳的所得税怎么做账
  • 合伙企业所得税率
  • 收到了对方的作业怎么办
  • 冲红的发票抵扣联要放在凭证里吗
  • 月末一次加权平均和移动加权平均的区别
  • mysql正则表达式匹配数字
  • freebsd常用命令
  • 注册表已被管理员禁用怎么处理
  • 445端口 关闭
  • 32位/64位Win10系统开机后桌面图标自动排列的解决办法
  • 怎么把硬盘安装到电脑上
  • 无法打开opencv2
  • cocos creator开发文档
  • unity开发游戏教程
  • cocos2djs
  • 什么是自然数
  • cacls命令怎么运用
  • jQuery.ajax实现根据不同的Content-Type做出不同的响应
  • javascript简明教程
  • jq form提交
  • 道路运输业属于工贸行业吗
  • 北京医保网上服务大厅
  • 重庆电子税务局官网登录入口
  • 财务制度备案表单怎么填
  • 河北省原地税局领导班子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设