当前位置:首页 > 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 设计的打印插件,支持打印指定区域。

安装:

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 组合。

vue实现打印票据

安装:

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 规则优化打印样式。

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

注意事项

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

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

相关文章

vue computed 实现

vue computed 实现

computed 的基本用法 在 Vue 中,computed 用于声明计算属性,这些属性基于响应式依赖进行缓存。只有当依赖发生变化时,计算属性才会重新计算。 new Vue({ data:…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue mvvm 实现

vue mvvm 实现

Vue MVVM 实现原理 Vue.js 的 MVVM(Model-View-ViewModel)架构通过数据绑定和响应式系统实现视图与数据的自动同步。以下是其核心实现机制: 数据劫持与响应式系统…