Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » CS6: diffuse Probleme mit Scripting und dem Release

CS6: diffuse Probleme mit Scripting und dem Release

mx
Beiträge gesamt: 161

8. Mai 2012, 10:54
Bewertung:

gelesen: 2298

Beitrag als Lesezeichen
Hallo,

bei der Releaseversion (8.0.0 Build 370) von InDesign CS6 stolpere ich gerade über Effekte, die mit mit dem gleichen ExtendScript-Code unter CS4, CS5, CS5.5 und dem letzten deutschen Prerelease von CS6 (Build 344) so nicht auftreten.

Variablen, die auf z.B. einen Rahmen zeigen, verlieren nach einer Schleife (Seiten einfügen, Musterseiten zuweisen, Rahmen von der Musterseite lösen und verketten) ihren Wert, ein resolve() auf die Variable bringt CS6 zum Absturz, gleiches auch beim Aufklappen des Objekts im Daten-Browser.

Auf ein kleines Beispiel konnte ich es bislang noch nicht herunterbrechen, das Verhalten ist allerdings beliebig reproduzierbar:
CS6 370 mag es nicht, alle Versionen davor bis CS4 verhalten sich wie erwartet.

Hier erstmal nur als "Merker" in der Hoffnung, dass sich dieses Problem doch noch löst oder zumindest betätigt.

Viele Grüße,
Jo

CS6: diffuse Probleme mit Scripting und dem Release

Uwe Laubender
Beiträge gesamt: 5316

8. Mai 2012, 11:54
Bewertung:

gelesen: 2264

Beitrag als Lesezeichen
Hallo, Jo!

Bekommst Du die Rahmen in den Griff, wenn Du sie über ihre ID ansprichst?
*****
Mit herzlichem Gruß,
Uwe Laubender

CS6: diffuse Probleme mit Scripting und dem Release

mx
Beiträge gesamt: 161

8. Mai 2012, 15:32
Bewertung:

gelesen: 2215

Beitrag als Lesezeichen
Hallo Uwe,

Danke für die Antwort.

Kurz: Die ID ist nicht mehr gültig!

Mittlerweile habe ich einen Hinweis gefunden, der in Richtung der Ursache zeigen könnte:
Code
nextFrame = masterFrame.override(nextPage); 

liefert mir noch einen gültigen Rahmen.
Danach kommt dieser Rahmen als nächster in die Kette.
Soweit alles gut.

Dann wird's problematisch:
Eine neue Seite einfügen und dieser Seite einen Master zuweisen.
Hier klappt es nur, wenn es der "richtige" Master ist. Dann bleibt Variable und Objekt gültig, ID usw. ist korrekt.
Wenn ich einen anderen Master erwische, killt mir das nachträglich den Rahmen in nextFrame!?

Wenn ich auf die Vererbung von der Musterseite pfeife und den Rahmen mit
Code
nextFrame.detach() 

ablöse, klappt's, das war aber nicht Ziel der Übung :(

Zum nachstellen deutlich vereinfacht (es geht auch mit nur einem Master daneben):
Code
var currentDocument = app.activeDocument; 
currentDocument.revert();

var currentPage = currentDocument.pages[0];
var currentFrame = currentPage.textFrames[0];
var nextPage = null;
var nextFrame = null;
var masterFrame = currentPage.appliedMaster.textFrames[0];

for(var i=0;i<3;i++){
nextPage = currentPage.parent.pages.add(LocationOptions.AFTER, currentPage);
if(!currentFrame.isValid)
$.bp();
//In der folgenden Zeile entsteht das Problem (im zweiten Durchlauf bei i=1). Was eben noch gültig war...
currentPage.appliedMaster = currentDocument.masterSpreads[0];
if(!currentFrame.isValid)
$.bp();
//.. ist es jetzt nicht mehr
nextPage.appliedMaster = currentDocument.masterSpreads[0];
masterFrame = currentDocument.masterSpreads[0].textFrames[0];
nextFrame = masterFrame.override(nextPage);
currentFrame.nextTextFrame = nextFrame;
currentFrame = nextFrame;
currentPage = nextPage;
}


Es braucht dazu noch ein Dokument wie folgt:
1.
Eine Musterseiten mit einer Seite und darauf ein Textrahmen.

2.
Eine Seite im Dokument mit der Musterseite als Master und darauf den Textrahmen der Musterseite mit Strg + Shift + Klick gelöst.


Erwünschtes Ergebnis ist:
Vier Seiten jeweils mit Textrahmen und diese sind verkettet (und erben optimalerweise auch noch vom Master, aber das ist Bonus).

Viele Grüße,
Jo

CS6: diffuse Probleme mit Scripting und dem Release

Uwe Laubender
Beiträge gesamt: 5316

8. Mai 2012, 16:17
Bewertung:

gelesen: 2199

Beitrag als Lesezeichen
Hallo, Jo!
So ganz verstehe ich noch nicht, was Du beabsichtigst.

Gehe ich recht in der Annahme, dass Du:

1. Seiten hinzufügen möchtest (Dein Beispiel mit der for-Schleife, die das 3x macht)
2. Den Mustertextrahmen auf den hinzugefügten Seiten lösen willst
3. Die abgelösten Textrahmen miteinander verknüpfen möchtest, wobei der Textrahmen auf der letzten Seite des ursprünglichen Dokuments mitverknüpft werden soll?

Deinen hier geposteten Code habe ich auch in InDesign CS4 nicht zum Laufen gebracht. Da liegt das Problem dann nicht (nur) an InDesign CS6, denke ich mal.

Für den Fall, dass ich mit meinen Annahmen richtig liege, funktioniert folgendes Snippet (getestet in InDesign CS4 mit einem neuen einseitigen Dokument, desssen einzige Musterseite einen Mustertextrahmen enthält):

Code
var currentDocument = app.activeDocument;  
var lastPage = currentDocument.pages[-1];

var lastMasterFrame = lastPage.appliedMaster.textFrames[0];
var textFrameArray = new Array();

textFrameArray[0] = lastMasterFrame.override(lastPage);

for(var i=0;i<3;i++){
lastPage = currentDocument.pages.add(LocationOptions.AFTER,currentDocument.pages[-1]);
textFrameArray[i+1] = lastMasterFrame.override(lastPage);
};

for(var n=0;n<textFrameArray.length-1;n++){
textFrameArray[n].nextTextFrame = textFrameArray[n+1];
};

*****
Mit herzlichem Gruß,
Uwe Laubender

CS6: diffuse Probleme mit Scripting und dem Release

mx
Beiträge gesamt: 161

8. Mai 2012, 16:51
Bewertung:

gelesen: 2182

Beitrag als Lesezeichen
Hallo Uwe,

Genau so:
Antwort auf [ Uwe Laubender ] 1. Seiten hinzufügen möchtest (Dein Beispiel mit der for-Schleife, die das 3x macht)
2. Den Mustertextrahmen auf den hinzugefügten Seiten lösen willst
3. Die abgelösten Textrahmen miteinander verknüpfen möchtest, wobei der Textrahmen auf der letzten Seite des ursprünglichen Dokuments mitverknüpft werden soll?


Ich gehe noch davon aus, dass der Textrahmen auf der ersten Seite bereits gelöst ist, bei deinem Ansatz sollte er das noch nicht sein ("Musterseitenobjekt wurde bereits übergangen...").

Allerdings habe ich das gerade mit CS4 (6.0.6) hier nochmal extra durchlaufen lassen und es tut
Antwort auf [ Uwe Laubender ] Deinen hier geposteten Code habe ich auch in InDesign CS4 nicht zum Laufen gebracht.

Da würde mich der Fehler interessieren...

Auch dein Script geht mit der CS6 in die Knie, sobald ich den Master neu zuweise (1. Zeile in der 1. for-Schleife):

Code
var currentDocument = app.activeDocument;   
var lastPage = currentDocument.pages[-1];

var lastMasterFrame = lastPage.appliedMaster.textFrames[0];
var textFrameArray = new Array();

textFrameArray[0] = lastMasterFrame.override(lastPage);

for(var i=0;i<3;i++){
//jetzt neu: Master zuweisen
currentDocument.pages[-1].appliedMaster = currentDocument.masterSpreads[0];
lastPage = currentDocument.pages.add(LocationOptions.AFTER,currentDocument.pages[-1]);
textFrameArray[i+1] = lastMasterFrame.override(lastPage);
};

for(var n=0;n<textFrameArray.length-1;n++){
textFrameArray[n].nextTextFrame = textFrameArray[n+1];
};


CS4 macht mit, CS6 nicht.

Mein Problem liegt an dem Masterwechsel, den ich dann doch ab und zu wirklich brauche, das hier ist nur ein absolutes Minimalbeispiel.

Vielen Dank soweit und viele Grüße,
Jo

CS6: diffuse Probleme mit Scripting und dem Release

Uwe Laubender
Beiträge gesamt: 5316

8. Mai 2012, 17:13
Bewertung:

gelesen: 2165

Beitrag als Lesezeichen
Hallo, Jo!

Dass sich bei den Mastertextrahmen in InDesign CS6 etwas gewaltig geändert hat, weiss ich. Testen konnte ich das bislang noch nicht.

Schau' Dir mal die Dokumentation des CS6-DOMs bei Jongware an. Vielleicht findest Du dort, was Du suchst.

Die Eigenschaft "MasterTextFrame" gibt es jedenfalls nicht mehr in CS6.
Stattdessen gibt's "createPrimaryTextFrame". Wie das zu handhaben ist, dürfte sich doch herausfinden lassen. (Habe leider heute keine Zeit mehr dafür.)
*****
Mit herzlichem Gruß,
Uwe Laubender