【问题标题】:How to kick off ExtendScript JSX script from Powershell如何从 Powershell 启动 ExtendScript JSX 脚本
【发布时间】:2019-03-30 13:33:46
【问题描述】:

我希望能够通过 Windows Powershell 执行 Adob​​e Illustrator ExtendScript。我相信这应该是可能的,因为this answer 描述了通过 COM 使用 VB。

这是我的 Powershell 脚本:

$illustratorRef = New-Object -ComObject Illustrator.Application
$conversionScript = New-Object -ComObject Scripting.FileSystemObject
$scriptFile = $conversionScript.OpenTextFile("C:\ws\ArtConversion\alert-test.jsx")
$fileContents = $scriptFile.ReadAll()
$scriptFile.Close()

$fileToRun = $fileContents + "main(arguments)"

$args = "line1", "line2"

$illustratorRef.DoJavaScript($fileToRun, $args, 1)

这是alert-test.jsx 脚本:

function main(argv) {
    alert('message: ' + argv[0]);
    return argv[0];
}

运行 Powershell 脚本会打开 Illustrator,但遇到 $illustratorRef.DoJavaScript 时会引发以下错误:

Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

我正在使用 Adob​​e Illustrator 2019 CC(64 位)和 Powershell 5.1.16299.666

【问题讨论】:

    标签: powershell com adobe-illustrator extendscript


    【解决方案1】:

    我实现了我的目标,但无法使用 Powershell 100% 实现。

    2017 Adobe Illustrator Scripting Guide 在第 22 页包含此声明:

    在 VBScript 中,有几种方法可以创建 Illustrator 实例。

    然而,当提到 JavaScript 时,它会说:

    有关从 JavaScript 启动 Illustrator 的信息超出了本指南的范围。

    我找不到任何关于如何在 Windows 上使用除 VB 之外的其他语言以编程方式启动 Illustrator 的任何官方文档,因此我最终让我的 Powershell 脚本处理目录遍历和日志记录的繁重工作,同时让它通过某种方式打开 Illustrator Visual Basic 脚本。

    从 Powershell 到 VB 的调用如下所示:

    $convertFile = "cmd /C cscript .\run-illustrator-conversion.vbs $arg1, $arg2"
    $output = Invoke-Expression $convertFile
    

    VB 脚本最终看起来像这样:

    Dim appRef
    Dim javaScriptFile
    Dim argsArr()
    
    Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject")
    Dim jsxFile : Set jsxFile = fsObj.OpenTextFile(".\script-to-run.jsx", 1, False)
    Dim fileContents : fileContents = jsxFile.ReadAll
    jsxFile.Close
    Set jsxFile = Nothing
    Set fsObj = Nothing
    
    javascriptFile = fileContents & "main(arguments);"
    
    Set appRef = CreateObject("Illustrator.Application.CS5")
    ReDim argsArr(Wscript.Arguments.length - 1)
    
    For i = 0 To Wscript.Arguments.length - 1
        argsArr(i) = Wscript.Arguments(i)
    Next
    
    Wscript.Echo appRef.DoJavaScript(javascriptFile, argsArr, 1)
    

    注意:查看脚本指南以获得适合您的 Illustrator 版本的正确字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多