【Y++】小票类使用-商店/便利店/超时打印功能
【Y++】小票类使用-商店/便利店/超时打印功能
约 1162 字 · 3 分钟阅读
Y++使用扩展类库:小票类实现打印。
Y++实现代码:
小票类 g_票
函数 置状态 (文本 s) {
标签状态.标题 = s
}
函数 组装小票 () {
g_票.清缓冲()
// 本机 escpos-emulator 按 UTF-8 显示;国内真机热敏多数用 3=GBK
g_票.置编码(1)
g_票.初始化()
g_票.置对齐(1)
g_票.置加粗(真)
g_票.置字号(2, 2)
g_票.输出文本(编辑店名.标题)
g_票.置加粗(假)
g_票.置字号(1, 1)
g_票.换行()
g_票.置对齐(0)
g_票.输出文本("-----------------------------------------------")
g_票.换行()
// 多行明细里的换行会编进缓冲(机子按 LF 换行)
g_票.输出文本(编辑明细.标题)
g_票.换行()
g_票.输出文本("-----------------------------------------------")
g_票.换行()
g_票.置加粗(真)
g_票.输出文本("合计: " + 编辑合计.标题)
g_票.置加粗(假)
g_票.换行(2)
g_票.置对齐(1)
如果 (编辑二维码.标题 != "") {
g_票.输出二维码(编辑二维码.标题, 3)
g_票.换行()
}
如果 (编辑条码.标题 != "") {
g_票.输出条码(编辑条码.标题, 0)
g_票.换行()
}
g_票.走纸(48)
g_票.切纸()
}
函数 按钮组装.单击 () {
组装小票()
字节集 包 = g_票.取字节集()
置状态("已组装 " + 到文本(字节集长度(包)) + " 字节(尚未发送)")
}
函数 按钮打印模拟器.单击 () {
组装小票()
文本 地址 = 编辑地址.标题
如果 (地址 == "") {
地址 = "127.0.0.1"
}
整数 端口 = 到整数(编辑端口.标题)
如果 (端口 <= 0) {
端口 = 9100
}
如果 (!g_票.打印到网口(地址, 端口)) {
置状态("失败: " + g_票.取错误())
信息框(g_票.取错误(), 0)
返回
}
置状态("已发送到 " + 地址 + ":" + 到文本(端口) + "(请看模拟器预览)")
}
函数 按钮存盘.单击 () {
组装小票()
字节集 包 = g_票.取字节集()
文本 路径 = 取运行目录() + "\\ticket_raw.bin"
如果 (!写出文件(路径, 包)) {
置状态("存盘失败")
返回
}
置状态("已写入 " + 路径 + "(" + 到文本(字节集长度(包)) + " 字节)")
}
函数 程序入口 () {
置状态("先开模拟器监听 9100,再点「打印到模拟器」。详见 README。")
载入(主窗口)
// 多行默认值在代码里写真实换行,避免窗体 XML 属性把 存成字面量
编辑明细.标题 = "可乐 x1 3.00" + "\n" + "面包 x2 8.00" + "\n" + "矿泉水 x1 2.00"
}


没有真机测试,使用的是模拟器打印效果。
源码下载: