Как запустить ExtendScript JSX-скрипт из Powershell - PullRequest
0 голосов
/ 25 октября 2018

Я хочу иметь возможность запускать Adobe Illustrator ExtendScript через Windows Powershell.Я считаю, что это должно быть возможно из-за этого ответа , который описывает использование VB через COM.

Это мой сценарий 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))

Я использую Adobe Illustrator 2019 CC (64-битная версия) и Powershell5.1.16299.666

1 Ответ

0 голосов
/ 03 ноября 2018

Я достиг своей цели, но не смог сделать это на 100% с помощью Powershell.

Руководство по созданию сценариев Adobe Illustrator 2017 содержит это утверждение на странице 22:

В VBScript есть несколько способов создать экземпляр Illustrator.

Однако, ссылаясь на JavaScript, он говорит:

Информация о запуске Illustratorот JavaScript выходит за рамки этого руководства.

Я не смог найти никакой официальной документации о том, как программно запускать Illustrator в Windows, используя другие языки, кроме VB, поэтому я в итоге позволил своему скрипту 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.

...