概覽
列印系統由三個部分組成:
這與發票、採購單、報價單與工單流程卡等以檔案形式送達的產生文件不同。列印會將輸出送到實體印表機,且預設輸出為熱感應 ZPL 標籤。
格式
工作被路由到哪台印表機,決定它如何渲染:- ZPL 是熱感應標籤印表機的指令語言,也是零件與儲位標籤的預設格式。ZPL 標籤只有在其紙張尺寸具有 ZPL 尺寸時才能渲染。
- PDF 是完整文件,由產生發票與流程卡的同一個 React-PDF 引擎繪製。看板卡僅限 PDF,因此除非有範本涵蓋,否則將看板卡傳送到僅支援 ZPL 的印表機會失敗。
文件類型
共定義三種標籤類型(packages/web/printing/src/registry.ts 中的 documentTypeRegistry):
來源文件決定可以列印哪些類型:過帳出貨會產生產品標籤,掃描儲存單位則會產生儲位標籤。這項查詢由 getDocumentTypesForSource 執行。
設定列印
1. 新增印表機路由
印表機路由代表一台實體印表機。前往設定 → 列印 → 印表機,然後選取新增印表機。2. 測試印表機
每個路由都有測試(Test)動作,會將一張小型 ZPL 標籤直接傳送到其printerUrl,讓您在依賴它之前確認印表機可以連線。測試僅適用於有紙張尺寸的 ZPL 路由,成功時會顯示 "Test label sent to printer"。
3. 將印表機指派給情境
路由是一台印表機;指派則決定何時使用它。開啟設定 → 列印 → 指派,每個地點都有自己的區塊。在其中為每個情境指定一台印表機(packages/web/printing/src/assignments.ts 中的 printerContexts):
每個情境列也有自動列印(Auto-print)開關;開啟時,對應的業務事件會在無人點選的情況下自動列印。getPrinterContextForSource 會找出來源文件的情境,resolveContextAssignment 則套用備援,因此未指派的情境會使用地點的預設印表機。
自動列印
在支援的業務事件之後,Alforse 會找出該地點與情境的印表機,檢查autoPrint(未設定時視為開啟),並將工作排入佇列。列印失敗絕不會阻擋觸發它的收貨、出貨或工單。
若要讓某個工作站安靜,請在該地點該情境的列上關閉自動列印。
手動列印
在相關畫面上選取列印,或將來源文件傳送到手動列印路由(/x/print),該路由會驗證請求並排入相同類型的工作。
列印的行為取決於地點:
列印工作佇列
工作狀態
origin:
工作還會儲存
sourceDocument、sourceDocumentId、可讀的 ID、contentType,以及送往的 printerUrl。
監控與重新列印
開啟設定 → 列印 → 列印工作。表格會即時更新,顯示狀態、說明、來源、類型、來源(origin)與時間。展開某一列可查看印表機 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。