Ausführen eines UXP-Skriptes für InDesign®.
Ausführen eines UXP-Skriptes für InDesign®. Dem Aufruf kann der komplette Skripttext oder der Pfad auf eine idjs-Skriptdatei übergeben werden.
Die Angabe vordefinierter Objekte ist identisch mit den vordefinerten Objekten von run_javascript.
In ExtentScript-Javascripten (jsx) können die aus den vordefininierten Objekten erzeugten Variablen einfach am Skriptanfang eingefügt werden. Das geht in UXP-Skripten (idjs) aus zwei Gründen nicht:
Erst nach diesen Defintionen dürfen die automatisch generierten Variablen der vordefininierten Objekte folgen. Aber da Sie diese Defintionen in verschiedensten Schreibweisen machen können (außer dem Namen app!), müssen Sie uns die die Stelle in Ihrem Skript zeigen, an der wir die errechneten Variablen einfügen können.
Schreiben Sie an dieser Stelle (in genau dieser Schreibweise) folgenden Kommentar:
// priint:params
Definieren Sie die Skriptstelle im UXP-Skript, an der die automatisch berechneten Variablen der vordefininierte Objekte eingefügt werden sollen.
let myInDesign = require("indesign"); let app = myInDesign.app;
// #pragma once // priint:params
...
Mit dem Kommentar (in genau dieser Schreibweise)
// #pragma once
erreichen Sie, dass das Skript in der Palette Front Row auch dann nur einmal ausgeführt,
wenn mehrere Dokumentrahmen ausgewählt sind.
Vordefinierte Objekte können nur in Skripten verwendet werden, deren Text als String (char* oder String) definiert ist. In dateibasierten Skripten können vordefinierte Objekte nicht unterstützt werden! Skripte der Palette Front Row werden eingelesen und immer als Strings ausgeführt.
Achtung: Viele UXP-Funktionen und Abfragen werden asynchron ausgeführt:
So wird z.B. die Frage nach dem Pfad der Datei eines Dokumentes, document.fullName, asynchron beantwortet und liefert ohne weitere Angaben lediglich die Antwort [object promise]. Um den tatsächlichen Pfad zu erhalten, müssen Sie die Angabe mit await holen.
alert (doc.fullName); // shows '[object promise]' alert (await doc.fullName); // shows the path of the document'
Das ist nicht weiter schlimm. Aber leider bricht InDesign® nach einem await auch die aktuelle Undo-Sequenz ab und die Skripte sind dann nic ht mehr in eimem einzigen Schritt rückgängig zu machen sondern nur in den Einzelaktionen des Skriptes. Wenn das für Sie akzeptabel ist ...
Bitte beachten Sie: Wenn Sie run_uxpscript mit vordefinierten Objekten ausführen, wird zur Bestimmung des Zieldokumentes der Dokumentpfad benötigt, also await doc.fullName. UXP-Skripte können deshalb bei der Verwendung mit vordefinierten Objekten nur in einzelnen Schritten rückgängig gemacht werden.
Die externe Ausführung von UXP-Skripten mit sampleclient ist identisch mit der Ausführung von ExtentScript-Javascripten. Der sampleclient orientiert sich dabei selbstständig an der Endung idjs der Skripte.
Name | Typ | Default | Beschreibung | ||||||||
Return | int | 0 oder Fehlercode Der Wert ist lediglich eine Aussage darüber, ob das Skript fehlerfrei ausgeführt werden konnte oder nicht. Der Wert ist nicht der Wert eines mglw. im Skript definierten return. Den return-Wert des Skriptes können Sie mit Hilfe der Variablen returnType, returnValue, returnMaxLen abfragen. |
|||||||||
script_or_path | String oder char* | - | Skriptcode (UXP JavaScript) oder vollständiger Dateipfad einer UXP-Javascript (idjs) oder ExtentScript-Javascript (jsx) Datei.
Bitte beachten Sie, dass ExtentScript und UXP unterschiedliche Syntax haben. Eine automatische Unterscheidung beider Skripttypen ist nur bei der Angabe von Dateipfaden möglich (und wird über die Dateiendungen gemacht). Wenn Sie ein ExtentScript-Skript als String vorliegen haben, können Sie die Funktion run_javascript verwenden. |
||||||||
showErrorAlert | int | 1 | Bei Skriptfehlern eine Fehlernachricht zeigen? 0 : Nein 1 : Ja |
||||||||
flags | int | 0 | Hinweise zur Ausführung. Mehrere Angaben könnne addiert werden. Die Beschreibungen sind direkt aus dem InDesign-SDK von Adobe entnommen. 1 : Indicates whether to load script into debugger for execution 0 : Push each script request as a separate undo step 2 : Push the entire script as a single regular undo step. If an error occurs, roll back to the beginning of the script request that generated the error 4 : Similar to 2, however faster because we don't snapshot each script request. If an error occurs, we roll back to the beginning of the entire script. 6 : Push the entire script as a single auto-undoable step. |
||||||||
returnType | int | 0 | Datentyp des nachfolgenden Parameters returnValue. 0 : returnValue ignorieren kInt : returnValue ist int* kFloat : returnValue ist float* kString : returnValue ist String oder char* Achtung: Die Angabe bezieht sich auf den Datentyp von returnValue, nicht auf den Datentyp, den das return des Skriptes tatsächlich verwendet. Wenn Sie diesen Datentyp nicht kennen (oder das Skript einen anderen Datentyp als einen der drei oben definierten zurückgibt), können Sie auch kString verwenden. In diesem Fall erhalten Sie das Ergebnis immer. Sie müssen dieses Ergebnis dann aber bei Bedarf in den entsprechenden Datentypen umrechnen (val, fval, ...). |
||||||||
returnValue | int*, float*, String oder char* | 0 | Variable für den return-Wert des Scripts 0 : ignorieren |
||||||||
returnMaxLen | int | 0 | Die Angabe wird nur im Fall von returnType = kString und wenn der Datentyp ein char* ist verwendet und gibt die
maximale Länge für returnValue an (Das Byte für die abschließende 0 ziehen wir selber ab.) 0 : beliebig (Ich habe genügend Speicher allokiert!) |
||||||||
itemRefs | ItemList | - | ItemRefs, die im JavaScript als globale Variablen zur Verfügung gestellt werden, siehe Vordefinierte Objekte | ||||||||
... | int, value | -,- | [Ab v4.3 R36514, 12. April 2025] Beliebig lange (auch leere) Liste von Paaren aus Datentyp und Wert. Die Angaben werden der Reihe nach als arg1, arg2, ... an die Skriptausführung weitergegen und können im Skript etwa mit folgener Anweisung erfragt werden: app.scriptArgs.get("arg1"); Zusätzlich wird in arg0 der aktuelle Skripfad übergeben. Ist das Skript als String definiert, enthält arg0 den Wert "String" Erlaubt sind folgende Typ/Wert-Paare:
|
Hier ist ein sehr einfaches UXP-Skript, das die Verwendung von UXP Script-Results zeigt.
let myInDesign = require("indesign"); const script = require("uxp").script; let app = myInDesign.app;
try { alert("aaa"); } catch (error) { alert(error); }
//script.setResult(1410); // integer (kInt) result //script.setResult(3.1415926); // float (kFloat) result script.setResult("Hallo Paula"); // String (kString) result
function alert(msg) { theDialog = app.dialogs.add(); col = theDialog.dialogColumns.add(); colText = col.staticTexts.add(); colText.staticLabel = "" + msg; theDialog.canCancel = false; theDialog.show(); theDialog.destroy(); }
So können Sie den Script-Result eines UXP-Skriptes mit Hilfe von run_uxpsctript ermitteln. Das UXP-Skript heißt a1.idjs und muß auf ihrem Schreibtisch liegen.
#include "internal/types.h"
int main() { int intRet = 12; float floatRet = 12.3; String strRet = string::alloc ();
run_uxpscript ( "$DESKTOP/a1.idjs", 1, // is path 1, 3, // show error alert, undo entire script //kInt, &intRet); //kFloat, &floatRet); kString, strRet);
showmessage ("I : %d\nF : %.8f\nS : '%s'", intRet, floatRet, strRet); return 0; }
Das cScript führt das UXP-Skript a1.idjs Ihres Desktops mit zusätzlichen Argumenten aus. Die UXP-Argument werden von cScipt direkt übergeben.
#include "internal/types.h"
int main() { run_uxpscript ( "$DESKTOP/a1.idjs", 1, // is path 1, 3, // show error alert, undo entire script 0, 0, 0, 0, // no addtional items kString, "XXXX", kInt, 123, kFloat, 3.1415926, kString, 0); // defines the value "NULL" in the Javascript
return 0; }
The UXP scriprt demonstrates how arguments from calls to run_javascript can be used in UXP.
let myInDesign = require("indesign"); const script = require("uxp").script; let app = myInDesign.app;
try { alert (script.args[0].split ('=')[1]); alert (script.args[1].split ('=')[1]); alert (script.args[2].split ('=')[1]); alert (script.args[3].split ('=')[1]); alert (script.args[4].split ('=')[1]); } catch (error) { alert(error); }
function alert(msg) { theDialog = app.dialogs.add(); col = theDialog.dialogColumns.add(); colText = col.staticTexts.add(); colText.staticLabel = "" + msg; theDialog.canCancel = false; theDialog.show(); theDialog.destroy(); }
Alphabetic index HTML hierarchy of classes or Java