vue3.0将后端返回的word文件流转换为pdf并导出+html2pdf.js将页面导出为pdf

实现思路

1.将Word文档转换为HTML:mammoth.js,它可以将.docx文件转换为HTML
2.将HTML转换为PDF:使用html2pdf.js将HTML转换为PDF

如果想要相同的效果,也可以把前端页面直接导出转换为pdf: 运用的插件:html2pdf.js

后端文件流导出接口返回:
在这里插入图片描述
首先我们要安装mammoth.js和html2pdf.js

npm install mammoth jspdf

代码:

// 引入
import mammoth from "mammoth";
import html2pdf from "html2pdf.js";
 <el-button type="primary" :loading="isLoading" @click="healthExport">导出</el-button>
async function healthExport() {try {await signatureApi.onReportWord({id: selectedData.value[0].id,signId: selectedData.value[0].healthyId,}).then((res) => {if (res) {const reader = new FileReader();reader.onload = (e) => {const arrayBuffer = res;mammoth.convertToHtml({ arrayBuffer: arrayBuffer }).then((result) => {const htmlContent = result.value; // 这是转换后的HTML内容// 将HTML添加到页面的一个隐藏div中var div = document.createElement("div");// 可以给pdf自定义添加样式(将word提取html再转换成pdf导出这时候pdf是没有样式的)const css = `<style>body { p { text-align:center;font-size:20px;soild  }</style>`;div.innerHTML = `<html>${css}${htmlContent}</html>`;document.body.appendChild(div);// 使用html2pdf.js将HTML转换为PDFhtml2pdf().from(div).set({html2canvas: { scale: 2 },jsPDF: { format: "a4", orientation: "portrait" },css: css,}).save("document.pdf");// 清理 - 移除添加的divdocument.body.removeChild(div);}).catch((err) => {console.error(err);});};reader.readAsArrayBuffer(res);}});} catch (error) {console.error("err", error);}
}

第二种前端思路:把前端页面直接导出转换为pdf
页面:点击导出直接导出为pdf
在这里插入图片描述

 <el-button type="primary" :loading="isLoading" @click="handleExport">导 出</el-button>function handleExport() {html2pdf().set({html2canvas: { scale: 3 }, // 增加缩放比例以提高清晰度jsPDF: { unit: 'in', format: 'a4', orientation: 'portrait' } // 设置单位和纸张大小
}).from(document.getElementById('pdfRef')).save('健康体检通知书.pdf');
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24266.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类&#xff1a;exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

基于JAVA+SpringBoot+Vue的前后端分离的简历系统

基于JAVASpringBootVue的前后端分离的简历系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345…

AutoGen 技术博客系列 八:深入剖析 Swarm—— 智能体协作的新范式

本系列博文在掘金同步发布, 更多优质文章&#xff0c;请关注本人掘金账号&#xff1a; 人肉推土机的掘金账号 AutoGen系列一&#xff1a;基础介绍与入门教程 AutoGen系列二&#xff1a;深入自定义智能体 AutoGen系列三&#xff1a;内置智能体的应用与实战 AutoGen系列四&am…

可视化工具SciChart如何结合Deepseek快速创建一个React仪表板?

SciChart JavaScript Charts图表库能帮助用户来探索JS应用程序的最终解决方案&#xff0c;使用WebGL创建动态、高速的图表和图形&#xff0c;非常适合实时处理复杂的数据可视化&#xff0c;使用其强大而灵活的JS图表工具可以提升JavaScript项目。 通过在1000多个输出类型上使用…

Cesium@1.126.0,创建3D瓦片,修改样式

第一步&#xff1a;添加3D建筑 Cesium.createOsmBuildingsAsync()这是一个异步方法&#xff0c;所以要写在一个异步函数里 创建一个函数 const create3DBuilding async (viewer) > {try {// 添加3D建筑const tileset await Cesium.createOsmBuildingsAsync();viewer.scen…

二、大模型微调技术栈全解析

大模型微调技术栈全解析&#xff1a;从微调方法到算力支撑 在大模型的领域中&#xff0c;微调&#xff08;Fine-tuning&#xff09;就像是为模型量身定制的高级裁缝服务&#xff0c;能够让通用的大模型更好地适应特定的任务和场景。而要完成这项精细的工作&#xff0c;需要一整…

ARM Linux下FFmpeg+Nginx+RTMP 视频监控

一、流媒体协议 RTSP&#xff08;Real-Time Stream Protocol&#xff09;由 Real Networks 和 Netscape 共同提出的&#xff0c;基于文本的多媒体播放 控制协议。RTSP 定义流格式&#xff0c;流数据经由 RTP 传输&#xff1b;RTSP 实时效果非常好&#xff0c;适合视频聊天&…

图扑 HT for Web 总线式拓扑图的可视化实现

在图形用户界面&#xff08;GUI&#xff09;设计中&#xff0c;自定义连线技术不仅提升了用户体验&#xff0c;还为复杂数据可视化开辟了新的可能性。该功能点允许用户灵活地在界面元素之间创建视觉连接&#xff0c;使流程图、思维导图和网络拓扑图等信息呈现更加直观和动态。 …

大语言模型中的梯度值:深入理解与应用

1. 摘要 ​ 梯度是微积分中的一个基本概念&#xff0c;在机器学习和深度学习中扮演着至关重要的角色。特别是在大语言模型&#xff08;LLM&#xff09;的训练过程中&#xff0c;梯度指导着模型参数的优化方向。 本报告首先由浅入深地介绍梯度的概念&#xff0c;包括其数学定义…

Linux的用户管理

Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 root用户可以创建多个普通用户 一、添加用户 基本语法&#xff1a;useradd 用户名 当创建用户成…

C++第十七讲:map和set封装

C第十七讲&#xff1a;map和set封装 1.源码发现不同2.Mymap && Myset2.1红黑树的源码更改2.2迭代器的实现2.2.1源码的迭代器区别2.2.2const iterator的实现 2.3insert的实现2.4operator[]的理解 这一讲比较困难&#xff0c;我们首先会通过看map和set底层的源码&#xf…

Day9 25/2/22 SAT

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…

OpenCV的形态学操作

在计算机视觉中&#xff0c;形态学操作是一种基于集合论的图像处理技术&#xff0c;主要用于分析和处理图像的形状特征。OpenCV 提供了 cv2.morphologyEx() 函数&#xff0c;用于执行多种高级形态学操作。 kernel np.ones((15, 15), np.uint8) 1. 开运算&#xff08;Opening&…

【Python爬虫(50)】从0到1:打造分布式爬虫项目全攻略

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

KylinSP3 | 防火墙和麒麟安全增强设置KySec

一、系统防火墙原理 麒麟操作系统从V10版本开始&#xff0c;默认使用了Firewalld防火墙&#xff0c;Firewalld是能提供动态管理的防火墙&#xff0c;支持网络/防火墙区域&#xff0c;用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时…

【NLP 23、预训练语言模型】

人类发明后悔&#xff0c;来证明拥有的珍贵 —— 25.1.15 Bert的优势&#xff1a;① 预训练思想 ② Transformer模型结构 一、传统方法 VS 预训练方式 Pre-train&#xff1a; ① 收集海量无标注文本数据 ② 进行模型预训练&#xff0c;并在任务模型中使用 Fine-tune&#xff1a…

嵌入式硬件基础知识

1.电阻(主要是贴片电阻) 01 基础课程-电阻 1.电阻封装 2.相关参数 1.功率额定值&#xff1a; 电阻能够长期承受的最大功率&#xff0c;功率过大可能导致电阻过热或损坏。封装尺寸越大&#xff0c;散热能力越强&#xff0c;功率额定值通常越高。 2.容差&#xff1a; 电阻…

VMware建立linux虚拟机

本文适用于初学者&#xff0c;帮助初学者学习如何创建虚拟机&#xff0c;了解在创建过程中各个选项的含义。 环境如下&#xff1a; CentOS版本&#xff1a; CentOS 7.9&#xff08;2009&#xff09; 软件&#xff1a; VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…

DeepSeek+Kimi 一键生成100种PPT

一 简介 PPT在工作中经常用到&#xff0c;无论是给老板汇报&#xff0c;还是同事、朋友之间的分享&#xff0c;或是去见投资人:) &#xff0c;都离不开它&#xff0c;然而写PPT经常让人感觉不胜其烦&#xff0c;无论是逻辑的展开、还是页面的布局、字体、配图&#xff0c;都像个…

循环神经网络rnn

1.了解词嵌入层的作用 2.了解循环网络层的作用 1.词嵌入层 将文本进行数值化,词嵌入层首先会根据输入的词的数量构建一个词向量矩阵&#xff0c;例如:我们有 100 个词&#xff0c;每个词希望转换成 128 维度的向量&#xff0c;那么构建的矩阵形状即为:100*128&#xff0c;输入…