Windows Printing
在 Windows 上处理本地打印任务时,优先复用本 skill,而不是每次临时拼 PowerShell。
工作流
- 1. 如果用户说“桌面上的 xxx”“下载里的 xxx”“那个测试 PDF”之类的模糊文件名,先运行
scripts/resolve_file.ps1 查候选文件。 - 运行
scripts/list_printers.ps1 列出当前可用打印机,并带出默认打印机及当前配置。 - 把打印机名称按序号或清单展示给用户,让用户明确选择;如果只有一台明显目标打印机,也仍然优先复述确认。
- 收集或确认这些参数:
-
printer:打印机名称
-
file:要打印的本地文件路径
-
color_mode:
keep /
color /
grayscale
-
copies:正整数
-
duplex_mode:
keep /
one-sided /
long-edge /
short-edge
-
paper_size:如
A4 /
A3 /
Letter
- 5. 正式打印前,先用
scripts/print_file.ps1 -WhatIfOnly 生成“将要提交”的配置摘要;如果用户话里已经足够明确,可直接执行,否则先把摘要复述给用户确认。 - 调用
scripts/print_file.ps1 执行打印。 - 打印后优先直接读取脚本输出里的
receipt 字段作为回执来源,不要每次手工重组。 - INLINECODE21 字段当前由脚本稳定输出 ASCII 值(如
grayscale、one-sided、submitted-queue-empty);在对用户展示时,再翻译成自然中文回执。 - 如果
receipt 缺失,再按模板兜底组装回执,至少包含:文件名、打印机、颜色、份数、单双面/翻转、纸张、队列状态、是否有错误。 - 如果队列为空,说明任务通常已被系统接收或快速完成,不要硬说“百分百已打印完成”。
默认规则
- - 如果用户没有指定打印机:必须先列出可用打印机并让用户选。
- 如果用户只说“用上次那台”“测试打印机”之类的模糊称呼:列出匹配项并让用户按序号确认,不要自作主张。
- 如果用户没有给完整路径但文件名足够明显:先用
resolve_file.ps1 在桌面、文档、下载目录中找候选;唯一高置信命中时可直接复述确认,多命中时必须让用户选。 - 如果用户没有指定颜色:默认
keep,保持当前打印机配置,不要擅自改。 - 如果用户没有指定份数:默认
1。 - 如果用户没有指定单双面:默认
keep;但如果用户明确说“单面/双面”,必须显式设置。 - 如果用户说“双面打印”但没说翻转方式:默认
long-edge,并在回复里点明是“沿长边翻转”。 - 如果用户指定纸张大小:尽量设置;如果打印机或驱动不接受该纸张,明确告诉用户是驱动限制。
- 除非用户说得极明确,否则正式打印前先给一条简短确认:打印机、文件、颜色、份数、单双面/翻转、纸张大小。
参数映射
把用户语言映射到脚本参数:
- - 黑白、灰度、仅黑白 → INLINECODE31
- 彩色 → INLINECODE32
- 单面 → INLINECODE33
- 双面、双面打印、长边翻转 → INLINECODE34
- 短边翻转 → INLINECODE35
把脚本参数映射到 Windows 打印配置:
- -
one-sided → INLINECODE37 - INLINECODE38 → INLINECODE39
- INLINECODE40 → INLINECODE41
- INLINECODE42 → INLINECODE43
- INLINECODE44 → INLINECODE45
执行方式
解析模糊文件名:
CODEBLOCK0
列出打印机:
CODEBLOCK1
打印前预演:
CODEBLOCK2
正式打印:
CODEBLOCK3
确认话术模板
正式提交前,优先用这种简洁格式复述:
- - 我将打印: INLINECODE46
- 打印机: INLINECODE47
- 颜色:黑白
- 份数:2
- 方式:双面(沿长边翻转)
- 纸张:A4
如果用户直接回复“确认 / 打 / 可以”,再执行正式打印。
打印后回执模板
正式打印后,优先按这个结构回报:
- - 打印回执
- 文件: INLINECODE48
- 打印机: INLINECODE49
- 颜色:黑白
- 份数:2
- 方式:双面(沿长边翻转)
- 纸张:A4
- 队列状态:空 / 仍有 1 个任务 / 有异常
- 结果:已提交到系统 / 提交失败
脚本输出中的 receipt 字段应作为首选回执来源,建议直接读取其字段:
- - INLINECODE51
- INLINECODE52
- INLINECODE53
- INLINECODE54
- INLINECODE55
- INLINECODE56
- INLINECODE57
- INLINECODE58
- INLINECODE59
- INLINECODE60 (有错误时)
如果脚本返回 errors 非空:
- - 明确写“结果:提交失败”
- 把最关键的一条报错翻成人话
如果脚本返回 queueCount = 0:
- - 可以写“任务已提交,当前队列为空,通常表示已被系统接收或快速处理”
- 不要写成“已确定打印完成”
注意事项
- - 这个脚本优先面向
PDF;对其它格式依赖系统默认关联程序是否支持静默打印。 - 多份打印目前通过循环提交任务实现;因此大份数时要提醒用户别手滑填太大。
- INLINECODE64 会修改打印机当前配置;脚本会尽量恢复原配置,但如果关联程序长期占用或驱动异常,恢复可能失败,要把这一点说清楚。
- INLINECODE65 不会真正打印,只用于生成预演配置,适合打印前确认。
- 如果第一次打印失败,优先检查:文件路径、打印机关联名、驱动是否在线、默认 PDF 打开程序是否支持
PrintTo。
Windows Printing
在 Windows 上处理本地打印任务时,优先复用本 skill,而不是每次临时拼 PowerShell。
工作流
- 1. 如果用户说“桌面上的 xxx”“下载里的 xxx”“那个测试 PDF”之类的模糊文件名,先运行 scripts/resolvefile.ps1 查候选文件。
- 运行 scripts/listprinters.ps1 列出当前可用打印机,并带出默认打印机及当前配置。
- 把打印机名称按序号或清单展示给用户,让用户明确选择;如果只有一台明显目标打印机,也仍然优先复述确认。
- 收集或确认这些参数:
- printer:打印机名称
- file:要打印的本地文件路径
- color_mode:keep / color / grayscale
- copies:正整数
- duplex_mode:keep / one-sided / long-edge / short-edge
- paper_size:如 A4 / A3 / Letter
- 5. 正式打印前,先用 scripts/printfile.ps1 -WhatIfOnly 生成“将要提交”的配置摘要;如果用户话里已经足够明确,可直接执行,否则先把摘要复述给用户确认。
- 调用 scripts/printfile.ps1 执行打印。
- 打印后优先直接读取脚本输出里的 receipt 字段作为回执来源,不要每次手工重组。
- receipt 字段当前由脚本稳定输出 ASCII 值(如 grayscale、one-sided、submitted-queue-empty);在对用户展示时,再翻译成自然中文回执。
- 如果 receipt 缺失,再按模板兜底组装回执,至少包含:文件名、打印机、颜色、份数、单双面/翻转、纸张、队列状态、是否有错误。
- 如果队列为空,说明任务通常已被系统接收或快速完成,不要硬说“百分百已打印完成”。
默认规则
- - 如果用户没有指定打印机:必须先列出可用打印机并让用户选。
- 如果用户只说“用上次那台”“测试打印机”之类的模糊称呼:列出匹配项并让用户按序号确认,不要自作主张。
- 如果用户没有给完整路径但文件名足够明显:先用 resolve_file.ps1 在桌面、文档、下载目录中找候选;唯一高置信命中时可直接复述确认,多命中时必须让用户选。
- 如果用户没有指定颜色:默认 keep,保持当前打印机配置,不要擅自改。
- 如果用户没有指定份数:默认 1。
- 如果用户没有指定单双面:默认 keep;但如果用户明确说“单面/双面”,必须显式设置。
- 如果用户说“双面打印”但没说翻转方式:默认 long-edge,并在回复里点明是“沿长边翻转”。
- 如果用户指定纸张大小:尽量设置;如果打印机或驱动不接受该纸张,明确告诉用户是驱动限制。
- 除非用户说得极明确,否则正式打印前先给一条简短确认:打印机、文件、颜色、份数、单双面/翻转、纸张大小。
参数映射
把用户语言映射到脚本参数:
- - 黑白、灰度、仅黑白 → grayscale
- 彩色 → color
- 单面 → one-sided
- 双面、双面打印、长边翻转 → long-edge
- 短边翻转 → short-edge
把脚本参数映射到 Windows 打印配置:
- - one-sided → OneSided
- long-edge → TwoSidedLongEdge
- short-edge → TwoSidedShortEdge
- color → Color=$true
- grayscale → Color=$false
执行方式
解析模糊文件名:
powershell
powershell -ExecutionPolicy Bypass -File \scripts\resolve_file.ps1 -Query 测试.pdf
列出打印机:
powershell
powershell -ExecutionPolicy Bypass -File \scripts\list_printers.ps1
打印前预演:
powershell
powershell -ExecutionPolicy Bypass -File \scripts\print_file.ps1 \
-FilePath D:\path\file.pdf \
-PrinterName 打印机 1 \
-ColorMode grayscale \
-Copies 2 \
-DuplexMode one-sided \
-PaperSize A4 \
-WhatIfOnly
正式打印:
powershell
powershell -ExecutionPolicy Bypass -File \scripts\print_file.ps1 \
-FilePath D:\path\file.pdf \
-PrinterName 打印机 1 \
-ColorMode grayscale \
-Copies 2 \
-DuplexMode one-sided \
-PaperSize A4
确认话术模板
正式提交前,优先用这种简洁格式复述:
- - 我将打印:测试.pdf
- 打印机:打印机 1
- 颜色:黑白
- 份数:2
- 方式:双面(沿长边翻转)
- 纸张:A4
如果用户直接回复“确认 / 打 / 可以”,再执行正式打印。
打印后回执模板
正式打印后,优先按这个结构回报:
- - 打印回执
- 文件:测试.pdf
- 打印机:打印机 1
- 颜色:黑白
- 份数:2
- 方式:双面(沿长边翻转)
- 纸张:A4
- 队列状态:空 / 仍有 1 个任务 / 有异常
- 结果:已提交到系统 / 提交失败
脚本输出中的 receipt 字段应作为首选回执来源,建议直接读取其字段:
- - title
- fileName
- printer
- color
- copies
- duplex
- paperSize
- queueStatus
- result
- errorSummary(有错误时)
如果脚本返回 errors 非空:
- - 明确写“结果:提交失败”
- 把最关键的一条报错翻成人话
如果脚本返回 queueCount = 0:
- - 可以写“任务已提交,当前队列为空,通常表示已被系统接收或快速处理”
- 不要写成“已确定打印完成”
注意事项
- - 这个脚本优先面向 PDF;对其它格式依赖系统默认关联程序是否支持静默打印。
- 多份打印目前通过循环提交任务实现;因此大份数时要提醒用户别手滑填太大。
- Set-PrintConfiguration 会修改打印机当前配置;脚本会尽量恢复原配置,但如果关联程序长期占用或驱动异常,恢复可能失败,要把这一点说清楚。
- -WhatIfOnly 不会真正打印,只用于生成预演配置,适合打印前确认。
- 如果第一次打印失败,优先检查:文件路径、打印机关联名、驱动是否在线、默认 PDF 打开程序是否支持 PrintTo。