pythonとwin32comを使用してAdobeのソフトウェアフォームを自動化すると、2D座標の配列を渡す際に問題が発生します。AdobeがVisualBasic(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の配列のみがサポートされています」というエラーを発行します。これで、配列の配列と2次元配列の間に違いがあることがわかりました。だから問題は、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
しかし、これが実際には機能しない同様のケースがあります。とにかく重要なのは、学生への移植に関するガイドラインを書くことです。そうすれば、元の意図にできるだけ近い方がよいでしょう。