vue项目中纯前端实现导出pdf文件,不需要后端处理。

发布于:2025-06-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

在 Vue 项目中,纯前端实现导出 PDF 文件是完全可行的。通常可以借助一些 JavaScript 库来将 HTML 内容或 DOM 元素转换为 PDF 并下载,无需后端参与。

下面介绍几种常用的方案和实现方法:


推荐方案:使用 html2canvas + jsPDF

安装依赖(npm)

npm install html2canvas jspdf --save

示例代码(Vue 3 + Composition API)

<template>
  <div>
    <div id="pdf-content">
      <h1>这是要导出的内容</h1>
      <p>你可以放任意 HTML 内容,比如表格、图片等。</p>
    </div>
    <button @click="exportToPDF">导出 PDF</button>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

const exportToPDF = () => {
  const input = document.getElementById('pdf-content');

  html2canvas(input).then(canvas => {
    const imgData = canvas.toDataURL('image/png');
    const pdf = new jsPDF('p', 'mm', 'a4'); // A4纸张竖向
    const pdfWidth = 210; // A4宽度 mm
    const pdfHeight = (canvas.height * pdfWidth) / canvas.width;

    pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
    pdf.save('导出内容.pdf');
  });
};
</script>

可选增强功能

支持高清导出(缩放处理)

有时截图模糊,可适当放大 canvas 缩放比例:

html2canvas(input, { scale: 2 }).then(canvas => { ... })

多页支持(长页面自动分页)

如果你的 HTML 内容超过一页高度,建议使用插件如 html2pdf.js,它对多页支持更好:

安装:
npm install html2pdf.js --save
使用示例:
import html2pdf from 'html2pdf.js';

const exportToPDF = () => {
  const element = document.getElementById('pdf-content');
  html2pdf().from(element).save('导出内容.pdf');
};

注意事项

问题 建议
图片跨域问题 确保所有图片资源都允许跨域加载,否则可能无法渲染
中文乱码 使用 jsPDF 时需手动添加中文字体
表格样式丢失 尽量使用简单布局,避免复杂 CSS 样式
高度自适应 可结合 autoTable 插件绘制表格

可选库对比

库名 特点 是否推荐
html2canvas + jsPDF 灵活,兼容性好 ✅ 强烈推荐
html2pdf.js 一行代码搞定,支持分页 ✅ 推荐
dom-to-pdf 轻量级,适合简单导出 ✅ 推荐
pdfmake 更适合生成结构化 PDF,不直接支持 HTML 渲染 ❌ 不推荐用于 HTML 导出

📎 扩展:导出带样式的 PDF

如果需要保留完整的 CSS 样式,建议:

  • 使用 <style> 标签内联样式
  • 或者用 iframe 渲染一个完整的 HTML 页面并导出

总结

在 Vue 项目中,前端实现导出 PDF 的最佳实践是:

使用 html2canvas + jsPDFhtml2pdf.js,将 DOM 节点转为图片再生成 PDF

这种方式不需要任何后端接口,适合导出报表、简历、合同等内容。


网站公告

今日签到

点亮在社区的每一天
去签到