当前位置:首页 > VUE

vue实现打印票据

2026-02-20 11:59:40VUE

Vue 实现打印票据的方法

使用 window.print() 方法

在 Vue 项目中,可以直接调用浏览器的打印功能。创建一个打印按钮,点击时触发打印当前页面或指定区域。

<template>
  <div>
    <div id="printArea">
      <!-- 票据内容 -->
      <h1>票据标题</h1>
      <p>票据详情...</p>
    </div>
    <button @click="print">打印票据</button>
  </div>
</template>

<script>
export default {
  methods: {
    print() {
      window.print();
    }
  }
};
</script>

<style>
@media print {
  body * {
    visibility: hidden;
  }
  #printArea, #printArea * {
    visibility: visible;
  }
  #printArea {
    position: absolute;
    left: 0;
    top: 0;
  }
}
</style>

使用第三方库 vue-print-nb

vue-print-nb 是一个专门为 Vue 设计的打印插件,支持打印指定区域。

安装:

npm install vue-print-nb --save

使用:

<template>
  <div>
    <div id="printArea">
      <!-- 票据内容 -->
      <h1>票据标题</h1>
      <p>票据详情...</p>
    </div>
    <button v-print="printObj">打印票据</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printArea',
        popTitle: '票据打印'
      }
    };
  }
};
</script>

使用 html2canvas 和 jsPDF

如果需要将票据内容导出为 PDF 再打印,可以使用 html2canvas 和 jsPDF 组合。

安装:

npm install html2canvas jspdf --save

使用:

<template>
  <div>
    <div id="printArea">
      <!-- 票据内容 -->
      <h1>票据标题</h1>
      <p>票据详情...</p>
    </div>
    <button @click="exportToPDF">导出为PDF并打印</button>
  </div>
</template>

<script>
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

export default {
  methods: {
    async exportToPDF() {
      const element = document.getElementById('printArea');
      const canvas = await html2canvas(element);
      const imgData = canvas.toDataURL('image/png');
      const pdf = new jsPDF();
      pdf.addImage(imgData, 'PNG', 0, 0);
      pdf.save('票据.pdf');
      // 如果需要直接打印
      // pdf.autoPrint();
      // window.open(pdf.output('bloburl'), '_blank');
    }
  }
};
</script>

打印样式优化

为了确保打印效果符合票据要求,可以通过 CSS 的 @media print 规则优化打印样式。

vue实现打印票据

@media print {
  @page {
    size: auto;   /* 自动尺寸 */
    margin: 0mm;  /* 无外边距 */
  }
  body {
    padding: 10mm;
    font-family: Arial, sans-serif;
  }
  .no-print {
    display: none !important;
  }
}

注意事项

  • 票据内容通常需要固定宽度,避免打印时内容被截断。
  • 测试不同浏览器的打印效果,确保兼容性。
  • 对于复杂的票据布局,建议使用表格或 Flexbox 布局。

标签: 票据vue
分享给朋友:

相关文章

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5 语…

vue实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…