Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Textrahmen aktivieren

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

3. Jan 2016, 16:53
Bewertung:

gelesen: 13468

Beitrag als Lesezeichen
Hallo,

Vorbemerkung: ich bin blutiger Anfänger, brauche also eine Erklärung für Dummies
Wenn ich eine Musterseite mit Textrahmen auf den Druckbogen ziehe, so sind die Textrahmen gesperrt. Man muss sie mit Strg+Shift "aktivieren". Wie macht man das in einem jsx-Script.
Meine bisherigen Versuche mit z.B. app.activeDocument.textFrames.everyItem().select()wählen immer nur den Textrahmen auf der Musterseite aus und nicht die "gesperrten" Textrahmen auf dem Druckbogen.

Windows7 64 bit, CS6 Indesign 8.1
Über ein bisschen Starthilfe würde ich mich freuen.
Peter Welbers

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

3. Jan 2016, 21:28
Bewertung:

gelesen: 13422

Beitrag als Lesezeichen
Hallo Peter,

vermutlich geht es Dir nicht darum, den Mustertextrahmen zu lösen, denn mit CS6 ist dieser ohne weiteres zugänglich.

Du hast also auf den Seiten der Mustervorlage Textrahmen erzeugt. Diese müssen manuell nicht einzeln per Tastenkürzel gelöst werden. Im Bedienfeld "Seiten" die Seitensymbole auswählen und im Fly-out-Menü den Artikel "Alle Musterseitenobjekte übergehen" wählen.

Per Script können diese Rahmen auch "übergangen" werden. Der englische Script-Befehl lautet: override().

Mit dem folgenden Snippet wird im Dokument eine neue Seite angefügt. Das Script speichert die Musterseiten-Objekte dieser neuen Seite und in einer Schleife werden die Objekt übergangen.

Code
// das Dokument im Vordergrund 
var curDoc = app.documents[0];

// eine neue Seite anfügen
var newPage = curDoc.pages.add();

// die Objekte der Musterseite dieser neuen Seite
var masterItems = newPage.appliedMaster.pageItems;
var nItems = masterItems.length;

// eine Schleife durch die Objekte
for (var n=0; n<nItems; n++) {
// das aktuelle Objekt
var curItem = masterItems[n];
try {
// dieses Objekt übergehen
curItem.override(newPage);
}
catch (e) {
}
}

Dabei spielt es keine Rolle, ob die neue Seite eine linke oder eine rechte ist.
Oder ob es sich um ein Einzelseiten-Dokument handelt.

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 4. Jan 2016, 21:25 geändert)

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

4. Jan 2016, 21:04
Bewertung:

gelesen: 13304

Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für Deine schnelle "Starthilfe". Es ist schon erstaunlich, wie viele Zeilen in einem Script für zweit Tasten (Strg+Shift) und eine Mausbewegung notwendig sind.

Aber Dein Script hat mir sehr weiter geholfen. In Anlehnung an Dein Script habe ich etwas herumgespielt.
In Deinem Script wird bei jedem Aufruf eine neue Seite angelegt. Wenn man das nicht will, reicht, wie ich gelernt habe, folgender Befehl für die erste Seite
app.activeDocument.pages[0].appliedMaster.pageItems.everyItem().override(app.activeDocument.pages[0]);

Vielen Dank auch für den Hinweis "Alle Musterseitenobjekte übergehen" (Alt+Strg+Shift+L). Den kannte ich noch nicht.
Grüße
Peter

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Jan 2016, 21:30
Bewertung:

gelesen: 13295

Beitrag als Lesezeichen
Hallo Peter,

Bitte sehr. Du lernst aber schnell! :-)

Aber: Ein Freund von Einzeilern war ich noch nie.

Okay, man hört oft: Je weniger Zeilen ein Script aufweist, desto "eleganter" ist es.

Die Schleife (inklusive 'try'-Wickel) in meinem Snippet, habe ich bewusst so gepostet. Einverstanden, bei einer neu eingefügten Seite ist die Wahrscheinlichkeit eines Problems gering.

Doch der Code könnte von einem Mitleser auf eine bestehende Seite abgewandelt werden. Und da genügt es, dass ein einziger Rahmen schon manuell übergangen worden ist. Dann fällt der Einzeiler auf die Nase: Eine Fehlermeldung stoppt die Ausführung.

Deshalb würde ich die Rahmen der ersten Seite so ansprechen:

Code
var curDoc = app.documents[0]; 
var pgeOne = curDoc.pages[0];
var masterItems = pgeOne.appliedMaster.pageItems;
var nItems = masterItems.length;
for (var n=0; n<nItems; n++) {
var curItem = masterItems[n];
try {
curItem.override(pgeOne);
}
catch (e) {
}
}

Gruss, Hans

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

4. Jan 2016, 22:13
Bewertung:

gelesen: 13270

Beitrag als Lesezeichen
Hallo Hans,

Du hast natürlich Recht, mit einer Schleife und try kann man alle Seiten erreichen und Fehler vermeiden,
aber ich hatte die Kurzreferenz aus dem Buch von Gregor Fellenz benutzt. Da ist es beim Probieren mit den verschiedenen Parametern einfacher, eine Zeile zu benutzen. Die kann man dann ganz parallel zur Kurzreferenz aufbauen.

Meine jetzige Variante lautet:

Code
var meinDokument = app.activeDocument; 
var alleSeiten = (meinDokument.pages.count());
for (var aktuelleSeite=0; aktuelleSeite < alleSeiten; aktuelleSeite++) {
var alleObjekte = meinDokument.pages[aktuelleSeite].appliedMaster.pageItems.everyItem().getElements();
for (var n=0; n<alleObjekte.length; n++) {
try {
alleObjekte[n].override(meinDokument.pages[aktuelleSeite])
}
catch(e){
}
}
}

So richtig verstanden habe ich den Term getElements() nicht, aber ich habe den analog zum Beispiel Fellenz S 161 gemacht und -- es funktionierte.
Das ist für mich erstmal die Hauptsache, die Kür kommt später.
Grüße
Peter

(Dieser Beitrag wurde von Hans Haesler am 4. Jan 2016, 22:58 geändert)

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Jan 2016, 23:03
Bewertung:

gelesen: 13240

Beitrag als Lesezeichen
Hallo Peter,

die Zählervariable 'i' ist eigentlich in Ordnung. Aber sobald dieses 'i' mit eckigen Klammern umgeben wird, wird es von der Serversoftware geschluckt und der Rest des Beitrags ist kursiv. Siehe den angehängten Screenshot "kursiv-png".

Ich habe jetzt Deine Antwort editiert und das 'i' durch 'n' ersetzt. Zudem ist der Code nun als Code formatiert. Dazu musst Du nur die Code-Zeilen auswählen und auf den Button "code" (unten links klicken).

Zu 'getElements()' werde ich vielleicht morgen etwas schreiben.

Gruss, Hans

Anhang:
kursiv.png (67.2 KB)

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

4. Jan 2016, 23:17
Bewertung:

gelesen: 13232

Beitrag als Lesezeichen
Hallo Hans,

nochmal vielen Dank für Deine Hilfe. Aber wo findet man solche Tricks wie mit dem i (morgen bekomme ich die Übersetzung der Broschüre von Krahel, vielleicht darin). Aber der Logik, die man so von Excel-VBA kennt, entspricht das nicht.
Dann vielleicht bis morgen
Schönen Abend
Peter Welbers

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

5. Jan 2016, 07:59
Bewertung:

gelesen: 13114

Beitrag als Lesezeichen
Hallo Peter,

also das mit dem i ist kein JavaScript-Trick, sondern eine Formatierungs-Option der Beiträge im Forum. In der Anleitung von Peter Kahrel wird das somit nicht erwähnt.

Mit [i] werden Texte kursiv, mit [b] kann eine Buchstabenfolge bold hervorgehoben werden.
Zum Aufheben der Auszeichnung setzt man [/i] und [/b] ein.

Du kannst in Deinen Scripts also weiterhin das i verwenden. Nur beim Posten von Code musst Du einen anderen Buchstaben wählen. Oder – wie schon erwähnt – den Zeilen ein [code] voranstellen und am Ende mit [/code] aufheben. Dann bleibt das [i] sichtbar und die folgenden Worte werden nicht kursiv gestellt:

Code
alleObjekte[i].override(meinDokument.pages[aktuelleSeite]); 

Gruss, Hans