원클릭으로
printing
How Hermes handles physical printing — warehouse POs, GS1-128 carton labels, invoices
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
How Hermes handles physical printing — warehouse POs, GS1-128 carton labels, invoices
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | printing |
| description | How Hermes handles physical printing — warehouse POs, GS1-128 carton labels, invoices |
| tags | ["hermes","skills","printing","phase-2c"] |
How Hermes controls printers. Windows-first, graceful degradation on non-Windows.
| Document | Trigger | Printer | Env Gate |
|---|---|---|---|
| Warehouse PO | Every successful A2000 order entry (Step 3) | WAREHOUSE_PRINTER_NAME | HERMES_PRINT_WAREHOUSE_PO=1 |
| GS1-128 carton label | Every shipment (called from label workflow) | LABEL_PRINTER_NAME | HERMES_PRINT_LABELS=1 |
| Invoice | On explicit request only ("print me the invoice for order 42") | WAREHOUSE_PRINTER_NAME | Manual |
Printing is always opt-in. Default for all flags is 0 (disabled).
The exact Windows printer name must match what the OS reports:
python scripts/printer_tool.py --list
Copy the name field verbatim into WAREHOUSE_PRINTER_NAME or LABEL_PRINTER_NAME in .env.
Common names:
HP LaserJet Pro MFP M428fdw (1) — typical office laserZDesigner ZT411-300dpi ZPL — Zebra label printer (exact model string varies)Standard printer (warehouse PO, invoice): Any PCL/PDF-capable printer. Hermes generates
a PDF and sends it via the Windows Shell printto verb. The driver renders it.
Thermal / ZPL printer (labels): Must be set to a RAW or ZPL port — NOT a Windows GDI driver. Hermes sends raw ZPL bytes directly, bypassing the driver. If your Zebra printer is configured as a Windows GDI driver, the label will print as garbled text. Use the Zebra Setup Utilities to install the printer with the "ZPL" port type.
Print failures never fail the order.
ESCALATION_EMAILENTERED and processing continues normallypython scripts/printer_tool.py --print logs/invoices/<id>.pdfHermes does NOT retry prints automatically. If the printer is offline, fix it and re-run manually.
adapters/gs1_128_label.py::generate_label_zpl()
→ zpl string
→ adapters/gs1_128_label.py::print_label(zpl, printer_name)
→ subprocess: scripts/printer_tool.py --print-zpl-string "..." --printer NAME
→ win32print.WritePrinter() [RAW datatype]
All ZPL is transmitted as raw bytes — Zebra firmware interprets it directly.
| Symptom | Likely Cause | Fix |
|---|---|---|
| "Printer control requires Windows + pywin32" | pywin32 not installed | pip install pywin32 |
Printer not in --list output | Not installed in Windows | Add via Settings > Bluetooth & devices > Printers |
| PDF prints blank or garbled | Driver not PCL/PostScript | Check driver type in printer properties |
| ZPL label prints as text | Printer in GDI mode instead of RAW/ZPL | Reinstall with Zebra Setup Utilities, select ZPL port |
| "Access is denied" error | No print permission | Run as administrator or add user to print queue ACL |
| Job disappears from queue instantly | Printer offline | Bring printer online; check paper/ribbon |