当使用 python 和 win32com 自动化 Adobe 软件时,会遇到传递二维坐标数组的问题。如果看一下 Adobe 为 Visual Basic (VB) 提供的代码,它很简单。在 Illustrator 中绘制线条的简化示例如下所示:
Set appObj = CreateObject("Illustrator.Application")
Set docObj = appObj.Documents.Add
Set pathItem = docObj.PathItems.Add
pathItem.SetEntirePath Array(Array(0.0, 0.0), Array(20.0, 20.0))
现在天真的假设是 VB 代码可以通过将其转换为 python 如下:
from win32com.client import Dispatch
appObj = Dispatch("Illustrator.Application")
docObj = appObj.Documents.Add()
pathItem = docObj.PathItems.Add()
pathItem.SetEntirePath( [ [0.0,0.0], [20.0,20.0] ] )
显然,这并不容易,python 发出一个错误说“仅支持维度为 1 的数组”。现在我知道数组数组和二维数组之间是有区别的。所以问题是我如何强制 python 制作一个正确类型的数组?
我尝试制作自己的 VARIANT 类型,但惨遭失败。我也为此查看了ctypes。有没有人遇到过同样的问题,可以解释一下吗?
PS:
我知道这个问题可以通过使用来规避:
pathItem = docObj.PathItems.Add()
for point in ( [0.0,0.0], [20.0,20.0] ):
pp = pathItem.PathPoints.Add()
pp.Anchor = point
但也有类似的情况,实际上这不起作用。无论如何,重点是为学生编写移植指南,以便尽可能接近初衷会更好。