Vue+ElementUI 导出为PDF文件

在ElementUI中导出PDF通常涉及将页面上的DOM元素转换为PDF格式的文件。这一过程可以通过结合使用 html2canvas 和 jsPDF 这两个JavaScript库来实现。

步骤:
1、安装依赖

在项目中安装html2canvas和jsPDF这两个库。可以通过npm进行安装:

复制代码
npm install html2canvas jspdf
2、创建导出函数

创建一个JavaScript文件(例如 htmlToPdf.js),并在其中定义导出PDF的函数。以下是一个示例函数:

js 复制代码
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

export function getPdf(elementId, pdfName) {
    const element = document.getElementById(elementId);
    
    html2canvas(element, {
        useCORS: true, // 允许跨域请求外部链接图片
        allowTaint: true // 允许canvas污染
    }).then(canvas => {
        const contentWidth = canvas.width;
        const contentHeight = canvas.height;
        
        const pageHeight = contentWidth / 592.28 * 841.89;
        let leftHeight = contentHeight;
        let position = 0;
        const imgWidth = 595.28;
        const imgHeight = (contentHeight * imgWidth) / contentWidth;
        
        const pageData = canvas.toDataURL('image/jpeg', 1.0);
        
        const pdf = new jsPDF('', 'pt', 'a4');
        
        if (leftHeight < pageHeight) {
            pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
        } else {
            while (leftHeight > 0) {
                pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
                leftHeight -= pageHeight;
                position -= 841.89;
                
                if (leftHeight > 0) {
                    pdf.addPage();
                }
            }
        }
        
        pdf.save(pdfName + '.pdf');
    }).catch(error => {
        console.error('Error during PDF generation:', error);
    });
}
3、在Vue组件中使用

在需要导出PDF的Vue组件中引入并使用这个函数。

例如:

html 复制代码
<template>
    <div>
        <!-- 要导出的内容 -->
        <div id="exportContent">
            <!-- 这里放置要导出的HTML内容 -->
        </div>
        <!-- 导出按钮 -->
        <el-button type="primary" @click="exportPdf">导出PDF</el-button>
    </div>
</template>

<script>
import { getPdf } from './htmlToPdf'; // 引入导出的函数

export default {
    methods: {
        exportPdf() {
            getPdf('exportContent', '导出的文件名'); // 调用导出函数,并传入要导出的DOM元素的ID和PDF文件名
        }
    }
}
</script>
4、注意事项
  • 分页处理:如果导出的内容超过一页,需要处理分页逻辑。上面的示例代码中已经包含了分页处理的逻辑。
  • 样式调整:为了确保导出的PDF文件样式正确,可能需要对要导出的DOM元素进行样式调整。例如,可以使用CSS来控制元素的布局和样式。
  • 跨域问题:如果导出的内容中包含跨域的图片或其他资源,需要确保服务器允许跨域请求,或者在html2canvas的配置中设置useCORS:
    true。
  • 滚动条处理:如果导出的内容在页面中存在滚动条,需要确保在生成PDF时能够正确处理滚动条的位置和大小。
相关推荐
xcs1940511 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
雪芽蓝域zzs14 小时前
第 5 节:Marker 点击弹出 InfoWindow 信息窗口
vue.js
大包子16 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
雪芽蓝域zzs17 小时前
第 3 节:地图点击事件,点击获取经纬度
vue.js
WayneX17 小时前
开源 Vue 3 组件库 Morya UI:把组件、文档、AI 工具链一起做进一个包
前端·vue.js·前端框架
hai_android17 小时前
Chat 聊天模块功能总结
前端·javascript·vue.js
志尊宝20 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记
顽疲20 小时前
从零用 Java 实现小红书 SpringBoot Vue UniApp(23)笔记话题多对多:一条笔记进多个话题池
java·vue.js·spring boot
能源革命21 小时前
Vue 网格拖拽布局组件全景指南:7 大方案深度对比
前端·javascript·vue.js
daols8821 小时前
vue 表格组件 vxe-table 实现自定义多行编辑功能
前端·javascript·vue.js·vxe-table