当前位置:首页 > VUE

vue实现小票打印代码

2026-02-24 19:43:18VUE

使用Vue实现小票打印功能

在Vue中实现小票打印功能,可以通过浏览器打印API或第三方库来实现。以下是两种常见的方法:

vue实现小票打印代码

方法一:使用浏览器打印API

创建一个Vue组件,用于展示小票内容,并调用浏览器的打印功能。

vue实现小票打印代码

<template>
  <div>
    <button @click="printReceipt">打印小票</button>
    <div id="receipt" ref="receipt">
      <h3>购物小票</h3>
      <p>订单号: {{ orderId }}</p>
      <p>日期: {{ currentDate }}</p>
      <table>
        <tr>
          <th>商品</th>
          <th>数量</th>
          <th>价格</th>
        </tr>
        <tr v-for="(item, index) in items" :key="index">
          <td>{{ item.name }}</td>
          <td>{{ item.quantity }}</td>
          <td>{{ item.price }}</td>
        </tr>
      </table>
      <p>总计: {{ total }}</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      orderId: '123456',
      currentDate: new Date().toLocaleString(),
      items: [
        { name: '商品A', quantity: 2, price: 10 },
        { name: '商品B', quantity: 1, price: 20 }
      ]
    }
  },
  computed: {
    total() {
      return this.items.reduce((sum, item) => sum + (item.price * item.quantity), 0)
    }
  },
  methods: {
    printReceipt() {
      const printContent = this.$refs.receipt.innerHTML
      const originalContent = document.body.innerHTML

      document.body.innerHTML = printContent
      window.print()
      document.body.innerHTML = originalContent
    }
  }
}
</script>

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

方法二:使用html2canvas和jsPDF库

对于需要更复杂打印需求或生成PDF的情况,可以结合html2canvas和jsPDF库。

<template>
  <div>
    <button @click="printPDF">打印为PDF</button>
    <div id="receipt" ref="receipt">
      <!-- 小票内容同上 -->
    </div>
  </div>
</template>

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

export default {
  methods: {
    async printPDF() {
      const element = this.$refs.receipt
      const canvas = await html2canvas(element, {
        scale: 2,
        logging: false,
        useCORS: true
      })

      const imgData = canvas.toDataURL('image/png')
      const pdf = new jsPDF({
        orientation: 'portrait',
        unit: 'mm',
        format: [80, 200] // 小票常用尺寸
      })

      pdf.addImage(imgData, 'PNG', 0, 0, 80, 0)
      pdf.save('receipt.pdf')
    }
  }
}
</script>

方法三:使用热敏打印机(ESC/POS指令)

如果需要连接热敏打印机,可以使用串口或网络打印。

// 安装serialport库
npm install serialport

// Vue组件中使用
import { SerialPort } from 'serialport'

methods: {
  async printToThermalPrinter() {
    const port = new SerialPort({
      path: 'COM3', // 打印机端口
      baudRate: 19200
    })

    const commands = [
      '\x1B\x40', // 初始化
      '\x1B\x21\x08', // 设置字体
      '购物小票\n\n',
      '订单号: 123456\n',
      '日期: ' + new Date().toLocaleString() + '\n\n',
      '\x1B\x45\x01', // 加粗
      '商品    数量  价格\n',
      '\x1B\x45\x00', // 取消加粗
      '商品A    2    20\n',
      '商品B    1    20\n\n',
      '总计: 40\n\n',
      '\x1D\x56\x41\x03' // 切纸
    ]

    port.write(Buffer.from(commands.join('')), (err) => {
      if (err) console.error('打印错误:', err)
      port.close()
    })
  }
}

注意事项

  1. 浏览器打印API在不同浏览器中表现可能不一致,建议测试多种浏览器
  2. 小票样式应使用固定宽度(通常80mm),并设置合适的字体大小
  3. 热敏打印机需要安装对应驱动,并确保连接正确
  4. 对于网络打印机,可能需要使用WebSocket或HTTP API进行通信

以上方法可根据实际需求选择使用,浏览器打印适合简单场景,PDF打印适合需要保存的场景,热敏打印机适合实体店使用。

标签: 小票代码
分享给朋友:

相关文章

h5实现响应式代码

h5实现响应式代码

响应式设计基础 HTML5实现响应式设计主要通过媒体查询(Media Queries)、弹性布局(Flexbox)、网格布局(Grid)和视口设置(Viewport Meta Tag)等技术。核心目标…

js实现分页功能代码

js实现分页功能代码

分页功能实现方法 客户端分页(前端处理数据) 适用于数据量较小且已全部加载到前端的情况。 // 示例数据 const data = Array.from({length: 100}, (_, i)…

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,包括边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin…

vue抽奖代码实现

vue抽奖代码实现

Vue 抽奖代码实现 基础抽奖组件结构 使用 Vue 3 的 Composition API 实现抽奖功能,核心包括转盘动画、奖品列表和抽奖逻辑。以下为组件基础结构: <template>…

vue实现轮播图代码

vue实现轮播图代码

Vue实现轮播图代码 以下是一个基于Vue 3的轮播图实现示例,包含自动轮播、手动切换和指示器功能。 基础结构 <template> <div class="carouse…

vue长轮询代码实现

vue长轮询代码实现

Vue 长轮询实现方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是 Vue 中实现长轮询的代码示例。 基本实现逻辑 定义一…