概览
打印系统由三部分组成:
这与发票、采购订单、报价单和工单流转卡等生成的文档不同,后者以文件形式送达。打印是把输出发送到实体打印机,默认输出是热敏 ZPL 标签。
格式
作业被路由到的打印机决定其渲染方式:- ZPL 是热敏标签打印机的命令语言,也是零件标签和存储单元标签的默认格式。只有当介质尺寸具有 ZPL 尺寸时,ZPL 标签才能渲染。
- PDF 是完整文档,由生成发票和工单流转卡的同一套 React-PDF 引擎绘制。看板卡片仅支持 PDF,因此除非有模板覆盖,将其发送到仅支持 ZPL 的打印机会失败。
单据类型
定义了三种标签类型(packages/web/printing/src/registry.ts 中的 documentTypeRegistry):
来源单据决定可以打印哪些类型:过账发货会生成产品标签,扫描存储单元会生成存储单元标签。查找由 getDocumentTypesForSource 完成。
设置打印
1. 添加打印机路由
打印机路由代表一台实体打印机。前往设置 → 打印 → 打印机,选择添加打印机。2. 测试打印机
每条路由都有一个测试操作,它会把一张小的 ZPL 标签直接发送到其printerUrl,让您在依赖打印机之前先确认它可达。测试只适用于设置了介质尺寸的 ZPL 路由,成功时会显示 "Test label sent to printer"(测试标签已发送到打印机)。
3. 将打印机分配给上下文
路由是一台打印机;分配决定何时使用它。打开设置 → 打印 → 分配,每个位置都有各自的区块。在其中,为每个上下文指定一台打印机(packages/web/printing/src/assignments.ts 中的 printerContexts):
每个上下文行还有一个自动打印开关;开启后,匹配的业务事件无需任何人点击就会打印。getPrinterContextForSource 查找来源单据对应的上下文,resolveContextAssignment 应用后备规则,因此未分配的上下文会使用该位置的默认打印机。
自动打印
在受支持的业务事件之后,Alforse 会查找该位置和上下文对应的打印机,检查autoPrint(未设置时视为开启)并将作业加入队列。打印失败绝不会阻止触发它的收货、发货或工单。
若要让某个工位静音,请在该位置对应上下文行上关闭自动打印。
手动打印
在相应界面上选择打印,或将来源单据发送到手动打印路由(/x/print),它会验证请求并将同类作业加入队列。
打印的行为取决于该位置:
打印作业队列
作业状态
origin:
作业还会存储
sourceDocument、sourceDocumentId、可读 ID、contentType,以及它送往的 printerUrl。
监控与重新打印
打开设置 → 打印 → 打印作业(Print jobs)。表格会实时更新,显示状态、描述、来源、类型、来源方式和时间。展开一行可查看打印机 URL、尝试次数、时间戳和任何错误。在一行上您可以:- 查看内容:ZPL 通过 Labelary 预览,PDF 在内嵌框架中预览;
- 重新打印,这会创建一个
origin: "reprint"的新作业; - 删除。
标签尺寸
介质尺寸来自固定目录(packages/web/utils/src/labels.ts):label2x1、label4x2、公制的 label100x50mm 和 label50x25mm,以及仅限 PDF 的 avery5163。只有带 ZPL 尺寸的规格才能在热敏打印机上打印,因此 Avery 这类仅限 PDF 的尺寸不能。
尺寸在两个地方设置:
- 每条打印机路由固定自己的
mediaSizeId,与该打印机中装载的标签相符; - 公司的默认产品标签尺寸(
companySettings.productLabelSize)在文档模板界面设置,当没有路由设置尺寸时,交互式标签下载路由使用它。
故障排除
标签没有打印
请按顺序检查:- 该位置和上下文已分配打印机路由,且其自动打印开关已开启。
- 路由有可访问的
printerUrl。没有它,作业会渲染但无法投递。 - 该作业在设置 → 打印 → 打印作业中不是失败状态。展开该行查看
error。