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 小时前
Vue3生命周期
前端·javascript·vue.js
二哈喇子!6 小时前
Vue3 组合式API
前端·javascript·vue.js
二哈喇子!8 小时前
Vue 组件化开发
前端·javascript·vue.js
chxii8 小时前
2.9 插槽
前端·javascript·vue.js
接着奏乐接着舞。10 小时前
如何在Vue中使用拓扑图功能
前端·javascript·vue.js
老华带你飞10 小时前
生产管理ERP系统|物联及生产管理ERP系统|基于SprinBoot+vue的制造装备物联及生产管理ERP系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·论文·制造·毕设·生产管理erp系统
阳先森10 小时前
Vue3 Proxy 为何不直接返回target[key],选用Reflect
前端·vue.js
水冗水孚12 小时前
使用useSearchParams或router.replace拼接地址栏——解决tab标签页刷新状态丢失问题
vue.js·react.js
阳先森12 小时前
vue 数据更新到视图变化全过程
前端·vue.js