核心功能

打印机与配置档

列出打印机、看实时状态与真实能力、保存常用参数为配置档。

最后更新

列出打印机

const { queues, devices } = await client.listPrinters();
  • queues —— 可以打印的目标,queueId 就是传给 compose({ queueId }) 的值。
  • devices —— 物理设备分组,同一台机器可能以多个队列出现(比如同时有不同的 驱动或纸盒配置)。

每个队列都带实时状态:

字段说明
isSystemDefault是操作系统的默认打印机
isUserPreferred用户在 PrintLink 控制台里设为「首选」的
status.stateready / printing / paused / offline 等
status.reasons状态原因码(缺纸、卡纸、门打开…)

挑选目标时的常见顺序:用户首选 → 系统默认 → 列表第一个。见 快速上手第 3 步。

实时状态

const status = await client.printerStatus(queueId);

状态也会在变化时推送,不必轮询:

const off = client.onPrinterStatusChanged((event) => {
  if (event.status.state === 'offline') notifyUser('打印机离线了');
});

读取真实能力

不要猜打印机支持什么,直接读:

const caps = await client.getCapabilities(queueId);

caps.media.supported;      // 支持的纸张
caps.media.ready;          // 当前已装载、可直接用的纸张
caps.media.customSize;     // 能否自定义尺寸,以及范围
caps.duplex.modes;         // 支持的双面模式
caps.color.supported;      // 能不能彩色
caps.copies;               // 份数范围
caps.mediaTypes.supported; // 纸张类型(照片纸、投影片…)
caps.borderless;           // 能否无边框

界面应该只展示这里列出的选项——给用户一个选了会被丢弃的选项,比不显示它 更糟。控制台「打印机 → 能力」页把这些能力可视化,并可一键刷新。

能力会缓存

getCapabilities(queueId) 返回缓存结果,读取很快。打印机换了驱动或改了配置时 传 refresh: true 强制重读。

配置档:保存常用参数

同一台打印机反复使用同一套参数(比如标签纸 + 高质量 + 特定纸盒)时,存成 配置档,打印时引用:

// 用打印机当前的原生配置新建
const profile = await client.createProfileFromNative(queueId, '标签纸 · 高质量');

// 再补上跨平台的标准选项
await client.setProfileStandard(profile.id, { copies: 1, quality: 'best' });

// 设为这台打印机的默认配置档
await client.setDefaultProfile(profile.id);

// 打印时引用
await client.compose({ queueId }).profile(profile.id).addDocument(doc).printAndWait();

一个配置档分两层:

  • 标准选项——跨平台统一的参数(份数、纸张、双面、质量…),可以直接在控制台编辑, 单次打印时也能覆盖。
  • 原生参数——驱动私有的完整配置快照(Windows DEVMODE、CUPS/IPP 选项等), 用「从当前原生配置新建」从打印机当前状态捕获。这部分只保存在本机,绝不通过网络传出。

配置档什么时候会失效

打印机换驱动、改配置后,旧配置档里的原生参数可能已经不适用。PrintLink 不会 硬套,而是标注状态:

状态含义
有效与当前打印机匹配,可以放心用
需复核打印机能力或驱动变了,建议重新捕获
已失效已无法应用到当前打印机

打印时引用失效配置档会得到 PROFILE_NOT_FOUND,应引导用户去控制台重新设置。

其他打印机操作

client.setPreferredPrinter(queueId);   // 设为「首选」(会显示在列表里)
client.openPrinterSettings(queueId);   // 打开系统打印机设置(需 printer.settings 权限)

client.listProfiles(queueId);          // 查配置档(需 profile.read)
client.renameProfile(id, '新名字');
client.deleteProfile(id);

相关页面

本页目录