[GastForen Programme Print/Bildbearbeitung Adobe InDesign Textattribute per Script skalieren

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

Textattribute per Script skalieren

Hans Haesler
Beiträge gesamt: 5826

7. Nov 2006, 13:07
Beitrag # 1 von 6
Bewertung:
(2289 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

in einem anderen Forum wurde gefragt, was die eingeklammerten Werte
hinter der Schriftgrösse bedeuten. Und wie man sie wieder wegkriegt.

Dieses Thema wurde hier zwar schon behandelt (zum Beispiel:
http://www.hilfdirselbst.ch/..._P215922.html#215922 und es gibt sogar
ein AppleScript, welches bei Gruppierungen hilfreich ist.

Hier eine erweiterte Fassung des Scripts, welche auch einzelne
Rahmen, die eventuell mit ausgewählt worden sind, berücksichtigt.

Wichtig ist, dass die Objekte mit dem Auswahlwerkzeug (= schwarzer
Pfeil) ausgewählt wurden. Sonst werden Gruppen nicht behandelt.
Und es gibt leider keine Möglichkeit, per Script festzustellen,
welches Werkzeug aktiv ist.

Das folgende Script kann auch hier heruntergeladen werden:
http://www.fachhefte.ch / Den Link "AppleScripts" anklicken, die Ordner
"mac_os_x_d" und "indesign_cs2" öffnen. Das Stuffit-Archiv heisst
"TextAttrSkalieren.sit".

Code
--TextAttrSkalieren_01d.scpt 
(*
Dieses Script dient zum Zuweisen der aktuellen Schriftgrösse, welche
bei skalierten Rahmen in Klammern hinter dem Ausgangswert steht.
*)

tell application "Adobe InDesign CS2"
activate
if (count of documents) is 0 then
display dialog "Ein Dokument öffnen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
tell document 1
set curSel to selection
if curSel is {} then
display dialog "Es ist nichts ausgewählt." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
set selType to class of item 1 of curSel
if selType is rectangle or selType is graphic line then
display dialog "Nur Textrahmen auswählen." buttons ¬
"OK" default button 1 with icon 0
error number -128
else if selType is not text frame and selType is not group then
display dialog "Rahmen mit dem Auswahlwerkzeug auswählen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
repeat with curItem in curSel
if class of curItem is group then
my scaleGroupAttr(curItem)
else if class of curItem is text frame then
my scaleTextAttr(curItem)
end if
end repeat
end tell
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end tell

on scaleGroupAttr(curGroup)
tell application "Adobe InDesign CS2"
tell curGroup
try
transform group contents
end try
end tell
set allFrames to every page item of curGroup
repeat with curFrame in allFrames
if class of curFrame is group then
my scaleGroupAttr(curFrame)
else if class of curFrame is text frame then
my scaleTextAttr(curFrame)
end if
end repeat
end tell
end scaleGroupAttr

on scaleTextAttr(curItem)
tell application "Adobe InDesign CS2"
tell curItem
try
scale text attributes
end try
end tell
end tell
end scaleTextAttr


Gruss, Hans

(Dieser Beitrag wurde von Martin Fischer am 7. Nov 2006, 14:14 geändert)
X

Textattribute per Script skalieren

Hans Haesler
Beiträge gesamt: 5826

7. Nov 2006, 13:09
Beitrag # 2 von 6
Beitrag ID: #260489
Bewertung:
(2285 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und hier dasselbe als JavaScript. :-)

Code
//TextAttrSkalieren_01d.js 
/*
Dieses Script dient zum Zuweisen der aktuellen
Schriftgrösse, welche bei skalierten Rahmen in
Klammern hinter dem Ausgangswert steht.
*/

try {
var curSel = app.documents[0].selection;
}
catch (e) {
alert ("Ein Dokument öffnen.");
exit();
}

if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.");
exit();
}

var selType = curSel[0].constructor.name;
if (selType == "Rectangle" || selType == "GraphicLine") {
alert ("Nur Textrahmen auswählen.");
exit();
}
else if (selType != "TextFrame" && selType != "Group") {
alert ("Rahmen mit dem Auswahlwerkzeug auswählen.");
exit();
}

for (var k=0; k<curSel.length; k++) {
var curItem = curSel[k];
var curType = curItem.constructor.name;
if (curType == "Group") {
scaleGroupAttr(curItem);
}
else if (curType == "TextFrame") {
scaleTextAttr(curItem);
}
}

alert ("Fertig.");

function scaleGroupAttr(curGroup) {
try {
curGroup.transformGroupContents();
}
catch (e) {
}
var allFrames = curGroup.allPageItems;
for (var k=0; k<allFrames.length; k++) {
var curFrame = allFrames[k];
var curType = curFrame.constructor.name;
if (curType == "Group") {
try {
curFrame.transformGroupContents();
}
catch (e) {
}
}
else if (curType == "TextFrame") {
scaleTextAttr(curFrame);
}
}
}

function scaleTextAttr(curFrame) {
try {
curFrame.scaleTextAttributes();
}
catch (e) {
}
}


Gruss, Hans


als Antwort auf: [#260488]

Textattribute per Script skalieren

Martin Fischer
  
Beiträge gesamt: 12891

7. Nov 2006, 13:59
Beitrag # 3 von 6
Beitrag ID: #260503
Bewertung:
(2272 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Klasse!
Hans, ich danke Dir.


als Antwort auf: [#260489]

Textattribute per Script skalieren

Hans Haesler
Beiträge gesamt: 5826

7. Nov 2006, 14:17
Beitrag # 4 von 6
Beitrag ID: #260509
Bewertung:
(2259 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bitteschön! Danke für das Kompliment.

Ich habe allerdings nicht herausgefunden, weshalb
mein JavaScript ohne Rekursivität auskommt.
Denn wenn ich im AppleScript den Sich-selbst-Aufruf
des Handlers 'scaleGroupAttr' durch den Befehl
'transform group contents' ersetze, dann will es nicht ...

Gruss, Hans


als Antwort auf: [#260503]

Textattribute per Script skalieren

Martin Fischer
  
Beiträge gesamt: 12891

8. Nov 2006, 00:51
Beitrag # 5 von 6
Beitrag ID: #260620
Bewertung:
(2242 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

> Ich habe allerdings nicht herausgefunden, weshalb
> mein JavaScript ohne Rekursivität auskommt.

Ich vermute, es liegt an dem Objekt "allPageItems".
JavaScript kennt "pageItems" und "allPageItems".
"pageItems" sind Objekte, die direkt auf einer Seite/Montagefläche liegen.
"allPageItems" sind Objekte, die direkt auf einer Seite/Montagefläche liegen könnten(!).
Darin sind also auch verankerte Textrahmen, gruppierte Objekte (also die Bestandteile einer Gruppe oder Untergruppe) usw. enthalten.

Das ist etwas anderes als "every page item" in AS.
Das AS-Objekt "every page item" entspricht vielmehr dem JS-Objekt "pageItems".

Wenn Du in JS also die Objekte einer Gruppe mit "var allFrames = curGroup.allPageItems;" ansprichst, dann sind auch die Objekte in Untergruppen enthalten. Deswegen braucht es keine Rekursivität.
Wenn Du aber in AS die Objekte einer Gruppe mit "set allFrames to every page item of curGroup" ansprichst, dann ist damit nur die nächste Ebene erfaßt (alle page items der Gruppe), nicht aber Objekte in Untergruppen. Damit brauchst Du die Rekursivität, um auch die Objekte in den Untergruppen zu fassen.

Ah, gerade sehe ich, in AS gibt es das in JS mit "allPageItems" bezeichnete Objekt ebenfalls: "all page items" - nicht zu verwechseln mit "every page item". ;-)

Du könntest also auch in AS auf die Rekursivität verzichten, indem Du die Objekte so erfaßt: "set allFrames to all page items of curGroup".


als Antwort auf: [#260509]

Textattribute per Script skalieren

Hans Haesler
Beiträge gesamt: 5826

8. Nov 2006, 09:23
Beitrag # 6 von 6
Beitrag ID: #260648
Bewertung:
(2207 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

gut beobachtet! :-)

Ich habe die zahlreichen Testscripts jetzt nicht zur Hand, aber ich glaube,
dass ich auch 'all page items' eingesetzt hatte.

Doch sobald zwei Gruppierungen gruppiert sind (insgesamt vier Textrahmen,
je zwei gruppiert und beide Gruppen gruppiert), klappt es nicht.
Ganz abgesehen von noch schlimmeren Konstrukten (soll es geben), welche
ich in meinem Testdokument gebastelt hatte.

Ich habe jetzt nochmals den Aufbau des AppleScripts jenem des JavaScripts
angeglichen und 'set allFrames to all page items of curGroup' verwendet.
Ergebnis: Wenn eine Gruppierung noch gruppierte Rahmen enthält, dann
bleiben in diesen die Schriftgrössen unverändert.

Das Rätsel ist also noch nicht gelöst. Ist für mich aber nicht so wichtig.

Gruss, Hans


als Antwort auf: [#260620]
X