You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用os.startfile打印PDF报Winerror 1155错误求助

问题产生原因

[Winerror 1155]报错的核心原因是Windows系统没有为PDF格式注册绑定对应「打印」操作的关联应用。

  • 图片、TXT文件可正常打印,是因为系统自带的记事本、照片查看器等原生程序,默认会在系统注册表写入对应格式的print动作调用入口,os.startfile调用print指令时可直接找到对应程序执行打印。
  • PDF格式没有系统原生支持打印的内置程序,如果设备未安装支持PDF打印的阅读器、安装的是绿色精简版PDF工具未写入注册表关联、或者安装了PDF工具但未设置为PDF格式的默认应用,系统收到PDF的打印指令时找不到可执行的关联程序,就会抛出1155错误。

另外原有代码存在逻辑错误:try...else结构中else块是try内代码无异常、执行成功时才会触发,现有代码把「打印机未连接」提示放在else块中逻辑完全颠倒,哪怕打印触发成功也会误报打印机未连接。

对应解决方法
  • 先修复系统PDF关联:安装正规带打印功能的PDF阅读器(不要使用免安装的绿色精简版),安装完成后右键任意PDF文件,选择「打开方式」-「选择其他应用」,勾选「始终使用此应用打开.pdf文件」选项,选中刚安装的PDF阅读器确认。设置完成后可手动右键点击目标PDF,确认右键菜单存在「打印」选项,即说明关联配置生效。
  • 修正原有代码的逻辑错误,参考修正后的代码:
import os
file = "C:\\Cheque_Software\\All_Data\\ISSUE_CHEQUE.pdf"
if not os.path.exists(file):
    print("错误:待打印的目标文件不存在")
else:
    try:
        os.startfile(file, "print")
        print("打印任务已成功发送至打印机队列")
    except Exception as Ex:
        err_str = str(Ex)
        if "1155" in err_str:
            print("打印失败:系统未配置PDF格式的默认打印关联程序,请先安装PDF阅读器并设置为默认应用")
        else:
            print(f"打印触发失败,错误信息:{err_str.title()}")
  • 兜底方案(不依赖系统默认关联):如果需要避免系统关联配置变动导致的打印失败,可以直接调用支持命令行打印的PDF工具执行打印,比如轻量的SumatraPDF,通过subprocess模块直接传参调用打印即可,示例代码:
import subprocess
# 替换为本地实际的程序路径、文件路径、打印机名称
pdf_tool_path = "C:\\Program Files\\SumatraPDF\\SumatraPDF.exe"
target_file = "C:\\Cheque_Software\\All_Data\\ISSUE_CHEQUE.pdf"
printer = "本机连接的打印机名称"
subprocess.run(
    [pdf_tool_path, "-print-to", printer, target_file],
    check=True
)

内容的提问来源于stack exchange,提问作者Jamshaid Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:45:37