Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
IEC 29341-19-1 标准定义了 UPnP 打印机设备,使联网打印机能够被 UPnP 控制点自动发现和控制,无需手动安装驱动程序。该设备模板规定了一组标准化的服务,包括 PrintBasic(用于作业提交和状态查询)以及可选的 PrintJobAdmin(用于作业队列管理)。遵循此标准,打印机制造商可以确保在不同操作系统和客户端设备之间实现无缝互操作。发现机制依赖于 SSDP 协议,打印机通过多播 M-SEARCH 和 NOTIFY 消息在本地网络上宣告其存在和能力。
friendlyName(例如”三楼彩色激光打印机”)。在拥有数十台网络打印机的企业部署中,这能显著改善用户体验。PrintBasic 服务是每个 UPnP 打印机的强制性核心服务。它公开 Print 操作,接受 MIME 类型的文档输入并将其提交到打印队列。该服务维护多个状态变量,包括 PrinterStatus(空闲、打印中、暂停、错误、离线)、JobStatus(待处理、处理中、已完成、已取消、已中止)和 JobId(每个提交作业的唯一标识符)。控制点调用 Print 时传入包含原始打印数据的 Document 参数和描述其格式的 MIMEType 参数,打印机返回一个 JobId 供控制点后续查询进度。
| 操作 | 描述 | 关键参数 |
|---|---|---|
| 提交文档进行打印 | Document(bin.base64), MIMEType(string) | |
| GetPrinterStatus | 获取当前打印机状态 | 无 |
| GetJobStatus | 查询指定作业的状态 | JobId(UI4) |
| CancelJob | 取消排队中或活动中的作业 | JobId(UI4) |
Print 操作中的 Document 参数以 base64 编码的二进制数据形式在 SOAP 信封内传输。对于大尺寸打印作业,这可能产生超过 10 MB 的 XML 负载。务必配置您的 HTTP 堆栈以接受足够大小的消息,并考虑使用分块传输编码来流式传输大型文档。在企业环境中,UPnP 打印机应部署在隔离的 VLAN 上,以防止来自访客网络的未授权访问。UPnP 打印机标准本身不包含身份验证或加密机制,所有 SOAP 调用均以明文传输。因此,同一子网内的恶意攻击者可以提交任意打印作业或提取作业元数据。对于敏感打印环境,建议在网络传输层叠加 IPsec 或 TLS,或使用专用的打印管理网关在将作业转发到 UPnP 打印机之前对用户进行身份验证。
GetPrinterStatus 与 GENA 事件订阅结合使用时无需轮询。控制点可以订阅 PrinterStatus 事件变量,在打印机从”打印中”转换为”空闲”时立即收到通知,从而显著降低高打印量环境中的网络开销。实现稳健的 UPnP 打印机需要仔细管理作业队列。PrinterStatus 状态机必须优雅地处理卡纸、缺粉和网络超时等边界情况。对于内存受限的嵌入式打印机,应在 SOAP 层而非光栅化引擎处设置最大作业大小限制,以防止超大文档在渲染开始前耗尽帧缓冲区内存。此外,务必对 MIMEType 字段进行数据清洗,在流水线早期拒绝不支持的格式。
JobStatus 独立跟踪。打印机固件决定可以假脱机的作业数量。application/pdf 和 image/jpeg。建议额外支持 image/png、text/plain 和 application/postscript 等格式以增强互操作性。