打印文档教程
在 PrintHub 上打印自己上传的 PDF / DOCX,或打印他人分享给你的打印机
PrintHub 的打印流程统一为三步:选文档 → 选打印机 → 配置打印参数。文档来自「我的文档」或公开文档池;打印机来自「我的打印机」或他人分享给你的打印机。
1. 打印入口
PrintHub 提供两种主要入口:
- 首页「快速操作 → 打印文档」:会引导到 /print 页面,按三步向导完成。
- 文档详情页:每份文档的右上角都有「打印」按钮,点击后直接进入向导并预选该文档。
- 「我的打印机」每台打印机旁的「打印」图标:会进入向导并预选该打印机。
所有入口都汇聚到同一个三步向导,下面分章节介绍每一步。
2. 打印自己上传的文档
「我的文档」页面列出你通过 /document/batch_upload 上传的所有 PDF / DOCX。
- 进入 /print,向导第一栏「选择文档」,使用搜索框按标题 / 简介过滤;
- 选中要打印的文档(一次只能选一份),点「下一步」;
- 向导第二栏「选择打印机」,从「我的打印机」中点选一台在线的设备;
- 向导第三栏「配置打印参数」,按需设置份数 / 颜色 / 双面 / 纸张 / 方向;
- 点「立即打印」提交任务。系统会弹出一个 toast「打印任务已提交」,你也可以到 /record/print 查看任务进度。
如果列表为空,先回 /documents 页面上传 PDF / DOCX,再回到 /print。上传支持拖拽、批量、可见性(公开 / 私有)。
3. 打印到他人分享给你的打印机
当其他用户把你加入某台打印机的白名单(参考「分享打印机」教程)后,这台打印机就会出现在「我的打印机」中,与你自己的打印机混在一起,标签上会注明 owner。
- 在「我的打印机」列表中找到 owner 不是自己的那一台;
- 点开它的「打印」图标,进入 /print 向导并预选该打印机;
- 按常规流程选择文档并配置参数。唯一区别是 owner 字段会显示分享者的昵称。
- 提交后任务仍归你所有,可以在「我的打印记录」中查看进度、取消或重新发起。
如果之前能看到、但现在看不到这台打印机了,说明 owner 撤销了你的访问权限或已删除打印机。联系 owner 即可恢复。
4. 打印参数
「配置打印参数」步骤的字段会按打印机的实际能力动态调整:能力由 printer-agent 在注册时从 IPP 属性派生。
- 份数:1-99 之间的整数,会按打印机能力 clamp。
- 颜色:彩色 / 灰度。灰度打印机自动禁用彩色选项。
- 双面:单面 / 双面长边 / 双面短边。低端打印机通常不支持。
- 纸张:A4 / A5 / A6 / B5 / Letter。
- 方向:纵向 / 横向,对应 PDF 页面的旋转。
如果某项参数在当前打印机上不生效,通常是因为 agent 上报的 capabilities 与打印机实际能力不一致;请到「我的打印机」查看设备能力快照。
5. 打印记录
/record/print 页面按时间倒序列出你发起的所有打印任务。
- 状态机:pending → pushed → printing → done / error / locked。
- pending:任务已创建,等待 printer-agent 拉取;
- pushed:已被 agent 拉取,尚未开始打印;
- printing:agent 正在通过 IPP 投递;
- done / error:成功或失败。点击「重新打印」可基于历史参数快速重发。
- locked:通常因为 owner 撤销了分享或打印机被删除。
想要更详细的实时进度,可调用 /task/{id}?include=snapshot 获取 agent 上报的最近一次快照(含 state、started_at、updated_at)。
6. 常见问题
如果打印流程未按预期工作,先看这里。
Q:提交后任务一直停在「等待」?
A:printer-agent 离线。检查 agent 主机到 printhub-host 的网络是否可达,token 是否被轮换。
Q:打印机列表为空?
A:先到「我的打印机」注册一台(参考 printer-agent 部署教程)。如果列表里只有自己注册的打印机而没有别人分享的,说明当前没有其他用户把你加入白名单。
Q:任务失败并提示「download_url is empty」?
A:printhub-host 找不到 printer-agent 上传的 token。请到「设置 → 打印机」中删除打印机后重新签发 token、重新部署 agent。
Q:颜色 / 双面选项不可选?
A:当前打印机在 IPP 协议上未声明该能力。普通家用黑白激光打印机没有彩色 IPP 属性属正常现象。
printDocsPage.sections.faq.outro