33

通常、Adobe製品(InDesign、Illustrator、Photoshopなど)を自動化するために.jsxスクリプトを作成する場合は、ExtendScript IDEからスクリプトを作成、デバッグ、および実行します。ExtendScriptをバイパスして、3番目のプログラムからスクリプトを実行することは可能ですか?

アドビ製品には、ExtendScriptが接続してアドビオブジェクトモデルにアクセスし、ソフトウェアを自動化できるJavaScriptインタープリターが組み込まれていると思います。ExtendScriptの場合と同じように、そのインタープリターに直接接続してjsxファイルを実行できるようにしたいと思います。

4

7 に答える 7

37

Macを使用していますか?その場合は、osascriptツールでAppleScriptを使用してJavaScriptを実行できます。ここではいくつかの例を示します。

JSXを実行して値を返す

これを〜/ temp/foo.scptとして保存します。

tell application "Adobe Illustrator"
     -- 'do javascript' runs any arbitrary JS.
     -- We're using the #include feature to run another
     -- file. (That's an Adobe extension to JS.)
     --
     -- You have to pass a full, absolute path to #include.
     --
     -- The documentation alleges that 'do javascript'
     -- can be passed an AppleScript file object, but
     -- I wasn't able to get that to work.
     do javascript "#include ~/temp/foo.jsx"
end tell

そしてこれを〜/ temp/foo.jsxとして保存します。

var doc = app.activeDocument;
var numLayers = doc.layers.length;

// The last value in the JSX file will be printed out by
// osascript. 
numLayers;

これで、コマンドラインから実行するosascript ~/temp/foo.scptと、アクティブなIllustratorドキュメントのレイヤー数が出力されます。

JavaScriptからデータを取得することには限界があります。JavaScript内からstdoutに印刷することはできません。代わりに、返す値をJSXファイルの最後のステートメントとして配置します。によって印刷されosascriptます。(理由は次のとおりです。JSXファイルの最後の値はdo javascriptAppleScriptステートメントの戻り値です。これはAppleScriptファイルの最後の値でもあり、最終値をosascript出力します。)

JavaScriptから返す値は、数値、文字列、配列、または文字列に変換されたときにその値を保持するその他のものにすることができます。複雑なオブジェクトを返したい場合は、JSONライブラリを#include.toJSONString()して、オブジェクトを呼び出す必要があります。

JSXへの引数の受け渡し

JSXコードに引数を渡すには、次の例に従います。

ファイル〜/ temp / args.scpt:

on run argv
    tell application "Adobe Illustrator"
        set js to "#include '~/temp/args.jsx';" & return
        set js to js & "main(arguments);" & return
        do javascript js with arguments argv
    end tell
end run

ファイル〜/ temp / args.jsx

function main(argv) {
    var layer = app.activeDocument.activeLayer;
    app.defaultStroked = true; 
    app.defaultFilled = true;

    // Top, left, width, height (in points).
    // Note that parameters start at argv[0].
    layer.pathItems.rectangle(argv[0], argv[1], argv[2], argv[3]);
}

そして、実行しますosascript args.scpt 50 30 10 80

デバッグ

このdo javascriptコマンドには、ExtendScriptデバッガーを起動するためのオプションもあります。詳細については、AppleScriptEditorでIllustrator辞書を開いてください。

于 2012-01-27T05:37:43.517 に答える
15

Windowsユーザーの場合、vbsスクリプトを使用できます。cscript次のようにコマンドに引数を指定して、.jsxスクリプトに引数を渡しますcscript test.vbs "hello"。test.vbsは次のようになります。

Dim appRef
Dim javaScriptFile
Dim argsArr()

Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject")
Dim jsxFile : Set jsxFile = fsObj.OpenTextFile("C:\Users\path\test.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")

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)

Wscript.Echo、.jsxファイルによって返された最後の行を返します。.jsxファイルの例は次のとおりです。

function main(argv) {
    alert(argv[0]);
    return "test";
}

実行すると、Illustrator(または任意のadobeプログラム)アラート「hello」が表示され、「test」がstdoutに返されます(コマンドプロンプトウィンドウに表示されます)。

于 2014-09-04T03:02:01.250 に答える
6

これはWindowsで機能します:

"C:\ Program Files(x86)\ Adob​​e \ Adob​​e Photoshop CS5 \ Photoshop.exe" C:\ completepathto \ my.jsx

Photoshopへのパスに注意してください。スペースが含まれているため、引用符で囲む必要があります。

Photoshopがロードされている場所を把握するためのトリックはたくさんあります。これは、Photoshopがロードされているすべての場所を検索し、それらをx.lstに配置するものです。

@REM  The Presets\Scripts doesn't really restrict where the loop is looking, 
@REM  thus the "IF EXIST" is needed.  The FIND makes sure that the 
@for /R "%ProgramFiles(x86)%\Adobe" %%f in (Presets\Scripts) 
  DO @IF EXIST %%f 
     (echo %%f | FIND /I "Adobe Photoshop C" >> x.lst )

その後、x.lstの各行を処理できます。注:「@ for」全体を1行にする必要があります。読みやすくするために、複数行に分割しています。

Photoshopが1つだけ(Elementsではない)になると思われる場合は、 「echo%%f」 を次のように変更できます。

"%%f\..\..\Photoshop.exe" C:\completepathto\my.jsx 
于 2014-03-26T01:54:55.817 に答える
4

正解はYESです。Illustrator、InDesign、PhotoshopはすべてCOMを介してスクリプト化できます。COMにアクセスできるように作成したプログラム(.net言語、C ++、BCX、Autohotkey、Powerproなど)は、Illustrator、InDesign、またはPhotoshopに処理を指示できます。

これはPowerproの例です( powerproのcomプラグインが必要です)。これはCS4とCS5で機能します。

Function ComLoad() ;;MAKE SURE TO CALL .@ComUnload WHEN EXITING FUNCTION CALLS!
      static objname="Illustrator.Application"
      static com_status, com_type
      static appRef=com.create_object(objname)
      endfunction

Function ComUnload();;this is end the com calls and unload com
    com.unload
    endfunction

ComLoad()関数を使用した後、COMライブラリが提供するあらゆる種類のメソッドまたは関数を実行します。Powerproを使用してIllustratorにjsxまたはjsファイルを実行するように指示する方法は次のとおりです。

;Run a script from anywhere
Function RunOtherScript(whatscript)
    If (file.Validpath(whatscript) == 0)do
        messagebox("ok","Whoops! That script doesn't exist!","ILL Runscript")
        quit
    endif
    .@ComLoad()
    appRef.DoJavaScriptFile(whatscript)
    .@ComUnload()
    quit

これは、Powerproを使用して作成したフローティングツールバーの画像です。ボタンはすべてcom関数に接続されています。ほとんどの場合、com関数を使用して外部jsxスクリプトを実行します。

ここに画像の説明を入力してください

[編集]

別の方法があります!Adobe Configuratorを使用して、スクリプトを起動できる新しいパネルを作成できます。パネルは好きなようにデザインでき、結果は上で説明したpowerproツールバーと実質的に非常に似ています。実際、私はpowerproツールバーからAdobeConfiguratorPanelに移動しました。

于 2012-05-12T21:39:41.853 に答える
3

.jsxファイルを正しい場所に配置した場合

Photoshop
folder location:
/Applications/Adobe\ Photoshop\ CS5/Presets/Scripts
menu location:
File > Scripts

Illustrator
folder location:
/Applications/Adobe\ Illustrator\ CS5/Presets.localized/en_GB/Scripts
menu location:
File > Scripts

InDesign
folder location:
/Users/{user}/Library/Preferences/Adobe\ InDesign/Version\ 7.0/en_GB/Scripts/Scripts\ Panel
menu location:
Window > Utilities > Scripts

これらはOSXのパスであり、Windows for PhotoshopおよびIllustratorで同等のものを見つけるのは簡単ですが、InDesignの場合は、スクリプトパネルを開き、パネルのコンテキストメニューを使用してスクリプトフォルダーを開く方が簡単な場合があります。

Flashを開き、引数として.jsflスクリプトへのパスを渡すことで、コマンドラインから.jsflスクリプトを実行できることは知っていますが、InDesignの.jsxファイルでは機能しないようです。

HTH

于 2011-01-30T01:18:56.930 に答える
0

この質問はかなり古いものです。私はこれに次のことを前提として答えます:

  1. AfterEffects用のJSXスクリプトを実行しています
  2. Windowsを使用しています。

スクリプトに引数を渡すかどうかはわかりません(この場合、私の単純なソリューションは機能しないか、厄介な回避策が必要になる可能性があります)。

幸い、AfterEffectsでこれを行う簡単な方法があります。cmdを起動して、次のコマンドを入力できます。

afterfx -r C:/Users/me/myscript.jsx

afterfxが認識されない場合は、AfterEffectsのインストールパスをシステム変数のPathに追加する必要があります。他のアドビプログラムでこの機能が利用できるかどうかはわかりません。コマンドラインからAfterEffectsスクリプトを実行する方法の詳細については、https ://helpx.adobe.com/after-effects/using/scripts.htmlを参照してください。

于 2021-07-09T20:02:28.787 に答える
-2

拡張スクリプトを使用して実行できます。クリエイティブクラウドには無料の拡張機能があり、イラストレーター、アフターエフェクト、フォトショップ、プレミアプロでスクリプトを高速に実行できます。AdobeExchange (ライブビュー)で見つけることができます。

于 2021-02-03T04:47:38.337 に答える