当前位置: 首页 > 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 可以见我上一篇文章:前端实现签字效果+合同展示

相关文章:

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

文章目录 后端 doc 转 docxdcox - preview安装导入使用注意 最近菜鸟刚搞完签字&#xff0c;结果需求就加了&#xff0c;如果合同有附件&#xff08;.doc.docx&#xff09;&#xff0c;签名就是签到附件里面&#xff0c;没有附件才是签到那个html里面&#xff01; 这里附件签名…...

Vue3 组件通信

目录 create-vue创建项目 一. 父子通信 1. 父传子 2. 子传父 二. 模版引用(通过ref获取实例对象) 1.基本使用 2.defineExpose 三. 跨层通信 - provide和inject 1. 作用和场景 2. 跨层传递普通数据 3. 跨层传递响应式数据 4. 跨层传递方法 create-vue创建项目 npm ini…...

如何在Ubuntu 14.04上安装、配置和部署Rocket.Chat

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Rocket.Chat 是一个使用 Meteor 构建的开源消息应用程序。它支持视频会议、文件共享、语音消息&#xff0c;具有完整的 API 等功能…...

ISO 26262中的失效率计算:IEC TR 62380-Section 15-Switches and keyboards

目录 概要 1 开关和键盘的分类 2 开关和键盘失效率的计算 2.1 Switches and keyboards 2.1.1 Base失效率 2.1.2 接触数量 2.1.3 温度循环De-rating系数 概要 IEC TR 62380《电子组件、PCBs和设备的可靠性预计通用模型》是涵盖电路、半导体分立器件、光电组件、电阻器、电…...

Linux安全与高级应用(五)深入探讨Linux Shell脚本应用:从基础到高级

文章目录 深入探讨Linux Shell脚本应用&#xff1a;从基础到高级引言一、Shell脚本基础知识1. Shell的作用与分类2. 编写第一个Shell脚本 二、Shell变量的使用1. 变量的类型与定义2. 引号的使用3. 位置变量与预定义变量 三、重定向与管道操作1. 重定向操作2. 管道操作 四、计划…...

Java中等题-解码方法(力扣)

一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; "1" -> A "2" -> B ... "25" -> Y "26" -> Z 然而&#xff0c;在 解码 已编码的消息时&#xff0c;你意识到有许多不同的方式来解码&#xff0c;因为有些…...

【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法

文章目录 一、前言二、git 是什么三、版本控制系统是什么四、本地 vs 集中式 vs 分布式本地版本控制系统集中式版本控制系统分布式版本控制系统 五、安装 git 一、前言 本系列上一篇文章【Git】git 从入门到实战系列&#xff08;一&#xff09;—— Git 的诞生&#xff0c;Lin…...

【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】

【QT 5报错&#xff1a;/xxx/: error: ‘class Ui::frmMain’ has no member named ‘xxx’-和-软件编译器MSVCxxxvs MinGWxxx说明】 1、前言2 、qt 中 Qmake CMake 和 QBS1-qmake2-Cmake3-QBS4-官网一些说法5-各自特点 3、软件编译套件1-Desktop Qt 6.7.2 llvm-mingw 64-bit2-…...

SD卡参数错误:深度解析与数之寻软件恢复实战

一、SD卡参数错误&#xff1a;数据与设备的隐形杀手 在数字化时代&#xff0c;SD卡作为便携存储设备&#xff0c;广泛应用于相机、手机、无人机及各类电子设备中&#xff0c;承载着人们珍贵的照片、视频、文档等重要数据。然而&#xff0c;SD卡在使用过程中&#xff0c;有时会…...

深入理解和应用RabbitMQ的Work Queues模型

文章目录 1. 场景模拟2. 消息发送3. 消息接收4. 测试5. 能者多劳6. 总结 当你在处理消息时&#xff0c;可能会遇到这样的问题&#xff1a;消息的生产速度远远大于消费速度&#xff0c;导致消息堆积。这时候&#xff0c;Work Queues&#xff08;工作队列&#xff09;模型就能派上…...

嵌入式面试八股文(三)·野指针产生原因和解决方法、指针函数和函数指针的区别

目录 1. 野指针产生原因和解决方法 1.1 产生的原因 1.1.1 指针未能初始化 1.1.2 指针指向的内存被释放 1.1.3 指针指向的对象被重复释放 1.2 解决方法 1.2.1 初始化指针 1.2.2 指针空置 1.2.3 避免悬挂指针 2. 指针函数和函数指针的区别 2.1 定义不同 2…...

OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义

在OpenCV中&#xff0c;创建图像时需要指定图像的类型&#xff0c;这些类型通常通过常量来表示&#xff0c;例如 CV_8UC1、CV_32FC3、CV_32S 等。这些常量定义了图像的数据类型和通道数&#xff0c;具体含义如下&#xff1a; CV_8UC1&#xff1a; CV_8U 表示每个像素由一个8位无…...

v 3 + vite + ts 自适应布局(postcss-pxtorem)

1、 当pc端、移动端H5等项目中&#xff0c;需要根据当前浏览器窗口或屏幕尺寸&#xff0c;来自适应的改变页面内元素尺寸时&#xff0c;就可以借助下述插件和相关配置来实现。 2、适用范围&#xff1a;vue3 vite ts 步骤一&#xff1a;相关依赖下载下载相关依赖 npm inst…...

(MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2

文章简介 承接上一篇笔记,该份笔记是笔者深思熟虑后根据实战应用所总结出来的精华内容,该文章内容主要包括配置avc权限的使用场景以及其上下环节所需的准备。 使用场景 1.底层驱动有无配置好相应的串口 2.开启相应的selinux avc 权限 3.在framework层配置相应的 (config…...

Linux安全与高级应用(六)Linux Shell脚本编程的高级应用:条件测试与if语句的妙用

文章目录 Linux Shell脚本编程的高级应用&#xff1a;条件测试与if语句的妙用一、条件测试操作详解1. 字符串比较2. 整数比较3. 文件测试4. 逻辑测试 二、if语句的结构与应用1. 单分支结构2. 双分支结构3. 多分支结构 三、实际应用案例1. 需求描述2. 实现思路3. 代码实现4. 设置…...

升级MacOS(Mojave)后使用git问题

将MacOS升级到Mojave版本后&#xff0c;使用git工具时&#xff0c;出现如下错误提示&#xff1a; guochongxindeMacBook-Pro:study guochongxin$ git status . xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Librar…...

基于PFC和ECN搭建无损RoCE网络的工作流程分析

无损RoCE网络概念 RDMA&#xff08;Remote Direct Memory Access&#xff0c;远程直接内存访问&#xff09;是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区&#xff0c;通过网络将数据从一个系统快速传输到远程系…...

射频功率放大器调测简略

射频功率放大器除了在设计时的难度外&#xff0c;其次就是调测阶段&#xff0c;设计时仿真可以通过不断更改仿真参数来达到理想状态&#xff0c;更关键的是不用提心吊胆的把烧器件&#xff0c;而处于调测阶段则很容易出现烧坏器件的情况&#xff0c;特别是功率大的射频功率放大…...

Linux使用docker搭建Redis 哨兵模式

1. Redis Sentinel 简介 Redis Sentinel 是 Redis 高可用解决方案的一部分。它提供了监控、通知和自动故障转移功能&#xff0c;确保 Redis 集群在主节点发生故障时仍然可以继续工作。以下是 Redis Sentinel 的主要功能和作用&#xff1a;监控&#xff1a; Sentinel 会不断检查…...

springboot给类进行赋初值的四种方式

目录 1. 使用Value和ConfigurationProperties2. 使用PropertySource创建Person.java写一个测试类 3. 使用ImportResourceStudent类创建beans.xml在主类中引入测试 其他心得 1. 使用Value和ConfigurationProperties 这里不加赘述了&#xff0c;前面我也发过&#xff0c;这里就放…...

剧本杀教程生成指南2025,解析,轻松掌握创作技巧

剧本杀教程生成指南2025&#xff0c;解析&#xff0c;轻松掌握创作技巧剧本杀作为一种新兴的娱乐方式&#xff0c;近年来在全球范围内迅速流行。随着越来越多的人加入到剧本杀的创作和体验中&#xff0c;如何高效地创作出高质量的剧本成为了一个热门话题。本文将为你提供一份详…...

Could NOT find OpenSSL (missing: OPENSSL_LIBRARIES)

手动安装cmake&#xff0c;执行./bootstrap后出现标题所示错误提示&#xff0c;因为这一步出错&#xff0c;所以后面的步骤都无法继续进行 一开始以为是服务器上没有装openssl&#xff0c;使用openssl version命令发现有对应的版本&#xff0c;但是路径下没有include等文件夹 …...

ADXL345嵌入式驱动开发:I²C/SPI寄存器配置与FreeRTOS中断集成

1. ADXL345加速度传感器库深度解析&#xff1a;面向嵌入式工程师的底层驱动开发指南ADXL345是Analog Devices公司推出的超低功耗、高分辨率&#xff08;13位&#xff09;、数字输出三轴加速度传感器&#xff0c;广泛应用于姿态检测、振动监测、跌倒报警、工业预测性维护及可穿戴…...

东莞市SEO优化对网站收录有何影响_东莞市SEO优化的常见问题有哪些

东莞市SEO优化对网站收录有何影响 在互联网时代&#xff0c;东莞市的企业和个人网站希望在搜索引擎上获得高排名&#xff0c;是非常重要的目标。搜索引擎优化&#xff08;SEO&#xff09;在这一过程中扮演了关键角色。东莞市SEO优化对网站收录有何影响呢&#xff1f;SEO优化不…...

告别Keil C51安装烦恼:STC8单片机开发环境保姆级配置指南(含芯片包添加)

从零搭建STC8开发环境&#xff1a;Keil C51避坑指南与实战技巧 第一次接触STC8单片机时&#xff0c;最让人头疼的莫过于开发环境的搭建。网上教程要么过于简略&#xff0c;要么步骤不全&#xff0c;总会在某个环节卡住——可能是Keil安装报错&#xff0c;可能是芯片包添加失败&…...

“16QAM调制与解调系统的SystemView仿真及分析”

通信原理 systemview 16QAM调制与解调系统的仿真 16QAM调制解调系统与解调系统的仿真 用SystemView建立一个16QAM调制解调器电路,分析理解系统的各个模块功能&#xff0c;观察波形图 判断是不是实现了16QAM调制解调系统功能 基本要求: (1)在SystemView软 件中构建短波16QAM仿真…...

Kubernetes 部署 Spring Boot 应用:从入门到生产实践

Kubernetes 部署 Spring Boot 应用&#xff1a;从入门到生产实践 别叫我大神&#xff0c;叫我 Alex 就好。 一、引言 大家好&#xff0c;我是 Alex。Kubernetes 已经成为云原生应用部署的事实标准&#xff0c;而 Spring Boot 是 Java 微服务开发的首选框架。今天&#xff0c;我…...

计算机毕业设计:Python汽车数据可视化分析平台 Django框架 可视化 线性回归 数据分析 机器学习 深度学习 AI 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…...

2026届最火的AI论文助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要想切实有效地把文本的AIGC检测概率给降低下去&#xff0c;就得从词汇多样性、句式结构以及…...

PrimeTime实战指南:从基础STA流程到精准时序报告解析

1. PrimeTime与静态时序分析基础 刚接触PrimeTime时&#xff0c;我和大多数工程师一样被满屏的时序报告搞得头晕眼花。直到把整个设计流程跑通三遍后&#xff0c;才真正理解这个工具的价值。PrimeTime&#xff08;简称PT&#xff09;是Synopsys推出的静态时序分析黄金工具&…...