打印模块

wangxichen 2e44f83968 预览 hace 2 días
config d138bf71b4 优化 hace 1 semana
lib 63ae1c6700 监控打印机 hace 1 semana
src 2e44f83968 预览 hace 2 días
.classpath 2e0ee91166 初始化 hace 1 semana
.gitignore 2e0ee91166 初始化 hace 1 semana
.project 2e0ee91166 初始化 hace 1 semana
README.md 2e0ee91166 初始化 hace 1 semana
SNMP-GUIDE.md 63ae1c6700 监控打印机 hace 1 semana
build.xml ed16231815 优化 hace 1 semana
sources.txt 63ae1c6700 监控打印机 hace 1 semana

README.md

mes-print

通用打印库。一个 jar 搞定 HP 激光打印机(流转卡)和 TSC 热敏标签机(标签)。

特性

  • 一份 jar 通用,全公司客户端复用
  • 0 第三方依赖(纯 JDK)
  • 门面 API 极简:Printer.printFlowCard() / Printer.printLabel()
  • 通过 config/print.properties 声明本机打印机型号,无需改代码
  • 支持的打印机:
    • HP 3004dn 及同类走 Windows 驱动的激光/喷墨打印机
    • TSC TTP-244 Pro 及同类支持 TSPL 的热敏标签机

使用(客户端接入)

1. 拷贝 jar

把编译产出的 mes-print.jar 放到客户端的 lib/ 目录。

2. 加配置

拷贝 config/print.properties.example 到客户端的 config/print.properties,按本机情况改:

# HP 流转卡工位
printer.type=hp
printer.name=HP LaserJet 3004

# TSC 标签工位
printer.type=tsc
printer.name=TSC TTP-244 Pro

3. 调用(业务代码)

import com.mes.print.Printer;
import com.mes.print.model.FlowCardData;
import com.mes.print.model.LabelData;

// 流转卡
FlowCardData d = new FlowCardData();
d.setProduct("+KB24");
d.setSn("A2026072200001");
d.setOpNo("OP130B");
Printer.printFlowCard(d);

// 标签
LabelData l = new LabelData();
l.setSn("A2026072200001");
l.setBarcode("A2026072200001");
Printer.printLabel(l);

打印失败会抛 PrinterException(继承 RuntimeException),业务自行决定 try/catch。

构建

ant jar

产出 dist/mes-print.jar

或者直接用 javac:

javac -encoding UTF-8 -source 1.8 -target 1.8 -d build/classes ^
      src/com/mes/print/*.java ^
      src/com/mes/print/*/*.java
jar cf dist/mes-print.jar -C build/classes .

装机验证

先跑一下 TestMain 看本机识别到的打印机:

java -cp mes-print.jar com.mes.print.TestMain list

如果输出里包含配置的打印机名,就是通的。然后:

java -cp mes-print.jar com.mes.print.TestMain label    # 打测试标签
java -cp mes-print.jar com.mes.print.TestMain card     # 打测试流转卡

项目结构

src/com/mes/print/
├── Printer.java                门面(对外唯一入口)
├── PrinterException.java       统一异常
├── PrinterFactory.java         按 config 选实现
├── TestMain.java               手动测试入口
├── config/PrinterConfig.java   config 加载
├── impl/
│   ├── PrinterImpl.java        实现接口
│   ├── HpPrinter.java          Java2D → HP
│   └── TscPrinter.java         TSPL → TSC
├── template/
│   ├── FlowCardRenderer.java   A4 流转卡渲染
│   └── LabelTspl.java          TSPL 生成
├── model/
│   ├── FlowCardData.java
│   └── LabelData.java
└── util/
    └── PrinterUtil.java        打印机查找

常见问题

Q: 未找到打印机: xxx 异常里会列出本机所有可用打印机名字。把 printer.name 改成列出的某个名字即可(支持模糊 contains 匹配)。建议装机时把打印机重命名成固定名字。

Q: TSC 打中文乱码 TTP-244 Pro 默认不带中文字库。三种解决:① 用 DiagTool 上传中文字库到打印机 ② 把中文渲染成位图用 TSPL BITMAP 发过去 ③ 标签内容只用数字/英文/条码。当前实现走方案 ③。

Q: 换打印机型号了怎么办config/print.properties 里的 printer.name,重启客户端即可。