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
相关产品推荐
相关产品推荐

