开发者文档

把打印能力接进你的系统

客户端开源免费(MulanPSL v2)。命令走「命令 + JSON 参数」范式,可经托盘、 本地 Web 服务 /command、或 AO 远程下发。源码在 Gitee。

命令面

每条命令接收一个 JSON 字符串参数(args),返回结果字符串。分组如下。

打印

  • PrintFile多格式文件打印(PDF/Office/图片/文本/XPS/SVG/OFD)
  • PrintPdf指定打印机直接输出 PDF
  • TemplatePrintHTML 模板 + JSON 数据占位符替换(面单/标签)
  • PrintEscPosESC/POS 原始指令直打热敏
  • PrintBarcode条形码直打(1D/2D)
  • PrintTestPage打印机测试页 / 纸张探测

虚拟 / 文档

  • PrintToPdf无头渲染转 PDF 虚拟文档
  • PrintToXps生成并打印 XPS 文档
  • GetPrinterList / Detail枚举打印机与纸张能力
  • SetDefaultPrinter设置默认打印机

队列

  • QueuePrint任务入队
  • GetQueue / RetryJob / CancelJob查询 / 重试 / 取消
  • ClearQueue清空队列

系统

  • CleanDisk / CleanAppTemp扫描 / 清理 / 回收站 / 配额
  • CheckUpdate / ApplyUpdateGitee 拉取最新版 + SHA256 校验原地替换
  • GetMachineFingerprint本机指纹(设备 ID)

模板 + 数据范式

模板为 HTML,含 {{占位符}};数据为 JSON。 客户端下载模板(直链 URL)→ 占位符替换(值 HTML 转义)→ 无头渲染转 PDF → 按纸规匹配分流打印。

// 模板 + 数据(客户端 TemplatePrint 接收)
{
  "template": "https://tpl.example.com/waybill/100x150.html",
  "data": { "name": "李", "addr": "上海市…", "phone": "138…" },
  "printer": "POSTEK 2108",
  "copies": 1,
  "fit": "auto",
  "paperKind": "100x150"
}

AO 远程打印协议

终端出站 WebSocket 长连接,无需公网入口;断外网离线补打。

// AO 出站长连接(终端 → 中继)
WSClient ──注册──▶ Relay(Hub:设备表 + JobFrame)
Relay ──任务下发──▶ WSClient(devId 路由)
Relay ◀──状态回报── WSClient(done/failed/纸规能力)
断外网 → 本地队列,恢复后补打(离线可用)

自动更新(latest.json)

经 Gitee Release 自动更新:拉取最新版 → SHA256 校验 → 原地替换,用户数据不动。

// dist/latest.json(Gitee Release 自动更新清单)
{
  "version": "1.01.002",
  "downloads": { "green": "…win-x64.zip", "installer": "…Setup.exe" },
  "sizes": { "green": 11344584 },
  "sha256": { "green": "31650caf…", "installer": "…" }
}

构建与部署

客户端 .NET 10;云端 Golang 双形态构建期隔离。

// 客户端(.NET 10 WinForms)
dotnet publish -c Release -r win-x64
# 产出 win-x64 绿色 zip + NSIS 安装版,经 Gitee Release 分发

// 云端(构建期隔离:两种形态物理不同)
./build.sh saas                 # 多租户 SaaS
./build.sh standalone 7 200     # 私有部署(OrgID=7,设备上限 200)
# SQLite 需 CGO_ENABLED=1;MySQL/Postgres 纯 Go

集成示例

业务系统 / Web / 手机如何把打印任务下发到终端。

HTTP(本地 Web 服务)

POST http://终端:8080/command
{ "cmd": "template", "args": "\{}template/…" }

WebSocket(AO 远程)

WS 出站 → Relay
{ "type": "job", "devId": "…", "template": "…", "data": {…} }

.NET 服务调用

PrintServices.TemplatePrint(jsonArgs)
// 内部:下载模板 → 占位符替换 → 转 PDF → 纸规匹配打印