[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textrahmen aktivieren

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

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

3. Jan 2016, 16:53
Beitrag # 1 von 8
Bewertung:
(13467 mal gelesen)
URL zum Beitrag
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
X

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

3. Jan 2016, 21:28
Beitrag # 2 von 8
Beitrag ID: #545696
Bewertung:
(13421 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545693]
(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
Beitrag # 3 von 8
Beitrag ID: #545708
Bewertung:
(13303 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545696]

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Jan 2016, 21:30
Beitrag # 4 von 8
Beitrag ID: #545709
Bewertung:
(13294 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545708]

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

4. Jan 2016, 22:13
Beitrag # 5 von 8
Beitrag ID: #545710
Bewertung:
(13269 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545709]
(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
Beitrag # 6 von 8
Beitrag ID: #545711
Bewertung:
(13239 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545710]
Anhang:
kursiv.png (67.2 KB)

Textrahmen aktivieren

Peter Welbers
Beiträge gesamt: 24

4. Jan 2016, 23:17
Beitrag # 7 von 8
Beitrag ID: #545712
Bewertung:
(13231 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545711]

Textrahmen aktivieren

Hans Haesler
  
Beiträge gesamt: 5826

5. Jan 2016, 07:59
Beitrag # 8 von 8
Beitrag ID: #545713
Bewertung:
(13113 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#545712]
X