Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Skripte für InDesign Server

Skripte für InDesign Server

mb_new
Beiträge gesamt: 123

9. Feb 2016, 16:20
Bewertung:

gelesen: 3194

Beitrag als Lesezeichen
Hallo Zusammne!

Ist hier jemand vertreten, der sich mit dem Skripten von InDesign Server auskennt?

Falls ja, bitte melden, ich habe für einen Profi wahrscheinlich eine Kleinigkeit zu lösen.

Danke
Martin

Skripte für InDesign Server

WernerPerplies
Beiträge gesamt: 2762

9. Feb 2016, 16:36
Bewertung:

gelesen: 3182

Beitrag als Lesezeichen
Hallo Martin,

Zitat Ist hier jemand vertreten, der sich mit dem Skripten von InDesign Server auskennt?

ein wenig! ;-)

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Skripte für InDesign Server

mb_new
Beiträge gesamt: 123

9. Feb 2016, 17:25
Bewertung:

gelesen: 3147

Beitrag als Lesezeichen
Hallo Werner,
danke für deine Antwort.

Kurz zur Erklärung: in unserem Arbeitsablauf werden die Dokumente mit K4/vjoon verwaltet.

Nun gibt es eine Funktion, die in Zusammenarbeit mit einem Seitenspiegeltool die Pagina richtig stellt.
Das tut es auch.
Einziges Problem: da Indesign Server windowsbasierend ist, weden die Pfade der Verknüpfungen verändert: es wird C:// vor den Pfad geschrieben, was dann in weiterer Folge in allen Indesign Anwendungen dazu führt, dass die Verknüpfung nicht mehr stimmt. (Auch bei der automatischne PDF Erstellung)

Nun habe ich ein Skript gebastelt, das die Verknüpfung wieder repariert:

Code
changeLinks();  

//Ändert den Pfad der Verknüpfungen
function changeLinks() {
var myDoc = app.documents.item(0);
var myImages = myDoc.allGraphics;
for (i = myImages.length-1; i >= 0 ; i--) {
var myImage = myImages[i].itemLink;
// Eingabe was ersetzt werden soll
var myNewName = myImage.filePath.replace("C/:", "");
// Änderung der Links, funktioniert nur, wenn der Pfad vorhanden ist
var myNewLink = new File (myNewName);
if (myNewLink.exists) {
myImage.relink (myNewLink);
myImage.update();
}
}
}


Das funktioniert im Indesign.

Nur ich muss das in ein Serverscript einbauen, welches so aussieht:
Code
function runScript(layoutDocument) {  
layoutDocument.k4GetServerData().k4SaveVersion();
return;
}


Irgendeine Idee wie ich das anstelle?

Mein Gedankengang war, dass am Indesignserver die Verknüpfung wieder geändert wird, danach sollte es ja sonst auch überall wieder funktionieren.

Zweite Idee war, Indesign Server die Verknüpfungen ignorieren zu lassen, doch das hab ich noch nicht weiterverfolgt.

Danke
Martin

Skripte für InDesign Server

WernerPerplies
Beiträge gesamt: 2762

9. Feb 2016, 18:39
Bewertung:

gelesen: 3113

Beitrag als Lesezeichen
Hallo Martin,

sorry, aber da muss ich passen, die eigentliche Logik steckt in dieser Methode:
Code
layoutDocument.k4GetServerData().k4SaveVersion(); 


"layoutDocument" scheint ein Object von K4 zu sein, und ohne Doku und/oder Sourcen geht da allenfalls eventuell per Debugging, aber das ist eher unwahrscheinlich..

Die Serverprogrammierung unterscheidet sich von der Desktop-Programmierung eher marginal.

Unterschiedlich sind der Aufruf der Skripte und es fehlen eine Reihe von Properties, die die Interaktion mit dem User betreffen.

Aber warum wendest Du Dich nicht an den Hersteller? - K4?

Für mich sieht das so aus, dass in dem Modul der falsche Pfadtyp verwendet wird.

Wer und wie ruft eigentlich die Funktion "runScript" auf?

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Skripte für InDesign Server

Marc Sidon
Beiträge gesamt: 262

11. Feb 2016, 11:37
Bewertung:

gelesen: 2937

Beitrag als Lesezeichen
Hallo Martin

Entweder das "layoutDocument" oder der parent von k4GetServerData() könnte bereits das Dokument sein.
Die Funktion k4SaveVersion() sollte (so wie ich das verstanden habe) nur für das letztendliche Speichern des Dokumentes zuständig sein.

Also Versuch mal:

Code
function runScript(layoutDocument) {   
changeLinks(layoutDocument);
layoutDocument.k4GetServerData().k4SaveVersion();
return;
}


oder

Code
function runScript(layoutDocument) {   
changeLinks(layoutDocument.k4GetServerData().parent);
layoutDocument.k4GetServerData().k4SaveVersion();
return;
}


wobei Du dann natürlich das Dokument als Eingangsparameter in Deiner Funktion verwenden musst:

Code
function changeLinks(document) {  
// Noch eine Prüfung, damit die Funktion nur ausgeführt wird,
// wenn der Eingangsparameter auch wirklich das Dokument ist...
if (document.constructor.name != "Document")
return;

var myDoc = document;
/* ... */
}


Meine Vermutung basiert hierauf:
http://theatlantic.github.io/...method-k4SaveVersion

Gruß,
Marc
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

(Dieser Beitrag wurde von Marc Sidon am 11. Feb 2016, 11:44 geändert)

Skripte für InDesign Server

mb_new
Beiträge gesamt: 123

16. Feb 2016, 14:48
Bewertung:

gelesen: 2763

Beitrag als Lesezeichen
Hallo Marc,

danke für deinen Input.
Ich werde das in beiden Varianten testen.

Zur Sicherheit: Du meinst komplett sieht das Skript so aus:

Code
function changeLinks(document) {   
// Noch eine Prüfung, damit die Funktion nur ausgeführt wird,
// wenn der Eingangsparameter auch wirklich das Dokument ist...
if (document.constructor.name != "Document")
return;

var myDoc = document;
var myImages = myDoc.allGraphics;
for (i = myImages.length-1; i >= 0 ; i--) {
var myImage = myImages[i].itemLink;
// Eingabe was ersetzt werden soll
var myNewName = myImage.filePath.replace("C/:", "");
// Änderung der Links, funktioniert nur, wenn der Pfad vorhanden ist
var myNewLink = new File (myNewName);
if (myNewLink.exists) {
myImage.relink (myNewLink);
myImage.update();
}
}
}

function runScript(layoutDocument) {
changeLinks(layoutDocument);
layoutDocument.k4GetServerData().k4SaveVersion();
return;
}



Danke
Martin

Skripte für InDesign Server

mb_new
Beiträge gesamt: 123

16. Feb 2016, 17:04
Bewertung:

gelesen: 2737

Beitrag als Lesezeichen
Hallo Marc,

ich habs getestet. Funktioniert leider nicht.

Das Dokument wird wie gehabt aktiviert und wieder gesichert, doch die Funktion zum Ändern des Pfades greift leider nicht.

Vielleicht siehst du ja im Skript noch Verbesserungsmöglichkeiten.

lg
Martin

Skripte für InDesign Server

NorbertK
Beiträge gesamt: 2

22. Feb 2016, 14:35
Bewertung:

gelesen: 2468

Beitrag als Lesezeichen
also ich habe keine Ahnung ob es in Verbindung mit K4 eine Besonderheit gibt, aber normalerweise musst du auf einem InDesign Server immer
myDoc = app.documents.firstItem();
verwenden.

probier es aus.
Viel Erfolg

Skripte für InDesign Server

mb_new
Beiträge gesamt: 123

23. Feb 2016, 11:20
Bewertung:

gelesen: 2366

Beitrag als Lesezeichen
Hallo Norbert,

danke für den Tipp. Werde ich versuchen.

Die Frage ist nur:

Ist der Beginn der function dann mit einer leeren Klammer?

Code
function changeLinks() {  

var myDoc = document;

.....


Schöne Grüße
Martin