当使用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
但是有类似的情况,实际上这并不起作用。无论如何,重点是向学生撰写移植指南,因此尽可能接近原始意图会更好。