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时能够正确处理滚动条的位置和大小。
相关推荐
复园电子1 小时前
企业级PDF批量盖章方案选型指南
数据库·pdf
碎碎念_49211 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
shuaijie051812 小时前
强制修改调用接口的api地址。
javascript·vue.js·ecmascript
罗政13 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
katiua16 小时前
Vue-i18n TypeScript 补全提示
vue.js
Fuzio16 小时前
用 Spring Boot + Vue + Fuzio 构建现代 Java 桌面应用
vue.js·spring boot
kisshyshy16 小时前
从0到1彻底理解流式输出:先读懂Vue的“乐高积木”,再拧开LLM的“数据水龙头”
javascript·vue.js·人工智能
饮茶三千16 小时前
电子保函模板编辑器实战二:HTML→FTL 编译转换的设计与实现
前端·vue.js·设计模式
英勇无比的消炎药16 小时前
表单筛选利器:TinyVue BaseSelect 基础选择器实战
vue.js
Metaphor69216 小时前
使用 Python 添加、隐藏和删除 PDF 图层
python·pdf·图层