分享打印机教程

把一台打印机开放给指定好友,或通过短链 / 二维码推广给更多人

PrintHub 提供两种分享方式:「按用户 ID 分享」适合把打印机借给熟人,开放后对方能像使用自己的打印机一样提交任务;「公开短链 / 二维码」适合放在工位、社团群等场景,让任何登录用户扫码查看打印机信息,并申请使用。两种方式互不冲突,可以同时启用。

1. 两种分享方式

在「设置 → 打印机」中找到要分享的打印机,点击行末的分享图标即可打开分享对话框。对话框上半部分是「按用户 ID 分享」,下半部分是公开短链与二维码。

  • 按用户 ID 分享:需要知道对方的 PrintHub 用户 ID。适合一对一信任场景,撤销时可立即停止对方的使用权限。
  • 公开短链 / 二维码:每台打印机都有一个 ≤5 字符的 short_id,任何登录用户扫码 / 访问链接即可看到打印机的公开信息(含名称、所在地、状态、是否需要审批)。
  • 注意:扫码者并不会自动获得使用权限。当前阶段仍需 owner 通过「按用户 ID 分享」将对方加入白名单,扫码页面主要用于信息展示与申请入口。

2. 按用户 ID 分享

在分享对话框的「目标用户 ID」输入框中填写对方的 PrintHub 用户 ID(注意是 ID 而不是用户名),点击「添加分享」即可。

  1. 询问对方进入「个人主页」→ 头像下方的「用户 ID」字段,形如 u_xxxxxxxx;
  2. 在分享对话框中粘贴该 ID;
  3. 点击「添加分享」按钮,列表中会立即出现一条新记录;
  4. 对方刷新「打印」页面的打印机列表即可看到这台打印机,可像自己的打印机一样提交任务。

分享是即时的:一旦添加,对方立刻可以提交任务;撤销后对方正在执行的打印任务也会被标记为「权限失效」。

3. 公开短链与二维码

每台打印机在创建后会被自动分配一个 short_id(≤5 字符 [0-9a-z]),老打印机可能为空。short_id 出现在分享对话框的二维码区域。

  • 二维码图片:取自匿名端点 /s/qr/{short_id},会随短链 ID 变化自动刷新;
  • 复制链接:点击「复制链接」会写入形如 https://printhub.example.com/s/abc12 的完整 URL;
  • 扫码者体验:扫码后看到打印机公开信息页(需要登录才能查看完整字段)。

将二维码贴在工位上、社团群里或新生迎新材料上,其他人扫一下就能知道这台打印机的位置、状态、是否需要 owner 审批。

4. 打印分享码

在「分享」对话框中点击「打印二维码」按钮,会弹出「打印分享码」对话框。

  • 选择每页排版:每页 1 / 2 / 3 个二维码三档可选,默认每页 1 个;
  • 预览:对话框中部展示单个二维码的最终效果,含打印机名称与「扫码连接打印机」提示语;
  • 点击「打印」后,前端会用 canvas 把 n 个二维码横向排到 A4 横向页面,再调用 @skyprint/image2pdf 转成 PDF;
  • PDF 随后以「临时私有文档」方式上传到 PrintHub(visibility=private),最后调用 /print 接口把任务发到本机,printer-agent 会把 PDF 实际打印出来。

整条链路在前端自动完成,不依赖浏览器打印对话框,可以离线保存 PDF 再用其它设备打印。

5. 撤销分享

在分享对话框的「当前分享」列表中,找到要撤销的用户,点击右侧的「撤销」按钮并在确认弹窗中确认即可。

  • 撤销是即时的:对方刷新打印机列表后,这台打印机立即从可选列表中消失;
  • 已下发到 printer-agent 但尚未完成的任务会被标记为权限失效,agent 不会把它投递到物理打印机;
  • 公开短链 / 二维码不会被撤销:它只展示公开信息,是否真正可用取决于 owner 的白名单。

如果你希望彻底关停短链入口,可以删除打印机(设置 → 打印机 → 删除),删除后 short_id 也随之失效。

6. 常见问题

如果你在分享过程中遇到问题,先看这里。

Q:扫码的人说看不到打印机?
A:扫码页面要求登录才能查看完整字段;未登录用户只能看到打印机名称。
Q:short_id 为空,二维码区域显示「暂无法展示」?
A:老打印机在早期上线时未生成 short_id。请联系管理员重新生成;目前 Web 端没有手动重新生成入口。
Q:撤销后对方还能看到这台打印机?
A:让对方刷新页面即可。客户端在打开「打印」页面时会重新拉取打印机列表与白名单状态。
Q:能不能给整个部门开分享,而不用一个个加?
A:目前 Web 端只支持按用户 ID 分享。如需批量开通,建议先在「我的打印机」页面用 API 工具或脚本批量调用 POST /printer/{id}/shares。

sharePrinterDocsPage.sections.faq.outro