当前位置: 首页 > 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');
}

相关文章:

  • 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)
  • 网站建设模块是什么意思/广州百度快速优化排名
  • 厦门做网站找哪家公司/信息流投放
  • 360搜索首页/优化推广网站怎么做
  • 做自己网站彩票/网站流量统计分析的维度包括
  • 友山建站优化/如何营销推广自己的产品
  • 增城网站建设推广/国外产品推广平台