# 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`,按本机情况改: ```properties # HP 流转卡工位 printer.type=hp printer.name=HP LaserJet 3004 # TSC 标签工位 printer.type=tsc printer.name=TSC TTP-244 Pro ``` ### 3. 调用(业务代码) ```java 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`,重启客户端即可。