Vue实现将页面区域导出为pdf

 更新时间:2025年10月25日 09:16:27   作者:Qredsun  
文章介绍了两种将前端页面指定区域导出为PDF的纯前端实现方法,方式一使用jsPDF和html2canvas将特定区域转化为图片,再将图片转化为PDF,适用于小区域转换,但存在翻页时内容拆分的问题,方式二使用html2pdf.js,支持自动分页,适用于较大区域的转换

背景

将前端页面指定区域的内容导出为pdf,使用纯前端实现

两种实现

方式一

使用jsPDF、html2canvas,将特定区域使用html2canvas转化为图片,使用jsPDF将图片转化为pdf。

该方式适用于小区域转化pdf。当前转化区域有翻页时会出现内容拆分导致导致的可读性变差。

<template>
  <div>
    <!-- 其他代码 -->
    <el-button @click="handleDownload">下载PDF</el-button>
    <el-dialog :visible.sync="dialogVisible">
      <div id="content-to-pdf">
        <!-- 对话框内容 -->
      </div>
    </el-dialog>
  </div>
</template>

<script>
import html2canvas from 'html2canvas';
import { jsPDF } from "jspdf";

export default {
  data() {
    return {
      dialogVisible: false,
    };
  },
  methods: {
    handleDownload() {
      const contentDom = document.getElementById('content-to-pdf');
      
      // 使用html2canvas捕获DOM元素为图片
      html2canvas(contentDom).then(canvas => {
        const imgData = canvas.toDataURL('image/png');
        
        // 创建PDF并添加图片
        const pdf = new jsPDF();
        pdf.addImage(imgData, 'PNG', 10, 10);
        
        // 下载PDF
        pdf.save("download.pdf");
      });
    }
  }
}
</script>

方式二

html2pdf.js将特定区域。支持自动分页

<template>
  <div>
    <!-- 其他代码 -->
    <el-button @click="handleDownload">下载PDF</el-button>
    <el-dialog :visible.sync="dialogVisible">
      <div id="content-to-pdf">
        <!-- 对话框内容 -->
      </div>
    </el-dialog>
  </div>
</template>

<script>
import html2pdf from 'html2pdf.js';

export default {
  data() {
    return {
      dialogVisible: false,
    };
  },
  methods: {
    handleDownload() {
      const contentDom = document.getElementById('content-to-pdf');
      
      html2pdf()
	    .from(element)
	    .set({
	      margin: 10,
	      filename: '导出文档.pdf',
	      image: { type: 'jpeg', quality: 0.98 },
	      html2canvas: {
	        scale: 2,
	        useCORS: true, // 如果你有加载图片,且跨域
	        allowTaint: true
	      },
	      jsPDF: {
	        unit: 'mm',
	        format: 'a4',
	        orientation: 'portrait'
	      }
	    })
	    .save();
    }
  }
}
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue组织架构树图组件vue-org-tree的使用解析

    Vue组织架构树图组件vue-org-tree的使用解析

    这篇文章主要介绍了Vue组织架构树图组件vue-org-tree的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • antdv vue upload自定义上传结合表单提交方式

    antdv vue upload自定义上传结合表单提交方式

    这篇文章主要介绍了antdv vue upload自定义上传结合表单提交方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • el-table实现转置表格的示例代码(行列互换)

    el-table实现转置表格的示例代码(行列互换)

    这篇文章主要介绍了el-table实现转置表格的示例代码(行列互换),本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-02-02
  • vue-axios使用详解

    vue-axios使用详解

    本篇文章主要介绍了vue-axios使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • vuejs中使用mixin局部混入/全局混入的方法详解

    vuejs中使用mixin局部混入/全局混入的方法详解

    混入可以省很多代码(高类聚低耦合),还方便维护,下面这篇文章主要给大家介绍了关于vuejs中使用mixin局部混入/全局混入的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • vue脚手架项目创建步骤详解

    vue脚手架项目创建步骤详解

    这篇文章主要介绍了vue脚手架项目创建步骤详解,文章讲解的很清晰,初学者可以跟着步骤学习下
    2021-03-03
  • Vue 日期获取的示例代码

    Vue 日期获取的示例代码

    moment.js是一款现在对时间处理的强大的函数,这篇文章主要介绍了Vue 日期获取的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Vue中使用及封装websocket示例详解

    Vue中使用及封装websocket示例详解

    这篇文章主要为大家介绍了Vue中使用及封装websocket示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • vue  自定义组件实现通讯录功能

    vue 自定义组件实现通讯录功能

    本文通过实例代码给介绍了vue使用自定义组件实现通讯录功能,需要的朋友可以参考下
    2018-09-09
  • ElementUI中el-form组件的rules参数举例详解

    ElementUI中el-form组件的rules参数举例详解

    Form组件提供了表单验证的功能,只需要通过rules属性传入约定的验证规则,并将Form-Item的prop属性设置为需校验的字段名即可,下面这篇文章主要给大家介绍了关于ElementUI中el-form组件的rules参数的相关资料,需要的朋友可以参考下
    2023-10-10

最新评论