核心功能

预览

打开预览窗口让用户确认后再出纸:预览里的改纸张、调图片位置、翻页,以及窗口操作怎么对应到代码。

最后更新

预览会打开 PrintLink 的预览窗口,让用户先看到要打的东西,确认后才出纸。 窗口里看到的页面,就是打印机收到的那一份——确认时不重新渲染,从机制上 排除了「预览和实际打出来不一样」。

const session = await client
  .compose({ queueId })
  .paper('A4')
  .addPdf(bytes)
  .preview();

console.log(session.pageCount);      // 共几页
console.log(session.warnings);       // 参数降级说明(如果有)

需要 job.preview 权限(默认已包含)。窗口由 PrintLink 弹出,用户点「打印」 后出纸;页面代码也可以主动控制:

await client.previewPrint(session.previewSessionId);   // 打印当前预览内容
await client.previewClose(session.previewSessionId);   // 关闭预览

预览窗口里有什么

  • 左侧缩略图:按输出页排列,可翻页;混排内容时每张带来源角标(图片 / PDF / 网页 / 模板)。
  • 状态栏:形如 输出 N 页 · 来源 n 项 · 纸张 A4 · 210×297 mm。
  • 右栏参数:纸张、份数、单双面、彩色/黑白、质量等,改完立即生效并重新预览。
  • 画布操作(选中图片页时):拖动、缩放、旋转、翻转,以及「还原此图片」。

输出页和来源项是两个概念:输出页是最终成品的第几页(1 到 pageCount), 来源项是你放进去的第几份内容。一份 3 页的 PDF 在混排里是 1 个来源项、占 3 个 输出页。缩略图角标与状态栏的「来源」说的是后者。

页面代码里改预览内容

用户改参数由窗口自己完成,页面代码一般不需要插手。需要时用 previewUpdate:

await client.previewUpdate({
  previewSessionId: session.previewSessionId,
  options: { paper: { id: 'A5' } },     // options 是完整替换,不是合并
});

预览里的每一页

需要自己实现预览界面(而不是用桌面窗口)时,可以逐页取栅格图:

const page = await client.previewGetPage(session.previewSessionId, 0);
// page.pngBase64      该页图片
// page.origin         这一页来自哪个来源项:{ itemIndex, kind, itemPageIndex }
// page.pageLayout     这一页实际采用的布局,必填

session.source.items 给出每个来源项落在哪些输出页(outputPageStart / outputPageCount),可以直接用来画「第 3 页 · PDF 2/3」这样的标注。

权限

previewGetPage 只对本机受信界面开放——网页页面拿不到它。网页侧请使用 preview() 让 PrintLink 打开它自己的预览窗口。

关窗与超时

  • 用户点窗口的关闭按钮或按 Esc,会先隐藏窗口,再异步回收会话;不会停留在 「预览已过期」这种页面上。
  • 会话长时间不用会过期,之后调用 previewPrint / previewGetPage 会得到 PREVIEW_NOT_FOUND。
  • previewClose 是主动释放,页面离开时不必强求调用,但清理更及时。

相关页面

本页目录