远程打印配置指南
适用场景
工作原理
服务端你需要做什么
npm API(printHtml 等)与远程打印的关系
标准消息格式(固定,不可改结构)
建议与客户端「测试任务」保持一致的 JSON 结构,服务端按下列字段组织即可:
{
"id": "uuid",
"timestamp": 1710000000000,
"type": "printHtml",
"content": "<div>Shipping label #10086</div>",
"pdfOptions": {
"paperFormat": "A4",
"margin": { "top": "20px", "bottom": "20px", "left": "20px", "right": "20px" },
"printBackground": false
},
"printOptions": { "paperFormat": "A4", "printerName": "Default printer" },
"extraOptions": { "requestTimeout": 15 }
}
客户端配置
在客户端 UI「远程打印配置」中选择方式并填写 URL,配置持久化到本地:
| 配置操作 | 说明 |
|---|---|
| 保存远程打印配置 | Body: { method: "websocket"|"http", url: "..." } |
| 读取当前配置 | 返回已保存的监听方式与 URL |
| 清空配置 | 停止远程监听并清除本地记录 |
内置测试地址(验证配置是否生效):
WebSocket:
HTTP:
WebSocket:
ws://127.0.0.1:{port}/websocket/remotePrintTest(每 8 秒推送测试任务)HTTP:
http://127.0.0.1:{port}/api/test/remotePrintTestWebSocket 模式
客户端连接你配置的 WS 地址,收到 JSON 任务后进入本地打印流程;网络异常时会按策略自动重连。
Node.js 服务端推送示例:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 9000 });
function buildTask() {
return {
id: crypto.randomUUID(),
timestamp: Date.now(),
type: 'printHtml',
content: '<div>WMS label</div>',
pdfOptions: { paperFormat: 'A4' },
printOptions: { paperFormat: 'A4' },
extraOptions: { requestTimeout: 15 }
};
}
wss.on('connection', (ws) => {
ws.send(JSON.stringify(buildTask()));
});
客户端配置 URL 填 ws://your-server:9000。无任务时不要推送空消息。
HTTP 轮询模式
客户端按固定间隔请求你配置的 URL,解析统一响应格式:
// No job…
仅当响应中的任务对象包含必要字段(如 id、timestamp、type)时才执行打印。
Express 服务端示例:
const express = require('express');…
客户端配置 URL 填 http://your-server:8080/api/print/pull。
远程打印 vs 本地 npm API
- 远程模式:固定格式 JSON → 自建接收/存储服务 → 暴露消费接口 → 客户端填 URL 出纸(不调 npm API)
- 本地模式:Vue/React 集成 npm,用户点击后浏览器调用
webPrintPdf.printHtml(可用来对照 JSON 字段,但不是远程链路) - 可并存:无人值守走远程入队 + 客户端消费接口;仓管补打等手动场景仍可用 npm 本地打印。