我如何获得 Python 在 Adobe Illustrator 中绘制简单线条的脚本和 Visual Studio 代码
How do I get Python Script to draw a simple line in Adobe Illustrator and Visual Studio Code
正如标题所说,我无法获得 Python 脚本来在 Adobe Illustrator 中的两点之间画一条线。以下代码不断产生错误:
from os import linesep
import win32com.client as win32com
app = win32com.GetActiveObject("Illustrator.Application")
docRef = app.Documents.Add()
app.Documents.Add()
myLine = docRef.PathItems.Add()
myLine.Stroked = True
myLine.StrokeWidth =5
myLine.SetEntirePath([[10.,20.], [30, 70]]) #fails here
由于想在这个过程中学习Python,所以我不想使用其他选项。
VBScript、JavaScript 和 AppleScript 有文档,但 Python 速度快,推荐使用,因为它可以处理在我的计算机上打开和关闭文件。
我已经尝试了以下行中数组的几乎所有排列:
myLine.SetEntirePath([[10.,20.], [30, 70]]) #fails here
但没有任何效果。通常我得到错误,
Traceback (most recent call last):
File "c:\Users\User\Documents\code\python_illustrator_api\test_com_interface.py", line 41, in <module>
myLine.SetEntirePath([[10.,20.], [30, 70]])
File "<COMObject Add>", line 2, in SetEntirePath
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Adobe Illustrator', 'Illegal argument - argument 1\n- Only arrays with dimension 1 are supported', None, 0, -2147220262), None)
PS C:\Users\User\Documents\code\python_illustrator_api>
这表明数组格式不正确,但我觉得还不错。我已经尝试了几乎所有的可能性:没有方括号,没有外括号。据我所知 Python,这是具有两个 X,Y 对的数组从两个点绘制一条简单直线的正确格式。
当我尝试时
myLine.SetEntirePath([10.,20.], [50., 100.], [100, 30])
我得到一个不同的错误:
TypeError: SetEntirePath() takes from 1 to 2 positional arguments but 4 were given
那是更有希望的一点,因为它似乎是一个更具描述性的错误。另外,如果我错了,请纠正我,但基本上,VSCode 在使用 Win32com 时没有有用的提示,因为它与 API 对话,对吗?基本上,错误可能来自 Adobe Illustrator,但没有像其他版本的 Visual Studio.
那样有帮助的建议
我也尝试过使用 numpy 使用数组,但这也不起作用。
import numpy as np
array1 = np.array([[20, 50], [30, 70]])
myLine.SetEntirePath(array1)
有什么问题吗? win32com 和 Illustrator 之间是否存在某种误解?
这是一件非常基本的事情,获取一个脚本在 Illustrator 上的两点之间画一条线。
我也许可以在打开的 Adobe Illustrator 实例上画一条线,使用 Python 脚本抓取 line-segment,然后 reverse-engineer [=52] 的格式=] 喜欢将它的数组发送给它,但这可能有它自己的问题。
不应该做点什么吗?毕竟不是所有这些不同的语言最终都通过通用中间语言进行处理,然后发送到 API?
有人可以对此提出一些解决方案吗?
提前谢谢你
有意思。可能是 SetEntirePath()
方法坏了或者什么的,确实如此。我也没有设法让它与 Python 一起工作。
但有一个解决方法。 pathItems.pathPoints
集合有方法 Add()
,因此您可以使用循环将具有给定坐标的任何点添加到路径中,方法如下:
import win32com.client as win32com
app = win32com.GetActiveObject("Illustrator.Application")
doc = app.Documents.Add()
myLine = doc.pathItems.Add()
myLine.stroked = True
myLine.strokeWidth = 5
points = [[10, 20], [50, 100], [100, 30]]
for xy in points:
point = myLine.pathPoints.Add()
point.anchor = xy
point.leftDirection = xy
point.rightDirection = xy
输出:
正如标题所说,我无法获得 Python 脚本来在 Adobe Illustrator 中的两点之间画一条线。以下代码不断产生错误:
from os import linesep
import win32com.client as win32com
app = win32com.GetActiveObject("Illustrator.Application")
docRef = app.Documents.Add()
app.Documents.Add()
myLine = docRef.PathItems.Add()
myLine.Stroked = True
myLine.StrokeWidth =5
myLine.SetEntirePath([[10.,20.], [30, 70]]) #fails here
由于想在这个过程中学习Python,所以我不想使用其他选项。 VBScript、JavaScript 和 AppleScript 有文档,但 Python 速度快,推荐使用,因为它可以处理在我的计算机上打开和关闭文件。
我已经尝试了以下行中数组的几乎所有排列:
myLine.SetEntirePath([[10.,20.], [30, 70]]) #fails here
但没有任何效果。通常我得到错误,
Traceback (most recent call last):
File "c:\Users\User\Documents\code\python_illustrator_api\test_com_interface.py", line 41, in <module>
myLine.SetEntirePath([[10.,20.], [30, 70]])
File "<COMObject Add>", line 2, in SetEntirePath
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Adobe Illustrator', 'Illegal argument - argument 1\n- Only arrays with dimension 1 are supported', None, 0, -2147220262), None)
PS C:\Users\User\Documents\code\python_illustrator_api>
这表明数组格式不正确,但我觉得还不错。我已经尝试了几乎所有的可能性:没有方括号,没有外括号。据我所知 Python,这是具有两个 X,Y 对的数组从两个点绘制一条简单直线的正确格式。
当我尝试时
myLine.SetEntirePath([10.,20.], [50., 100.], [100, 30])
我得到一个不同的错误:
TypeError: SetEntirePath() takes from 1 to 2 positional arguments but 4 were given
那是更有希望的一点,因为它似乎是一个更具描述性的错误。另外,如果我错了,请纠正我,但基本上,VSCode 在使用 Win32com 时没有有用的提示,因为它与 API 对话,对吗?基本上,错误可能来自 Adobe Illustrator,但没有像其他版本的 Visual Studio.
那样有帮助的建议我也尝试过使用 numpy 使用数组,但这也不起作用。
import numpy as np
array1 = np.array([[20, 50], [30, 70]])
myLine.SetEntirePath(array1)
有什么问题吗? win32com 和 Illustrator 之间是否存在某种误解? 这是一件非常基本的事情,获取一个脚本在 Illustrator 上的两点之间画一条线。
我也许可以在打开的 Adobe Illustrator 实例上画一条线,使用 Python 脚本抓取 line-segment,然后 reverse-engineer [=52] 的格式=] 喜欢将它的数组发送给它,但这可能有它自己的问题。
不应该做点什么吗?毕竟不是所有这些不同的语言最终都通过通用中间语言进行处理,然后发送到 API?
有人可以对此提出一些解决方案吗? 提前谢谢你
有意思。可能是 SetEntirePath()
方法坏了或者什么的,确实如此。我也没有设法让它与 Python 一起工作。
但有一个解决方法。 pathItems.pathPoints
集合有方法 Add()
,因此您可以使用循环将具有给定坐标的任何点添加到路径中,方法如下:
import win32com.client as win32com
app = win32com.GetActiveObject("Illustrator.Application")
doc = app.Documents.Add()
myLine = doc.pathItems.Add()
myLine.stroked = True
myLine.strokeWidth = 5
points = [[10, 20], [50, 100], [100, 30]]
for xy in points:
point = myLine.pathPoints.Add()
point.anchor = xy
point.leftDirection = xy
point.rightDirection = xy
输出: