YStudio Y++

小票类

Y++ / YStudio 开发文档 · 一点滴

类对象支持库。路径:支持库 → 扩展类库 → 小票类。

类型名写「小票类」。声明时自动创建。

把热敏小票常用动作(对齐、加粗、切纸、条码等)编成 ESC/POS 字节,再发到打印机或模拟器。开通票位后才能编译;发行程序不再验票。

能力包:plugins/supportlib.receipt/(须在 YStudio.exe 旁 plugins/,重启 IDE 后出现)。

先搞清三件事

  1. 小票类 ≠ 打印类
    - 打印类:按页排版(GDI),适合 A4/对账单;另有「打开原始/发送原始」发任意字节。
    - 小票类:按 ESC/POS 指令流拼内容,适合 58/80mm 热敏。
  2. 先组装,再投递
    调用 初始化 / 输出文本 / 切纸 等只是往内存缓冲里写字节;真正出纸要调 打印到网口 / 打印到串口 / 打印到打印机,或 取字节集 后自己发。
  3. 指令偏 Epson
    市面多数机兼容;个别品牌切纸/二维码码字不同。乱码先改 置编码;二维码不显示可试真机或换模拟器。

推荐测试路径(无真机)

Windows 上没有「打印预览」能画出 ESC/POS,要用监听 9100 的模拟器:

  1. 下载并运行 CrossEscPosEmulator(Windows x64 自包含包),确认 TCP 监听 9100。
  2. 本工程点「打印到模拟器」→ 打印到网口("127.0.0.1", 9100)。
  3. 模拟器窗口应出现小票预览(可导出 PNG)。

其它可选:

方案 说明
本仓库 tools/escpos-emulator 双击 启动模拟器.bat(已打 UTF-8 中文补丁);浏览器 localhost:3000,TCP 9100
escpos-emulator 上游 原版无中文码表,UTF-8 会乱码;请用本仓库目录
virtual-printer.online 网页虚拟机,给公网 TCP 口(注意隐私)
写文件排查 写出文件("ticket.bin", 票.取字节集()),用十六进制查看器对照指令

不要用「Microsoft Print to PDF」测小票类:那是 GDI 排版通道,不会解析 ESC/POS。

示例工程:examples/小票打印。

快速开始(网口 / 模拟器)

小票类 票
票.置编码(1)              // 本机 Node 模拟器用 UTF-8;国内真机多数改 3=GBK
票.清缓冲()
票.初始化()               // 每张票开头复位
票.置对齐(1)
票.置加粗(真)
票.置字号(2, 2)
票.输出文本("某某商店")
票.置加粗(假)
票.置字号(1, 1)
票.换行()
票.置对齐(0)
票.输出文本("可乐  x1   3.00")
票.换行()
票.输出文本("合计: 3.00")
票.换行(2)
票.置对齐(1)
票.输出二维码("https://example.com/o/1", 3)
票.换行()
票.走纸(48)               // 切纸前多空一点
票.切纸()
如果 (!票.打印到网口("127.0.0.1", 9100)) {
    信息框(票.取错误(), 0)
}

三种投递怎么选

方法 适用
打印到网口 网口热敏、本机模拟器(127.0.0.1:9100)——开发首选
打印到串口 USB 显示为 COMx 的机子
打印到打印机 已在 Windows 安装驱动且支持 RAW 的队列名

发完默认保留缓冲(方便连打多份);换新内容前请 清缓冲()。

也可交给打印类:

打印类 打
打.打开原始("XP-58")
打.发送原始(票.取字节集())
打.关闭()

方法说明

置编码 / 取编码

  • 签名:无 置编码([整数 编码=3]) · 整数 取编码()
  • 说明:控制文本写入缓冲时的编码。3=GBK(默认),1=UTF-8。真机中文乱码先改这里。

清缓冲 / 取字节集

  • 签名:无 清缓冲() · 字节集 取字节集()
  • 说明:清掉已组装指令;或取出副本用于存盘、自建发送、对接打印类 RAW。

初始化

  • 签名:逻辑 初始化()
  • 说明:写入复位指令。每张小票开头建议调用,避免上次的加粗/对齐残留。

置对齐 / 置加粗 / 置字号 / 置下划线

  • 对齐:0 左 · 1 中 · 2 右
  • 字号:宽倍、高倍各 1~8;店名常用 2,2,正文 1,1
  • 样式对之后的 输出文本 生效,直到再次修改或 初始化

输出文本 / 换行 / 走纸

  • 输出文本:不自动换行,需再调 换行
  • 换行(n):空 n 行(按字符行高)
  • 走纸(点数):按「点」微调空白(约 8~12 点≈1mm)。切纸前、图文之间留白用它;整行空白用换行

切纸 / 开钱箱

  • 切纸:0 全切 · 1 半切;无刀口机器可能忽略
  • 开钱箱:钱箱须接到打印机;0/1 对应不同脉冲针脚,无反应可换试

输出条码 / 输出二维码

条码类型 含义
0 CODE128(默认)
1 CODE39
2 EAN13
3 EAN8
4 UPC-A

二维码模块大小 1~16,58mm 纸常见 3~5。指令偏 Epson,机型差异大。

打印到打印机 / 打印到网口 / 打印到串口 / 取错误

见上表;失败时 取错误() 看原因(连接失败、OpenPrinter、串口占用等)。

命令摘要

方法 一句话
置/取编码 文本编码 GBK/UTF-8
清缓冲 / 取字节集 清空 / 取出指令
初始化 每张票开头复位
置对齐 · 置加粗 · 置字号 · 置下划线 后续文字样式
输出文本 · 换行 · 走纸 正文与空白
切纸 · 开钱箱 收尾与钱箱
输出条码 · 输出二维码 码类
打印到打印机 · 打印到网口 · 打印到串口 投递
取错误 失败原因