[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Alle EventHandler + Problem mit "beforeopen"

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

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

24. Okt 2011, 11:28
Beitrag # 1 von 19
Bewertung:
(11107 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

1. Ich bin auf der Suche nach einer Auflistung von allen exisitierenden eventhandler´n in Indesign. Gibt es soetwas im Netz?

2. Ich habe ein Problem mit dem eventhandler "beforeopen". Mein ausgeführtes Script soll sämtliche Bilder auf Fehler überprüfen. Das Script startet allerdings direkt wenn ich auf öffnen klicke, und zu diesem Zeitpunkt hat das Dokument die Bilder noch nicht geladen. Ich bekomme dann eine Fehlermeldung, und die Überprüfung findet nicht statt.
Hat jemand eine Idee?

Vielen Dank im vorraus.

Gruß
inditac
X

Alle EventHandler + Problem mit "beforeopen"

gfellenz
Beiträge gesamt: 122

24. Okt 2011, 12:00
Beitrag # 2 von 19
Beitrag ID: #482897
Bewertung:
(11096 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo,

die EventHandler findest du im Objektmodell. Ich empfehle die Online Version von Jongware:

http://jongware.mit.edu

Unterhalb der Eigenschaften der Klasse Document http://jongware.mit.edu/...5.5/pc_Document.html stehen die Handler für das Dokument.

Ein Testskript mit allen Handlern kannst du unter http://www.indd-skript.de/...oad/EventHandler.jsx herunterladen.

Der passende EventHandler für dich ist vermutlich AFTER_OPEN. Wenn du dein Skript gepostet hättest, hätte ich es auch getestet.


als Antwort auf: [#482893]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

24. Okt 2011, 12:12
Beitrag # 3 von 19
Beitrag ID: #482900
Bewertung:
(11086 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke genau sowas habe ich gesucht :-)

ich habe es mit "afterOpen" versucht, es kommt die gleiche Fehlermeldung.

ich poste hier mal die beiden scripts:
Code
#targetengine "session" 
myScriptPath = "............\\Adobe_CS\\InDesign\\Presets_Skripte\\Skripte\\2_prüfalt.jsx";
var myFile = new File (myScriptPath);

app.addEventListener( "afterOpen", myFile);


Code
// Zeigt alle Zeichnungen an, die an fünfzehnter Stelle keinen Unterstrich enthalten. Das Script geht davon aus, dass dies dann ein älterer Stand ist. 


var myImages = app.activeDocument.allGraphics;
for (i = myImages.length-1; i >= 0 ; i--) {

var myImage = myImages[i].itemLink;

// Die ersten drei Buchstaben aus der Datei extrahieren
var extrakt = myImage.name.slice(14, 15);

if (extrakt != "_") {
alert ("Achtung prüfen: " + myImage.filePath);
}
}



als Antwort auf: [#482897]

Alle EventHandler + Problem mit "beforeopen"

gfellenz
Beiträge gesamt: 122

24. Okt 2011, 12:53
Beitrag # 4 von 19
Beitrag ID: #482903
Bewertung:
(11070 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Interessanterweise wird das Event einmal vom Document und einmal vom LayoutWindow (dem Fenster in dem sich das Dokument befindet) aufgerufen.
Solange das LayoutWindow noch nicht da ist, kannst du die Eigenschaft activeDocument nicht verwenden.

Der einfachste Eingriff in deinen Code wäre eine Abfrage, die prüft, wer das Event aufgerufen hat:

Code
#targetengine "sessionxxx"  

app.addEventListener( "afterOpen", checkImg);

function checkImg (myEvent) {
// Zeigt alle Zeichnungen an, die an fünfzehnter Stelle keinen Unterstrich enthalten. Das Script geht davon aus, dass dies dann ein älterer Stand ist.

if (myEvent.parent.constructor.name == "LayoutWindow") {
var myImages = app.activeDocument.allGraphics;
alert(myImages.length)
for (i = myImages.length-1; i >= 0 ; i--) {

var myImage = myImages[i].itemLink;

// Die ersten drei Buchstaben aus der Datei extrahieren
var extrakt = myImage.name.slice(14, 15);

if (extrakt != "_") {
alert ("Achtung prüfen: " + myImage.filePath);
}
}
}
}



als Antwort auf: [#482900]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

24. Okt 2011, 13:39
Beitrag # 5 von 19
Beitrag ID: #482906
Bewertung:
(11047 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wäre ich nicht drauf gekommen, klingt aber logisch...leider funktioniert die Abfrage nicht mehr.
Die Bildbenennungen sind so aufgebaut:
26_07_31_0040_a_Klartext.eps
oder
26_07_31_0040___Klartext.eps
Wenn ich jetzt eine Dokument öffne mit o. g. verknüpften Bildbennungen, erkennt er das Bild mit dem "a" an 15nter Stelle nicht.


als Antwort auf: [#482903]

Alle EventHandler + Problem mit "beforeopen"

gfellenz
Beiträge gesamt: 122

24. Okt 2011, 14:50
Beitrag # 6 von 19
Beitrag ID: #482912
Bewertung:
(11021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Logisch finde ich es nicht unbedingt...

Funktioniert die Abfrage überhaupt? Ich habe im Code meiner letzten Antwort noch ein alert(myImages.length); stehen. Dieser Hinweis müsste bei jedem Öffnen angezeigt werden?

Falls nicht: Welche InDesign Version setzt du ein? Ich habe es mit CS5.5 getestet.

By the way: Du kannst die if-Abfrage auch deutlich verkürzen:

Code
if (myImages[i].itemLink.name[14] != "_") {//...} 


Das sollte allerdings keinen Unterschied machen.


als Antwort auf: [#482906]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

24. Okt 2011, 15:02
Beitrag # 7 von 19
Beitrag ID: #482918
Bewertung:
(11015 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok hatte ich vergessen zu schreiben. Ich habe CS4 Version 6.06

die alert-meldung erscheint bei mir nicht. Also wird nicht geprüft.


als Antwort auf: [#482912]

Alle EventHandler + Problem mit "beforeopen"

gfellenz
Beiträge gesamt: 122

24. Okt 2011, 16:06
Beitrag # 8 von 19
Beitrag ID: #482930
Bewertung:
(10995 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Unter CS4 wird das Event nur von der Klasse Document aufgerufen. Leider ist in diesem Fall manchmal (bei großen Dokumenten), der Array allGraphics gülitg aber die Referenzen im Array funktionieren noch nicht. Seltsam.
In diesem Fall kann man mit einer Warnung abbrechen. Eine Lösung ist es nicht. Falls noch jemand Ideen hat - gerne!

Code
#targetengine "sessionxxx"   

app.addEventListener( "afterOpen", checkImg);

function checkImg (myEvent) {
// Zeigt alle Zeichnungen an, die an fünfzehnter Stelle keinen Unterstrich enthalten. Das Script geht davon aus, dass dies dann ein älterer Stand ist.

if (myEvent.parent.constructor.name == "Document") {
// Referenz auf das Dokument herstellen
var _dok = myEvent.parent;
var myImages = _dok.allGraphics;
for (i = myImages.length-1; i >= 0 ; i--) {
if (myImage == null) {
alert("Kann das Dokument leider nicht prüfen :-(")
return;
}

var myImage = myImages[i].itemLink;


if (myImage.name[14] != "_") {
alert (_dok .name + " Achtung prüfen: " + myImage.filePath);
}
}
}
}



als Antwort auf: [#482918]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

26. Okt 2011, 07:48
Beitrag # 9 von 19
Beitrag ID: #483059
Bewertung:
(10914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
gfellenz, danke erstmal für deine Hilfe.

Wenn sonst noch jemand eine Idee hat bitte melden!

Im Prinzip möchte ich nur dass ein Script ausgeführt wird....das kann auch nach dem öffnen erfolgen. Zum Beispiel nach der ersten Aktion die jemand ausführt. Wichtig ist dass es nur einmal ausgeführt wird.

Gruß
inditac


als Antwort auf: [#482930]

Alle EventHandler + Problem mit "beforeopen"

WernerPerplies
Beiträge gesamt: 2820

26. Okt 2011, 08:18
Beitrag # 10 von 19
Beitrag ID: #483060
Bewertung:
(10902 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo inditac,

ich bin nicht so fit mit den diversen Events, ich war aber schon erstaunt, dass "beforOpen" für Dein Problem funktionieren könnte.

Mein Lösungsvorschlag wäre es, das Open-Menue durch ein eigenen Menuepunkt zu ersetzen, der ein Skript aufruft, das die Datei öffnet und Deine gewünschten Aktionen ausführt.

Falls Du irgendein anderes Event benutzen willst, könntest Du den Mehrfachaufruf verhindern, indem Du ein Semaphore-File vor dem Öffnen einrichtest und beim Schließen wieder löscht.


als Antwort auf: [#483059]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

26. Okt 2011, 11:06
Beitrag # 11 von 19
Beitrag ID: #483071
Bewertung:
(10868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

das Openmenü ersetzen wäre in meinem Fall nicht gut, da wir mit Büchern arbeiten.

Aber Du musst mir verraten was ein Semaphore-File ist? ...ich habe bei google nichts passendes gefunden.

Andere Variante, könnt Ihr euch folgendes Szenario vorstellen:
Ich öffne ein Dokument.
"afterOpen" fängt den Aufruf ab.
Das Script bricht den Aufruf des Dokument´s ab.
Das Script öffnet das Dokument erneut und lässt das Prüfscript im Anschluss ablaufen.

...mir fehlt zur Umsetzung leider das fachliche Wissen :-(


als Antwort auf: [#483060]

Alle EventHandler + Problem mit "beforeopen"

WernerPerplies
Beiträge gesamt: 2820

26. Okt 2011, 11:24
Beitrag # 12 von 19
Beitrag ID: #483073
Bewertung:
(10858 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

Zitat sehr

vereinfacht eine Datei, in der steht, wer was gerade macht, oder gemacht hat.

Semaphore

Zitat das Openmenü ersetzen wäre in meinem Fall nicht gut, da wir mit Büchern arbeiten.


Das ist mir jetzt nicht so klar, aber ich arbeite ja relativ wenig mit InDesign, ich versuche mich da mal schlau zu machen.

Zitat Ich öffne ein Dokument.
"afterOpen" fängt den Aufruf ab.

ok
Zitat Das Script bricht den Aufruf des Dokument´s ab.

Das verstehe ich jetzt nicht, da ist das Doument doch schon offen.
Zitat Das Script öffnet das Dokument erneut und lässt das Prüfscript im Anschluss ablaufen.

Was spricht dagegen, danach direkt Dein Skript aufzurufen?


als Antwort auf: [#483071]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

26. Okt 2011, 13:24
Beitrag # 13 von 19
Beitrag ID: #483083
Bewertung:
(10837 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das Problem ist, dass mit "afterOpen" mein prüftscript ausgeführt wird obwohl das Dokument noch nicht geladen ist. Somit bekomme ich eine Fehlermeldung. Script kann nicht ausgeführt werden weil...

sorry ich habe es zu ungenau beschrieben, meine idee ist:
ein Script welches mit "afterOpen" ausgeführt wird. Das Script beinhaltet einen Code um das aufrufen des Dokuments zu stoppen. Dann soll das Script das Dokument wieder öffnen und danach das Prüfscript ausführen.
Ich weiß nicht ob es funktioniert, aber ich vermute dass das Script dann solange wartet bis das Dokument offen ist, um danach das prüfscript auszuführen.



zum Them Buch: Die einzelnen Buchdateien öffne ich nicht über das öffnen-Menü .... sondern direkt über das Buch-Menü.


als Antwort auf: [#483073]
(Dieser Beitrag wurde von inditac am 26. Okt 2011, 13:35 geändert)

Alle EventHandler + Problem mit "beforeopen"

WernerPerplies
Beiträge gesamt: 2820

26. Okt 2011, 13:34
Beitrag # 14 von 19
Beitrag ID: #483086
Bewertung:
(10834 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

könntest Du mir mal eine Datei und Dein Skript zur Verfügung stellen?


als Antwort auf: [#483083]

Alle EventHandler + Problem mit "beforeopen"

inditac
Beiträge gesamt: 45

26. Okt 2011, 13:52
Beitrag # 15 von 19
Beitrag ID: #483089
Bewertung:
(10815 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das Startup Script
Code
#targetengine "session"  
myScriptPath = "............\\Adobe_CS\\InDesign\\Presets_Skripte\\Skripte\\2_prüfalt.jsx";
var myFile = new File (myScriptPath);

app.addEventListener( "afterOpen", myFile);



Das Prüfscript
Code
// Zeigt alle Zeichnungen an, die an fünfzehnter Stelle keinen Unterstrich enthalten. Das Script geht davon aus, dass dies dann ein älterer Stand ist.  


var myImages = app.activeDocument.allGraphics;
for (i = myImages.length-1; i >= 0 ; i--) {

var myImage = myImages[i].itemLink;

// Die ersten drei Buchstaben aus der Datei extrahieren
var extrakt = myImage.name.slice(14, 15);

if (extrakt != "_") {
alert ("Achtung prüfen: " + myImage.filePath);
}
}



im Prinzip brauchst Du nur 2 Bilddateien mit folgendem Namen:
26_07_31_0040_a_Klartext.eps
und
26_07_31_0040___Klartext.eps
und diese beiden im Dokument verknüpfen.


als Antwort auf: [#483086]
X