[GastForen Programmierung/Entwicklung AppleScript InDesign CS2: Objekte anordnen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

InDesign CS2: Objekte anordnen

pjoern
Beiträge gesamt: 110

30. Okt 2006, 13:30
Beitrag # 1 von 8
Bewertung:
(3069 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Helfer,

ich habe gerade leider sehr wenig Zeit und habe auf anhieb nicht den richtigen Befehl für das <Anordnen von Objekten> in InDesign gefunden.

Ziel: Ich möchte eine Selektion (1x Textrahmen, 1x Bildrahmen) an deren Mittelpunkte horizontal ausrichten.

Danke für Eure Hilfe!
X

InDesign CS2: Objekte anordnen

Hans Haesler
  
Beiträge gesamt: 5826

30. Okt 2006, 14:35
Beitrag # 2 von 8
Beitrag ID: #421268
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

versuche es mal damit:
---
tell document 1 of application "Adobe InDesign CS2"
   activate
   tell item 1 of selection
      set {ay1, ax1, ay2, ax2} to geometric bounds
   end tell
   set c1 to ax1 + ((ax2 - ax1) / 2)
   tell item 2 of selection
      set {by1, bx1, by2, bx2} to geometric bounds
   end tell
   set c2 to bx1 + ((bx2 - bx1) / 2)
   if c2 is greater than c1 then
      set m to (c2 - c1)
      move item 1 of selection by {m, 0}
   else
      set m to (c1 - c2)
      move item 2 of selection by {m, 0}
   end if
end tell
---
Dabei ist zu beachten, dass InDesign in der 'selection' die Rahmen
in der umgekehrten Reihenfolge auflistet, in welcher sie der Anwender
ausgewählt hat. Der zuletzt ausgewählte Rahmen ist das 'item 1'...

Gruss, Hans


als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

pjoern
Beiträge gesamt: 110

30. Okt 2006, 14:49
Beitrag # 3 von 8
Beitrag ID: #421269
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans.

Danke für die schnelle Antwort.

Ich vermute dass du den "Umweg" über die geometric bounds gehst, weil es keinen direkten Befehl für die horizontale Ausrichtung am Mittelpunkt gibt. Richtig?

Schade eigentlich, denn diese regelmäßige Ausrichtung ist doch auch manuell über die sechs Buttons möglich!

Habe dein Script getestet und es läuft hervorragend.

Anschließend noch eine kleine Frage:
Ich möchte gerne die Position eines Textrahmens sperren (via Script).
Das Funktionsverzeichnis von InDesign sagt mir:

lock position (boolean)

Folgende Zeilen führten bei mir nicht zum gewünschten Erfolg:

set lock position of myTextframe to true
oder
lock position of myTextframe = true

Ehm, verstehe gerade nicht warum er "nicht auf mich hört"! :)

Gruss, pjoern


als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

Hans Haesler
  
Beiträge gesamt: 5826

30. Okt 2006, 15:30
Beitrag # 4 von 8
Beitrag ID: #421270
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

den Umweg habe ich gewählt, weil mir kein direkter Scriptbefehl bekannt ist.

Das Sperren eines Objekts sollte so klappen:
---
tell document 1 of application "Adobe InDesign CS2"
   set myTextframe to item 1 of selection
   tell myTextframe
      set locked to true
   end tell
end tell
---
Das 'lock position' gilt nur für verankerte Rahmen. Ebenfalls im Funktions-
verzeichnis steht bei >Basics Suite>document>page item: locked (boolean).

Gruss, Hans


als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

pjoern
Beiträge gesamt: 110

1. Nov 2006, 15:53
Beitrag # 5 von 8
Beitrag ID: #421271
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Liebe Helfer, lieber Hans.

Im Vorfeld wurde ja das Problem der horizontalen Ausrichtung gelöst. (Danke)
Jetzt wurde die Aufgabe für mich erweitert und ich soll:

- Grafik- und Textrahmen an der oberen Kante ausrichten.
(am Besten springt der Grafikrahmen hoch bis an den Textrahmen)

und dann auch noch

- den Grafikrahmen 5,5mm üben den Textrahmen hinausgucken lassen.

(Eigentlich müsste ich ja nur die y-Werte des Grafikrahmens ändern, richtig? Nur gelingt mir die genaue "Justierung" bisher nicht :( )

Drum frage ich halt noch einmal, ob Ihr mir helfen könntet.

Gruss, pjoern


als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

Hans Haesler
  
Beiträge gesamt: 5826

1. Nov 2006, 16:48
Beitrag # 6 von 8
Beitrag ID: #421272
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

ich muss gleich weg und kann erst im späteren Abend versuchen,
für Dein Problem eine Lösung zu finden.

Fragen: Soll denn die vertikale Position des Textrahmens nicht
verändert werden? Und horizontal? Welcher der beiden Rahmen
bestimmt die Position?

Gruss, Hans


als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

pjoern
Beiträge gesamt: 110

1. Nov 2006, 19:33
Beitrag # 7 von 8
Beitrag ID: #421273
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Ist-Zustand:
Ich habe einen Textrahmen und einen Grafikrahmen. Als Referenz nutze ich den Textrahmen.

Soll-Zustand:
Text- und Grafikrahmen sollen
a) am Mittelpunkt ausgerichtet werden (Grafikrahmen schiebt sich über den Textrahmen)
b) an der oberen Kande ausgerichtet werden (Beide stehen auf der gleichen Höhe)
c) der Grafikrahmen soll 5,5 mm über den Textrahmen hinausgucken.

Inzwischen bin ich fündig geworden und habe das folgende Script getestet.
Es läuft alles nach meinen Vorstellungen und am Ende ist der Soll-Zustand der Ist-Zustand :D

Danke für die Hilfe, pjoern

Code
tell application "Adobe InDesign CS2" 
  activate
  if exists active document then
      tell active document
        if (count of (get selection)) = 2 then
            set theTextFrame to item 1 of every item of selection whose class is text frame
            set theOtherObject to item 1 of every item of selection whose class is not text frame
            set {ty1, tx1, ty2, tx2} to geometric bounds of theTextFrame
            set {oy1, ox1, oy2, ox2} to geometric bounds of theOtherObject
            set textFrameHMiddle to tx1 + ((tx2 - tx1) / 2)
            set otherFrameHMiddle to ox1 + ((ox2 - ox1) / 2)
            set horizontalDistance to textFrameHMiddle - otherFrameHMiddle
            set verticalDistance to (ty1 - oy1) - 5.5
            move theOtherObject by {horizontalDistance, verticalDistance}
        end if
      end tell
  end if
end tell



als Antwort auf: [#421267]

InDesign CS2: Objekte anordnen

Hans Haesler
  
Beiträge gesamt: 5826

1. Nov 2006, 21:43
Beitrag # 8 von 8
Beitrag ID: #421274
Bewertung:
(3068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

bitteschön. Gut, dass Du eine Lösung gefunden hast,
welche die Aufgabe richtig ausführt!

Man könnte noch Dialoge einfügen, welche dem Anwender
sagen, dass er vergessen hat, ein Dokument zu öffnen.
Und dass er nicht genau zwei Rahmen ausgewählt hat.

Was noch fehlt, ist eine Absicherung für den Fall,
dass kein Textrahmen ausgewählt ist. Mit der aktuellen
Lösung gibt es eine Fehlermeldung, welche besagt, dass
die Variable 'theTextFrame' nicht definiert ist.

Problematischer ist, wenn die beiden Rahmen nicht auf
der gleichen Seite positioniert sind und der Ursprung der
Linealeinheiten auf "Seite" definiert ist.

Die '- 5.5' hast Du richtig eingesetzt. Aber wenn mal
die Linealeinheiten anders sind als die erwarteten
"Millimeter"?

Gruss, Hans


als Antwort auf: [#421267]
X