当前位置:首页 > VUE

vue实现pdf打印开单

2026-02-24 06:34:10VUE

Vue 实现 PDF 打印开单的方法

使用 html2pdf.js 库

安装 html2pdf.js 库:

npm install html2pdf.js

在 Vue 组件中引入并使用:

import html2pdf from 'html2pdf.js'

export default {
  methods: {
    generatePDF() {
      const element = document.getElementById('pdf-content')
      const opt = {
        margin: 10,
        filename: 'invoice.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
      }
      html2pdf().from(element).set(opt).save()
    }
  }
}

使用 jsPDF 和 html2canvas

安装依赖:

vue实现pdf打印开单

npm install jspdf html2canvas

实现代码:

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

export default {
  methods: {
    async downloadPDF() {
      const doc = new jsPDF()
      const element = document.getElementById('pdf-content')
      const canvas = await html2canvas(element)
      const imgData = canvas.toDataURL('image/png')
      doc.addImage(imgData, 'PNG', 10, 10, 190, 0)
      doc.save('invoice.pdf')
    }
  }
}

使用 Vue 模板设计打印内容

在模板中设计打印区域:

vue实现pdf打印开单

<template>
  <div>
    <div id="pdf-content">
      <!-- 这里放置需要打印的内容 -->
      <h1>发票</h1>
      <table>
        <tr>
          <th>项目</th>
          <th>数量</th>
          <th>单价</th>
        </tr>
        <tr v-for="item in items" :key="item.id">
          <td>{{ item.name }}</td>
          <td>{{ item.quantity }}</td>
          <td>{{ item.price }}</td>
        </tr>
      </table>
    </div>
    <button @click="generatePDF">打印PDF</button>
  </div>
</template>

样式优化

为打印内容添加专门样式:

@media print {
  body * {
    visibility: hidden;
  }
  #pdf-content, #pdf-content * {
    visibility: visible;
  }
  #pdf-content {
    position: absolute;
    left: 0;
    top: 0;
  }
}

使用打印专用CSS

创建打印专用样式表:

.print-only {
  display: none;
}

@media print {
  .no-print {
    display: none;
  }
  .print-only {
    display: block;
  }
}

服务端生成PDF

如果需要更复杂的PDF生成,可以考虑使用服务端方案:

  1. 使用Node.js的pdfkit或puppeteer
  2. 通过API将HTML发送到后端生成PDF
  3. 前端下载生成的PDF文件

注意事项

  • 确保打印内容宽度不超过A4纸尺寸(210mm)
  • 测试不同浏览器的兼容性
  • 考虑添加加载状态,因为生成PDF可能需要时间
  • 对于复杂表格,可能需要调整html2canvas的缩放比例

标签: vuepdf
分享给朋友:

相关文章

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

vue歌词滚动实现

vue歌词滚动实现

实现 Vue 歌词滚动的核心方法 监听当前播放时间 通过 audio 元素的 timeupdate 事件获取当前播放时间,并与歌词时间戳对比。在 Vue 中使用 @timeupdate 绑定事件:…

vue实现增量更新

vue实现增量更新

Vue 实现增量更新的方法 使用动态组件和 v-if 控制渲染 通过 v-if 或 v-show 控制组件的渲染,避免不必要的 DOM 操作。动态组件结合 keep-alive 可以缓存组件状态,减少…

vue修改功能实现

vue修改功能实现

Vue 修改功能的实现方法 在 Vue 中实现修改功能通常涉及表单绑定、数据更新和事件处理。以下是几种常见的实现方式: 数据双向绑定 使用 v-model 指令实现表单元素与 Vue 实例数据的双向…

vue实现人脸比对

vue实现人脸比对

Vue 实现人脸比对的方法 使用 TensorFlow.js 和 Face-api.js 安装必要的依赖库: npm install face-api.js tensorflow.js 在 Vue…