前端实现将多个页面导出为pdf(分页)

一、需要用到两个插件,需要安装
vue框架中实现导出pdf

npm install --save html2canvas       // Dom转canvas再转image
npm install jspdf --save             // image转pdf

二、实现方法
分别获取每个页面的DOM元素,并转为canvas再转image,通过jsPDF插件把图片添加进来,再实现导出即可

jsPDF提供了一个很有用的API,addPage(),我们可以通过pdf.addPage(),来添加一页pdf,然后通过pdf.addImage(…),将图片赋予这页pdf来显示。

三、完整代码

<template>
  <div class="main">
    <el-button @click="download">下载</el-button>
    
    <div id="page1">
      <img src="@/assets/images/page1.png" alt="page1" />
    </div>
    <div id="page2">
      <img src="@/assets/images/page2.png" alt="page2" />
    </div>
    <div id="page3">
      <img src="@/assets/images/page3.png" alt="page3" />
    </div>
  </div>
</template>

<script setup lang="ts">
import JsPDF from "jspdf";
import html2canvas from "html2canvas";

const download = () => {
  let pageDom1 = document.getElementById("page1") as HTMLElement;
  let pageDom2 = document.getElementById("page2") as HTMLElement;
  let pageDom3 = document.getElementById("page3") as HTMLElement;

  let listDom = [html2canvas(pageDom1), html2canvas(pageDom2), html2canvas(pageDom3)]; // dom转canvas

  Promise.all(listDom).then(canvasList => {
    let pdf = new JsPDF("p", "pt", "a4");
    canvasList.forEach((canvas, index) => {
      let imgData = canvas.toDataURL("image/png"); // canvas转图片
      pdf.addImage(imgData, "PNG", 0, 0, 595, 842); // 595  842 a4纸宽高
      if (index < canvasList.length - 1) {
        pdf.addPage(); // 添加新页面
      }
    });
    pdf.save("download.pdf"); // 导出
    window.history.go(-1); // 关闭当前页面
  });
};
</script>

<style scoped lang="scss">
.main {
  width: 595px;
  margin: 0 auto;
  img {
    display: block;
    width: 595px;
    height: 842px;
  }
}
</style>

相关推荐

  1. 前端实现页面导出pdf

    2024-07-18 21:52:02       19 阅读
  2. 前端js实现把网页导出pdf

    2024-07-18 21:52:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 21:52:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 21:52:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 21:52:02       57 阅读
  4. Python语言-面向对象

    2024-07-18 21:52:02       68 阅读

热门阅读

  1. .NET_依赖注入_相关概念及基础使用

    2024-07-18 21:52:02       22 阅读
  2. ES6模块化方案导入导出模块方法

    2024-07-18 21:52:02       21 阅读
  3. 设备树节点和struct device的关系及示例

    2024-07-18 21:52:02       18 阅读
  4. Html_Css问答集(8)

    2024-07-18 21:52:02       18 阅读
  5. APP开发者选择苹果企业签名的理由是什么?

    2024-07-18 21:52:02       21 阅读
  6. 负载均衡轮询逻辑

    2024-07-18 21:52:02       19 阅读
  7. swift小知识点(二)

    2024-07-18 21:52:02       18 阅读
  8. Redis常见阻塞原因

    2024-07-18 21:52:02       22 阅读
  9. Pandas库学习之DataFrame.replace()函数

    2024-07-18 21:52:02       21 阅读
  10. ros2--插件

    2024-07-18 21:52:02       27 阅读