wuyj/php-json-escpos

PHP ESC/POS 打印机 JSON 模板解析器。

v0.1.0 2019-02-19 07:20 UTC

This package is auto-updated.

Last update: 2024-09-29 05:42:14 UTC


README

基于 mike42/escpos-php 项目,在 x-printer 80mm 打印机上运行正常。

英语 | 简体中文

快速开始

包含库

composer require wuyj/php-json-escpos

示例

<?php
require __DIR__ . '/vendor/autoload.php';
use Wuyj\Escpos\EscposPrinter;
$printer = new EscposPrinter();

/** Print receipts. **/
$json = '[{"styles":"alignCenter;fontBold;fontSize:2,2","text":["TITLE TITLE TITLE","","标题标题标题标题",""]},{"styles":"fontSize:1,1","text":["订单号: ${order_sn}"]},{"styles":"fontSize:1,1","text":["订单时间: ${add_time}"]},{"styles":"alignSide:12,12","text":["座位号: ${table_sn}","用餐人数: ${cover}"]},{"styles":"hidden:hide_refund_text","text":["原因:${refund_reason}"]},{"styles":"strRepeat","text":["-"]},{"styles":"each:foods;alignSide:17,-2,-5","text":[{"styles":"","text":[["${item_name_en}","${item_quantity}","${item_price}"],["${item_name_zh}","",""]]},{"styles":"each:specs_items","text":[["* ${item_attr_en} ${item_attr}","",""]]},{"styles":"hidden:hide_remark","text":["* ${remark}","",""]}]},{"styles":"strRepeat","text":["-"]},{"styles":"alignSide:-14,-10;fontSize:1,1","text":["小计:","${sub_total}"]},{"styles":"alignSide:-14,-10;fontSize:1,1","text":["折扣:","${discount}"]},{"styles":"alignSide:-14,-10;fontSize:1,1;fontBold","text":["总计:","${total}"]},{"styles":"alignSide:8,8,-8;fontSize:1,1;fontBold","text":["支付方式","","金额"]},{"styles":"each:payTypeItems;alignSide:8,8,-8","text":["${pay_name}","${en_name}","${amount}"]}]';
$data = '{"order_sn":"0123456789","add_time":"2019/02/01","table_sn":"T100","cover":4,"refund_reason":"TOO EXPENSIVE","hide_refund_text":true,"sub_total":600,"total":540,"discount":"90%","payTypeItems":[{"pay_name":"支付宝","en_name":"AliPay","amount":540}],"hide_pay_type_list":false,"foods":[{"remark":"remark test","hide_remark":true,"item_name_en":"foods","item_quantity":2,"item_price":100.00,"item_name_zh":"食物","specs_items":[]},{"remark":"remark test","hide_remark":false,"item_name_en":"juice","item_quantity":2,"item_price":200.00,"item_name_zh":"饮料","specs_items":[{"item_attr_en":"No Ice","item_attr":"不加冰"},{"item_attr_en":"No Sugar","item_attr":"不加糖"}]}]}';
$printer->render($json, json_encode($data, true));
$printer->connect('10.10.10.201');
$printer->printing();

/** Open cashier drawer. **/
$printer->connect('10.10.10.201');
$printer->pulse();

/** Detect printer device status. **/
$printer->connect('10.10.10.201');
$status = $printer->detect();
switch ($status) {
	case 1: 
		echo 'OK';
		$printer->close();
		break;
	case -1:
		echo 'Not Connected';
		break;
	case 0x20:
		echo 'BTN PRESSED';
		break;
	case 0x08:
		echo 'BTN PRESSED';
		break;
	case 0x64:
		echo 'HARDWARE ERROR';
		break;
}

支持样式

underLine

  • 为文本添加下划线

qrCode

  • 打印二维码

actionCut

  • 裁剪收据纸张

actionFeed

  • actionFeed: 1 (喂纸 1 行)
  • 喂纸

fontSize

  • fontSize: 宽度, 高度
  • FONT_A: 1, 2, 3
  • FONT_B: 1.5

alignSide

  • alignSide: 8, 8, -8 (将文本作为表格打印,总共有 3 列,每列显示 8 单元格,-8 表示右对齐文本,默认左对齐)
  • 24 为 FONT_A,32 为 FONT_B

strRepeat

  • strRepeat (默认字符 _ 将重复 48 次)

alignLeft

alignRight

alignCenter

fontBold

lineBreak

actionText

支持指令

each

  • each: data_items (循环 data_items 来打印文本行)

hidden

  • hidden: hidden_value (如果 hidden_value 为真,则隐藏文本行)

repeat

  • repeat: repeat_times (重复指定的行 repeat_times 次)