You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python调用Photoshop并向已创建的PSD模板添加用户输入数据?及解决打开PSD文件时的COM错误

解决Python调用Photoshop时的Illegal argument - argument 1错误

嘿,这个错误我之前也碰到过!根源很明确:你的文件路径格式不对,Photoshop的COM接口没办法正确解析你传入的路径字符串,所以才会提示“需要一个指向现有文件/文件夹的引用”。

Windows系统里的反斜杠\在Python中是转义字符,直接写"D:\Coding..."的话,Python会把部分反斜杠和后面的字符当成转义序列处理,导致实际传递给Photoshop的路径和你想的不一样,自然找不到文件。

具体修复方案

1. 修正路径的三种方法

你只需要把路径改成以下三种格式之一就行:

  • 原始字符串:在路径前加r,告诉Python不要解析反斜杠(最推荐,写法简洁)
  • 正斜杠替代:把所有\换成/(Photoshop完全支持正斜杠路径)
  • 双反斜杠转义:用\\代替单个\,手动转义每个反斜杠

修改后的Open方法调用示例(选一种就好):

# 方式1:原始字符串
psApp.Open(r"D:\Coding\Python Scripts\Dr Nikhil Prescription App\Prescription Generator\Presc_Template.psd")

# 方式2:正斜杠
psApp.Open("D:/Coding/Python Scripts/Dr Nikhil Prescription App/Prescription Generator/Presc_Template.psd")

# 方式3:双反斜杠
psApp.Open("D:\\Coding\\Python Scripts\\Dr Nikhil Prescription App\\Prescription Generator\\Presc_Template.psd")

2. 加个路径验证更稳妥

为了避免后续再踩路径的坑,建议在打开文件前先检查路径是否存在,这样能快速定位问题:

import os
psd_path = r"D:\Coding\Python Scripts\Dr Nikhil Prescription App\Prescription Generator\Presc_Template.psd"

if os.path.exists(psd_path):
    psApp.Open(psd_path)
else:
    print(f"Error: 找不到文件!路径是:{psd_path}")

3. 给你后续自动化流程的小提示

针对你从CSV读数据生成图片的需求,还有几个关键点要注意:

  • 确保代码里的图层名称"Layer"和Photoshop模板里的图层名称完全一致(包括大小写,Photoshop的图层名是区分大小写的)
  • 修改完文本后,记得保存或导出成品图,比如用doc.SaveAs()保存PSD,或者用doc.Export()导出成PNG/JPG
  • 打包程序时别用硬编码的绝对路径!可以用os.path.dirname(__file__)获取程序所在目录,再拼接模板路径,这样不管程序放哪都能找到模板:
import os
# 获取当前脚本/程序所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接模板路径
psd_path = os.path.join(current_dir, "Presc_Template.psd")

完整修正后的代码示例

import win32com.client
import os

# 获取程序所在目录,避免硬编码绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
psd_path = os.path.join(current_dir, "Presc_Template.psd")

psApp = win32com.client.Dispatch("Photoshop.Application")

# 先验证路径再操作
if os.path.exists(psd_path):
    psApp.Open(psd_path)
    doc = psApp.ActiveDocument
    
    # 注意:这里的图层名称要和模板里的完全一致!
    layer_facts = doc.ArtLayers["Layer"]
    text_of_layer = layer_facts.TextItem
    text_of_layer.contents = "This is a test."
    
    # 示例:导出为PNG图片
    export_path = os.path.join(current_dir, "output_prescription.png")
    # 用Photoshop的常量指定导出格式
    doc.Export(ExportPath=export_path, ExportType=win32com.client.constants.PNG)
    
    # 可选:关闭文档,根据需求决定是否保存更改
    doc.Close(SaveChanges=True)
else:
    print(f"错误:未找到PSD模板文件,请检查路径:{psd_path}")

内容的提问来源于stack exchange,提问作者Deven Jain

火山引擎 最新活动