Python 3.10.6中win32api打印PDF文件路径找不到问题求助
解决ShellExecute打印PDF时找不到文件的问题
你的错误信息:
pywintypes.error: (2, 'ShellExecute', 'The system cannot find the file specified.')
看你的代码,主要有几个问题导致找不到文件,逐一解决:
1. 变量名拼写错误
代码里定义的是fileName(驼峰写法),但调用win32api.ShellExecute()时用的是filename(全小写),变量名大小写不匹配,导致传递了错误的路径值。把变量名统一,比如都改成pdf_path更清晰。
2. 相对路径不可靠
ShellExecute对相对路径的解析依赖当前工作目录,很容易因为脚本运行的目录和预期不符导致找不到文件。建议直接用绝对路径:
import os pdf_path = os.path.abspath(f"./cr/pdf/label{itemid1}.pdf")
3. 先确认PDF文件是否真的生成了
有时候convert函数可能因为权限、路径不存在等原因没生成PDF,提前检查文件存在性能避免无效调用:
if not os.path.exists(pdf_path): print(f"PDF文件 {pdf_path} 不存在,请检查转换函数是否正常工作") # 这里可以加终止逻辑或报错处理
4. 工作目录参数优化
ShellExecute的第5个参数是工作目录,建议设为PDF文件所在的目录,而不是.,这样系统能更准确找到文件:
pdf_dir = os.path.dirname(pdf_path) win32api.ShellExecute(0, "printto", pdf_path, f'"{printername}"', pdf_dir, 0)
修正后的完整代码示例
import os import pythoncom import win32api # 保存并转换文档 doc.save(f"./cr/generated_doc{itemid1}.docx") pythoncom.CoInitialize() convert(f"./cr/generated_doc{itemid1}.docx", f"./cr/pdf/label{itemid1}.pdf") printername = "Microsoft Print to PDF" # 生成绝对路径 pdf_path = os.path.abspath(f"./cr/pdf/label{itemid1}.pdf") # 检查文件是否存在 if not os.path.exists(pdf_path): raise FileNotFoundError(f"错误:PDF文件 {pdf_path} 未找到,请检查转换流程") # 执行打印 win32api.ShellExecute(0, "printto", pdf_path, f'"{printername}"', os.path.dirname(pdf_path), 0) # 清理临时文件 os.remove(f"./cr/generated_doc{itemid1}.docx") os.remove(fullnm)
内容的提问来源于stack exchange,提问作者Jimi
相关产品推荐
相关产品推荐

