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

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转换为PDF
                html2pdf()
                  .from(div)
                  .set({
                    html2canvas: { scale: 2 },
                    jsPDF: { format: "a4", orientation: "portrait" },
                    css: css,
                  })
                  .save("document.pdf");

                // 清理 - 移除添加的div
                document.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.dtcms.com/a/37494.html

相关文章:

  • C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载
  • self-attention部分代码注释
  • Pi-hole v6释出
  • android系统 使用哪些工具可以分析组件间的依赖
  • Dubbo RPC 原理
  • 在WINDOWS系统使用CMake gui编译NLopt配合VSCode使用
  • llaMa模型的创新
  • Python 处理状态更新逻辑
  • 绩效管理与业务流程
  • MongoDB安装与配置 导入导出
  • 监听load和hashchange事件
  • 从电子管到量子计算:计算机技术的未来趋势
  • 双足肌肉骨骼机器人 VS 传统钢铁结构机器人:科技新趋势与跨界创新
  • PyCharm Professional 2025 安装配置全流程指南(Windows平台)
  • vue2项目打包后js文件过大, 首次加载缓慢
  • Fisher散度:从信息几何到机器学习的隐藏利器
  • 【DeepSeek开源:会带来多大的影响】
  • LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)
  • ELK搭建初入
  • k8s集群3主5从高可用架构(kubeadm方式安装k8s)
  • 微机原理与汇编语言试题四
  • 【前端定位线上问题的多种方案(不依赖 Sentry)】
  • 【docker】docker pull拉取中不断重复下载问题,解决方案之一,磁盘空间扩容
  • 【Matlab仿真】Matlab Function中如何使用静态变量?
  • Solidity 开发环境
  • 【含文档+PPT+源码】基于微信小程序的农产品自主供销商城系统
  • 2.1部署logstash:9600
  • JavaWeb-GenericServlet源码分析(适配器/模板方法)
  • ref和reactive的区别 Vue3
  • Java进阶(vue基础)