当前位置: 首页 > news >正文

前端使用docx-preview展示docx + 后端doc转docx

文章目录

  • 后端 doc 转 docx
  • dcox - preview
    • 安装
    • 导入
    • 使用
      • 注意

最近菜鸟刚搞完签字,结果需求就加了,如果合同有附件(.doc.docx),签名就是签到附件里面,没有附件才是签到那个html里面!

这里附件签名过后就不能像html那样可以修改原html了,毕竟这个要写入word文档,实现不了,所以我们公司退而求其次只需要记录附件和签字的对应关系,以及何时签字就行!

实现难点在于:前端只能展示docx;后端也不好把 doc、docx 转换为html !(只能说 doc 是什么天杀的格式?)

后端 doc 转 docx

但是好在后端可以将 doc 转成 docx,菜鸟是前端不知道后端咋搞的,只要了点代码过来,各位可以参考一下:

public void docToDocx(String batchId, HttpServletResponse response) throws IOException {
//  FileEntity data = adminFileService.queryOne(batchId).getData();
//  String path = data.getPath();response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");response.setHeader("Content-Disposition", "attachment; filename=\"converted.docx\"");ServletOutputStream outputStream = response.getOutputStream();File inputWord = new File("E:\\03 项目沟通文档\\1820994860746969088-(7.31第二次修改)农大三代建库测序技术委托合同.doc");try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();InputStream docxInputStream = new FileInputStream(inputWord)) {IConverter converter = LocalConverter.builder().build();boolean flag = false;flag = converter.convert(docxInputStream).as(DocumentType.DOC).to(byteArrayOutputStream).as(DocumentType.DOCX).execute();if (flag) {converter.shutDown();}byteArrayOutputStream.writeTo(outputStream);System.out.println("转换成功");} catch (Exception e) {e.printStackTrace();}
}

后端下载的插件名称:

<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version>
</dependency>
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.0.3</version>
</dependency>

好了,后端菜鸟就不多废话了,接下来是重头戏前端代码!

dcox - preview

都转化成了 docx 了,那我前端展示也是分分钟的事情!需要使用插件:dcox - preview !

安装

npm i docx-preview --save

导入

import { renderAsync } from 'docx-preview';

使用

js

getPrintApi(route.query.batchId).then(async (res) => {await nextTick();let reportContainer = document.getElementById("reportContainer");renderAsync(res,reportContainer, // HTMLElement 渲染文档内容的元素,null // HTMLElement, 用于呈现文档样式、数字、字体的元素。如果为 null,则将使用 reportContainer。).then((res) => {console.log("res---->", res);let bigBox = document.querySelector(".bigBox");let contractBox = document.getElementById("reportContainer");let st = window.getComputedStyle(contractBox, null);var tr = st.getPropertyValue("transform");if (tr === "none") {isScale.value = false;bigBox.style.height = "auto";const height = bigBox.offsetHeight;bigBoxHeight.value = height;} else {isScale.value = true;bigBox.style.height = "auto";const height = bigBox.offsetHeight * 0.5;bigBoxmargin.value = (window.innerWidth - 700 * 0.5) / 2;bigBoxHeight.value = height;}}).catch((err) => {console.log(err);// eslint-disable-next-lineElMessage({message: "网络问题,请刷新界面!",type: "error",});});}).catch((err) => {console.log(err);});

template

<template><div class="bigBox" :style="{ height: bigBoxHeight + 'px' }"><div id="reportContainer" :style="{ marginLeft: isScale ? bigBoxmargin + 'px' : 'auto' }"></div></div><div class="btnBox"><el-button type="primary" @click="showSign">前往签字</el-button></div><!-- 签字弹窗 --><sign v-if="signshow" :dialogVisible="signshow" @closeEvent="hideSign"></sign>
</template>

注意

1、这里的请求一定要加上 responseType: “arraybuffer”,

2、这里 bigBoxHeight 、bigBoxmargin 可以见我上一篇文章:前端实现签字效果+合同展示

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HexView 刷写文件脚本处理工具-基本功能介绍(六)-导出MIME/BIN/FIAT/FORD
  • Android摄像头采集选Camera1还是Camera2?
  • 面试题:Java 集合类的遍历方式,如何一边遍历 一边删除?
  • 电子电气架构 --- 基于AUTOSAR方法论的诊断开发流程
  • 02、MySQL-DML(数据操作语言)
  • k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解
  • 【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
  • 如何高效管理餐厅?餐厅收银系统轻松解决!
  • pgbackrest备份方案(差异和增量备份的区别)
  • 如何在SpringBoot中进行单元测试?
  • Visual Studio Code搭建VUE开发环境
  • 【linux】curl命令用法
  • 敏捷开发模式优缺点,对测试人员有哪些要求?
  • python常用标准库
  • Leetcode75-7 除自身以外数组的乘积
  • [译]Python中的类属性与实例属性的区别
  • 【笔记】你不知道的JS读书笔记——Promise
  • Druid 在有赞的实践
  • iOS小技巧之UIImagePickerController实现头像选择
  • JAVA SE 6 GC调优笔记
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Redux系列x:源码分析
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Vim 折腾记
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 程序员该如何有效的找工作?
  • 从零开始在ubuntu上搭建node开发环境
  • 机器学习中为什么要做归一化normalization
  • 解析 Webpack中import、require、按需加载的执行过程
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 容器服务kubernetes弹性伸缩高级用法
  • 学习笔记:对象,原型和继承(1)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • raise 与 raise ... from 的区别
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​比特币大跌的 2 个原因
  • # 数仓建模:如何构建主题宽表模型?
  • ###STL(标准模板库)
  • #07【面试问题整理】嵌入式软件工程师
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #大学#套接字
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (二)hibernate配置管理
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (回溯) LeetCode 77. 组合
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 6.0--通用帮助类--FileHelper
  • .net CHARTING图表控件下载地址