[GastForen Programme Print/Bildbearbeitung Adobe Illustrator Skripte mit BridgeTalk aufrufen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Skripte mit BridgeTalk aufrufen

pixxxelschubser
Beiträge gesamt: 1710

2. Feb 2014, 22:13
Beitrag # 1 von 13
Bewertung:
(6081 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich möchte das Thema, das im InDesign-Forum http://www.hilfdirselbst.ch/..._P522993.html#522993 begonnen hat, hier gern als eigenständige Diskussion fortführen.

Das Ziel ist, verschiedene Skripte aus Illustrator heraus über eine persistente Palette zu starten. Die Auswahl erfolgt über einzelne Button und die jeweiligen Skripte werden über BridgeTalk aufgerufen und zur Ausführung wieder an Illustrator „zurückgegeben“.

Hier eine kleine funktionierende Beispielpalette, die ein Skript (ohne Prüfungen) aufruft und nach Klick auf den Button ausführt:
Code
#target Illustrator 

var scriptToLoad1 = new File("D:/TestFolder/Illu_Backslash_Bug.jsx"); //replace with your script path here

var win = new Window('palette', 'Test-Palette');
var btnSelect1 = win.add('button', undefined, '2 × Test-Alert');

btnSelect1.onClick = function(){
scriptToLoad1.open("r");
var bt = new BridgeTalk;
bt.target = "illustrator";
var script1 = scriptToLoad1.read();
scriptToLoad1.close();
bt.body = script1;
bt.send();
}

win.center();
win.show();


Hier ist das kleines Beispielskript, das durch die Palette aufgerufen wird, wenn es sich im Beispielordner D:/TestFolder unter dem Namen Illu_Backslash_Bug.jsx befindet. (Name und/oder Pfad können aber auch in der obigen Palette angepasst werden.)
Code
// Illu_Backslash_Bug.jsx  

var tab = unescape ('%u0009');
var umbr = unescape ('%u000d');
alert ("Hier kommt ein \tTabulator mit Backslash und ein \rUmbruch");
alert ("Hier kommt ein "+tab+"Tabulator ohne Backslash und ein "+umbr+"Umbruch");


Soweit funktioniert alles wie gewünscht – bis auf eine Ausnahme: Sobald sich im auszuführenden Skript ein Backslash befindet, dann wird dieser von BridgeTalk geflissentlich ignoriert.

Das führt je nach Skript zu falschen Anzeigen (siehe Alert 1), über falsche ausgelesene Pfadangaben bis hin zu nicht/falsch ausgeführten Skriptfunktionen oder zum Skriptabbruch.

Das einzig wirksame Gegenmittel besteht in der Umcodierung der Backslashes (siehe Besipielskript mit den Alerts). Das ist bei größeren Skripten ein Riesenaufwand (unter anderem sind alle Umlaute für plattformübergreifende Ausgabe in Dialogfeldern und Warnmeldungen mit Unicode d.h. mit Backslash definiert).

1.) Habe ich hier BridgeTalk falsch angewendet?
2.) Oder ist es wirklich eine Art Illustrator-BridgeTalk-Bug?

3.) Wie könnte ein komplettes Umcodieren aller Skripte am Besten vermieden werden?


Vielen Dank im Voraus
X

Skripte mit BridgeTalk aufrufen

monika_g
Beiträge gesamt: 4329

2. Feb 2014, 23:23
Beitrag # 2 von 13
Beitrag ID: #523012
Bewertung:
(6055 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Für Illustrator CS5 gibt es zu diesem Zweck eine Extension, die über den Extension Manager installiert wird.
http://vectips.com/...ipt-panel-extension/


als Antwort auf: [#523010]

Skripte mit BridgeTalk aufrufen

Uwe Laubender
Beiträge gesamt: 5321

3. Feb 2014, 09:02
Beitrag # 3 von 13
Beitrag ID: #523014
Bewertung:
(6006 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von pixxxelschubser 3.) Wie könnte ein komplettes Umcodieren aller Skripte am Besten vermieden werden?


Hallo, pixxxelschubser!

Ganz einfach, indem Du den ausgelesenen String des Scriptes über einen doppelten replace() in die gewünschte Form bringst.

Etwa so:

Code
workAroundTheBug(); 

function workAroundTheBug(){

var script1 = "";
var script1AfterReplace = "";
var bt = new BridgeTalk;

scriptToLoad1.open("r");

bt.target = "illustrator";
script1 = scriptToLoad1.read();
scriptToLoad1.close();

script1AfterReplace = script1.replace(/\\t/,"\"+tab+\"").replace(/\\r/,"\"+umbr+\"");

bt.body = script1AfterReplace;
bt.send(100);

};


Hab's mit Adobe Illustrator CS5.1 getestet.
Müsste auch bei Dir funktionieren…


als Antwort auf: [#523010]

Skripte mit BridgeTalk aufrufen

Uwe Laubender
Beiträge gesamt: 5321

3. Feb 2014, 09:12
Beitrag # 4 von 13
Beitrag ID: #523017
Bewertung:
(6004 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das war jetzt natürlich nur die halbe Miete, denn:

Code
var tab = unescape ('%u0009');   
var umbr = unescape ('%u000d');


befinden sich ja nicht in jedem beliebigen Script, das Du einliest.

Aber diese beiden Variablen kannst Du ja VOR dem Aufruf der Funktion definieren.

Code
var tab = unescape ('%u0009');   
var umbr = unescape ('%u000d');

workAroundTheBug();



als Antwort auf: [#523014]

Skripte mit BridgeTalk aufrufen

Uwe Laubender
Beiträge gesamt: 5321

3. Feb 2014, 09:25
Beitrag # 5 von 13
Beitrag ID: #523018
Bewertung:
(6001 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zusammengefasst also folgendes Script:

Code
#target Illustrator 

main();

function main(){

var pathOfCurrentScript = File(File($.fileName)).path;
var nameOfScriptToGet = "Illu_Backslash_Bug.jsx";

//If the script "nameOfScriptToGet" is in the same folder with the current script:

var scriptToLoad1 = File(pathOfCurrentScript+"/"+nameOfScriptToGet);

//If NOT, you will be alerted:
if(!scriptToLoad1.exists){
alert("File "+nameOfScriptToGet+" does not exist.");
return;
};

//FIX PART 1 for the bridgetalk bug:
//Two variables
var tab = unescape ('%u0009'); // \t
var umbr = unescape ('%u000d'); // \r


workAroundTheBug();

//**************************************************************************************

function workAroundTheBug(){

var script1 = "";
var script1AfterReplace = "";
var bt = new BridgeTalk;

scriptToLoad1.open("r");

bt.target = "illustrator";
script1 = scriptToLoad1.read();
scriptToLoad1.close();

//FIX PART 2 for the bridgetalk bug:
//Replace every \t and every \r in the string read out from the jsx-script:

script1AfterReplace = script1.replace(/\\t/,"\"+tab+\"").replace(/\\r/,"\"+umbr+\"");

bt.body = script1AfterReplace;
bt.send(100);

};

};



als Antwort auf: [#523017]

Skripte mit BridgeTalk aufrufen

WernerPerplies
Beiträge gesamt: 2772

3. Feb 2014, 09:54
Beitrag # 6 von 13
Beitrag ID: #523022
Bewertung:
(5991 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen pixxxelschubser,

Das von Dir beschriebene Problem ist kein Illustratorproblem.

Ich habe den gleichen Effekt, wenn ich über die Bridge von InDesign aus ein InDesign-Skript ausführen lasse.

Das Escapen mit Backslashes funktioniert offensichtlich nicht so, wie erwartet.


als Antwort auf: [#523010]

Skripte mit BridgeTalk aufrufen

Uwe Laubender
Beiträge gesamt: 5321

3. Feb 2014, 10:27
Beitrag # 7 von 13
Beitrag ID: #523024
Bewertung:
(5964 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!

Danke für den Test. DEN wollte ich dann auch noch mit InDesign machen… ;-)

Also: wir könnten einen ganz neuen Thread aufmachen*, der das Scripten mit bridgeTalk beinhaltet, die kleinen Fallen, die sich auftun und ein paar Workarounds posten (so möglich).

*Fragt sich nur in welchem Forum.
Ein ausgesprochenes "ExtendScript"-Forum gibt's ja hier nicht.
Nicht einmal ein dezidiertes Illustrator-Scripting-Forum.


als Antwort auf: [#523022]

Skripte mit BridgeTalk aufrufen

WernerPerplies
Beiträge gesamt: 2772

3. Feb 2014, 10:47
Beitrag # 8 von 13
Beitrag ID: #523025
Bewertung:
(5955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Uwe,

Also, für mich ist das ein Bug.

Zitat Also: wir könnten einen ganz neuen Thread aufmachen*, der das Scripten mit bridgeTalk beinhaltet, die kleinen Fallen, die sich auftun und ein paar Workarounds posten (so möglich).

*Fragt sich nur in welchem Forum.
Ein ausgesprochenes "ExtendScript"-Forum gibt's ja hier nicht.

Kein Problem, ich lade Dich gerne zu mir ein und kann auch in wenigen Minuten ein extra Forum einrichten.
;-)

Ach ja, falls es interessiert, eines meiner vielen Testbeispiele, in dem ich allerdings eine permanente JavaScript-Engine benutze und das BridgeTalk-Objekt nur einmal je InDesign-Session einrichte.
Code
#target indesign  
#targetengine "InDesignBridgeMachine";
if ( gO == null)
{
var gO = {};
initializeBridgeObject();
}
else
{
executeBridgeObject();
}


/*void*/function executeBridgeObject()
{
gO.bt.send(100);
}
/*void*/function initializeBridgeObject()
{
try
{
var indesign;
gO.bt = null;
indesign = BridgeTalk.getSpecifier("indesign");
if (indesign==null)
{
// prepare for a new try
gO = null;
return;
}
gO.bt = new BridgeTalk();
if (gO.bt==null)
throw new Error("Can't construct BridgeTalk-Object");
gO.bt.target = indesign;
gO.bt.onResult = function(/*string*/fromBridge)
{
// var c = alert(fromBridge);
}
gO.bt.onError = function(/*BridgeTalk*/bt)
{
try
{
throw new Error(bt.body);
}
catch (error)
{
alert(error.message);
}
}
gO.bt.body = getScript() ;
executeBridgeObject();
}
catch (error)
{ alert("Can't initialize Bridge\n"+error.message);}
return;
}
function getScript()
{
var file; var source;
file = new File("C:/Users/Werner Perplies/Documents/!!!!!!Testordner/testScript.jsx");
file.open("r");
source = file.read();
file.close();
return source;
}


testScript.jsx:
Code
alert("HalliHallo from \tBridge"); 



als Antwort auf: [#523024]

Skripte mit BridgeTalk aufrufen

Uwe Laubender
Beiträge gesamt: 5321

3. Feb 2014, 10:50
Beitrag # 9 von 13
Beitrag ID: #523026
Bewertung:
(5949 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Pixxxelschubser!

Mir ist noch ein kleiner Fehler unterlaufen. Hatte den Parameter g für meine Ersetzenaktion mit replace() nicht gesetzt. So wird bisher nur das ERSTE Vorkommnis von \t oder \r ersetzt.

Hier die verbesserte Variante. Wobei der Sonderfall \n nicht unterschlagen werden darf. Ich ersetzte das auch mit einem unescapten \r. Fragt sich nur, ob das eine gute Idee ist…

Code
    //FIX PART 2 for the bridgetalk bug: 
//Replace every \t and every \r in the string read out from the jsx-script:

//Special case \n will be replaced with an unsecaped \r
//Would that be a good idea?

script1AfterReplace = script1.replace(/\\t/g,"\"+tab+\"").replace(/\\r/g,"\"+umbr+\"").replace(/\\n/g,"\"+umbr+\"");



als Antwort auf: [#523010]

Skripte mit BridgeTalk aufrufen

WernerPerplies
Beiträge gesamt: 2772

3. Feb 2014, 12:38
Beitrag # 10 von 13
Beitrag ID: #523042
Bewertung:
(5897 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Zitat //Special case \n will be replaced with an unsecaped \r
//Would that be a good idea?

Das dürfte vom Zusammenhang abhängen:
Innerhalb von InDesign-Texten haben die beiden Zeichen ja auf jeden Fall eine unterschiedliche Bedeutung, während die Bedeutung für reine Textdateien in der Regel vom Betriebssystem abhängt.
Bei Meldungstexten in Fenstern wird normalerweise "\n" verwendet.

Ich normiere in der Regel nur externe Texte und Meldungstexte, und zwar so:
\r\n -> \n
\r ->\n, so dass zum Schluss nur \n übrig bleibt.


als Antwort auf: [#523026]

Skripte mit BridgeTalk aufrufen

pixxxelschubser
Beiträge gesamt: 1710

3. Feb 2014, 18:32
Beitrag # 11 von 13
Beitrag ID: #523072
Bewertung:
(5865 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Monika, hallo Uwe und hallo Werner,

Wow, da hat sich ja im Verlauf des Tages so einiges getan. Mit so vielen gezielten Antworten hätte ich wirklich nicht gerechnet.
Smile

Ich werde mich durch eure Antworten durcharbeiten und danach Rückmeldungen geben. Vorerst einmal herzlichen Dank für das zahlreiche Feedback.

@Monika,
ScriptBay ist bekannt und wurde auch angetestet – jedoch hat unser Admin auf hauseigene und versionsichere Skripte bestanden. Das und der damals noch aktuelle Mac-OS-Bug im Extension Manager CS5, sowie die (von der Firmenleitung vorgeschriebene) Einschränkung auf die notwendige (Auswahl produktionssicherer und auf allen Rechnern lauffähiger) Skripte waren ausschlaggebend, ScriptBay nicht auf den Firmen-Rechnern zu verwenden.

Also bis später


als Antwort auf: [#523042]

Skripte mit BridgeTalk aufrufen

pixxxelschubser
Beiträge gesamt: 1710

4. Feb 2014, 23:35
Beitrag # 12 von 13
Beitrag ID: #523110
Bewertung:
(5726 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ihr beiden,
die ganze Testerei ist doch relativ zeitraubend. Deshalb werde ich nur Schritt für Schritt antworten können.

Antwort auf [ WernerPerplies ] Ach ja,

vielleicht eine etwas naive Frage:

Wo liegt der Vorteil eines Zugriffes über die Bridge gegenüber dem Zugriff über einen FileOpen-Dialog? …


Zuerst war ich versucht zu sagen: Wie soll Illustrator eine jsx-Datei öffnen? Das funktioniert ja nicht. Doch dann war der nächste logische Schritt, einen adäquaten Befehl zu finden. Und das ist File.execute()

Das damit aufgerufene Skript läuft ordnungsgemäß durch. Leider ergibt sich aber das Problem, dass jedes aufgerufene Skript vor dem Starten die „Öffnungswarnung“
„Sie sind dabei, ein Skript in Adobe Illustrator auszuführen. Sie sollten nur Skripte von vertrauenswürdigen Quellen ausführen.
Soll das Skript ausgeführt werden?“
auswirft. Und dieses Dialogfeld kann mit den mir bekannten Mitteln nicht unterdrückt werden.

Also weiter. Zur Zeit teste ich den einfachen Aufruf mit der #include-Variante.

Scheint im Moment auch ein vielversprechender Kandidat zu sein.

Ich werde mich wieder melden, das kann aber auch etwas dauern. Also bis dann


als Antwort auf: [#523072]

Skripte mit BridgeTalk aufrufen

monika_g
Beiträge gesamt: 4329

5. Feb 2014, 11:44
Beitrag # 13 von 13
Beitrag ID: #523128
Bewertung:
(5682 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Liegen die Skripte im sicheren Folder?


als Antwort auf: [#523110]
X

Aktuell

PDF / Print
IWS-Logo_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
20.06.2024

Online
Donnerstag, 20. Juni 2024, 15.00 - 15.45 Uhr

Webinar

Etiketten-Workflows gehören zu den anspruchsvollsten in der grafischen Industrie. Ihre PDF-Dateien sind oft sehr komplex und erfordern eine spezielle Vorbereitung. pdfToolbox bietet viele Möglichkeiten, um diese Arbeit zu automatisieren. Nehmen Sie an unserem Webinar "pdfToolbox für den Etikettendruck" teil und lernen Sie einige der Funktionen kennen, die Ihren Etiketten-Workflow effizienter gestalten. Einige der Bereiche, die Sie kennenlernen werden, sind: Beschnitt erzeugen Beim Etikettendruck ist das Druckmotiv oft nicht rechteckig. Lernen Sie, wie Sie einen passenden Beschnitt für alle Arten von Formen hinzufügen können. Produktionsreife Dateien erstellen nutzen Sie bereits vorliegende Inhalte oder Seiteninformationen, um eine Weißform hinter dem Seiteninhalt hinzuzufügen, eine passgenaue Lackform für bestimmte Objekte zu erzeugen oder eine Stanzlinie mit korrektem Sonderfarbnamen zu erstellen. Ausschießen, Step & Repeat, N-Up Mit der Ausschieß-Engine von pdfToolbox lassen sich Seiten zu größeren Druckbögen zusammenfassen, wobei verschiedene Layouts und Komplexitäten unterstützt werden. Hochwertige Freigabe-Bögen Erstellen Sie automatisch Freigabe-Bögen mit Vorschaubildern Ihrer Produktionsdatei und Auftragsdaten aus dem MIS. Qualitätskontrolle pdfToolbox enthält Standard-Preflight-Profile, die die grundlegenden Anforderungen an PDF-Dateien in Etiketten-Workflows abdecken. Prüfen Sie ob Ihre Dokumente internationalen Standards wie ISO PDF/X oder GWG (Ghent Workgroup) Spezifikationen entspricht. Verpackungs- und etikettenspezifische Vorgaben, wie der ISO-Standard „Processing Steps“, werden ebenfalls unterstützt.

kostenlos

Ja

Organisator: callassoftware

https://www.impressed.de/schulung.php?c=sDetail&sid=322

pdfToolbox für den Ettikettendruck
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow