当前位置:首页 > VUE

vue实现导出PDF

2026-01-18 12:25:59VUE

使用html2canvas和jsPDF实现PDF导出

在Vue项目中,可以通过html2canvasjsPDF库结合实现将HTML内容导出为PDF。这两个库分别负责将HTML转换为canvas图像,再将图像转为PDF文件。

安装依赖库:

npm install html2canvas jspdf

创建导出方法:

import html2canvas from 'html2canvas'
import jsPDF from 'jspdf'

export default {
  methods: {
    exportToPDF() {
      const element = document.getElementById('pdf-content')
      html2canvas(element).then(canvas => {
        const imgData = canvas.toDataURL('image/png')
        const pdf = new jsPDF('p', 'mm', 'a4')
        const imgWidth = 210 // A4纸张宽度
        const imgHeight = canvas.height * imgWidth / canvas.width

        pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight)
        pdf.save('export.pdf')
      })
    }
  }
}

使用vue-html2pdf插件

vue-html2pdf是专为Vue设计的PDF导出插件,简化了导出流程。

安装插件:

npm install vue-html2pdf

组件中使用:

import VueHtml2pdf from 'vue-html2pdf'

export default {
  components: {
    VueHtml2pdf
  },
  methods: {
    generateReport() {
      this.$refs.html2Pdf.generatePdf()
    }
  }
}

模板部分:

<vue-html2pdf ref="html2Pdf" :filename="'report.pdf'">
  <div slot="pdf-content">
    <!-- 需要导出的内容 -->
  </div>
</vue-html2pdf>
<button @click="generateReport">导出PDF</button>

使用PDFMake生成结构化PDF

当需要生成更结构化的PDF文档时,可以使用pdfmake库。

安装库:

npm install pdfmake

生成PDF示例:

import pdfMake from 'pdfmake/build/pdfmake'
import pdfFonts from 'pdfmake/build/vfs_fonts'
pdfMake.vfs = pdfFonts.pdfMake.vfs

export default {
  methods: {
    createPDF() {
      const docDefinition = {
        content: [
          { text: '标题', style: 'header' },
          '常规文本内容',
          { text: '表格示例', style: 'subheader' },
          {
            table: {
              body: [
                ['列1', '列2', '列3'],
                ['值1', '值2', '值3']
              ]
            }
          }
        ],
        styles: {
          header: { fontSize: 18, bold: true },
          subheader: { fontSize: 15, bold: true, margin: [0, 15, 0, 5] }
        }
      }
      pdfMake.createPdf(docDefinition).download('document.pdf')
    }
  }
}

服务器端生成PDF

对于复杂PDF或需要后端处理的场景,可以通过API调用服务器生成PDF。

前端请求示例:

axios.post('/api/generate-pdf', {
  html: document.getElementById('pdf-content').innerHTML
}, {
  responseType: 'blob'
}).then(response => {
  const url = window.URL.createObjectURL(new Blob([response.data]))
  const link = document.createElement('a')
  link.href = url
  link.setAttribute('download', 'export.pdf')
  document.body.appendChild(link)
  link.click()
})

样式优化注意事项

为确保PDF输出效果良好,需要注意以下样式问题:

  • 使用绝对单位(px)而非相对单位(em/rem)
  • 避免使用CSS变换(transform)和复杂布局
  • 为表格添加明确的边框样式
  • 测试不同分辨率下的显示效果
  • 考虑分页问题,必要时手动添加分页控制

vue实现导出PDF

标签: vuePDF
分享给朋友:

相关文章

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue 提供…

vue手动实现弹窗

vue手动实现弹窗

实现弹窗组件的基本结构 在Vue中手动实现弹窗组件,需要创建一个独立的弹窗组件,并通过props控制其显示与隐藏。弹窗组件通常包含遮罩层、内容区域和关闭按钮。 <template>…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…