[GastForen Programmierung/Entwicklung AppleScript InDesign CS2: Textrahmen mit 2 Spalten

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

InDesign CS2: Textrahmen mit 2 Spalten

pjoern
Beiträge gesamt: 110

25. Okt 2006, 08:49
Beitrag # 1 von 8
Bewertung:
(4469 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Helfer, lieber Hans.

Es ist ja problemlos möglich einen einfachen Textrahmen seinem Inhalt anzupassen (fit given frame to content). Dieses klappt nur leider nicht, wenn der Textrahmen 2 und mehr Spalten enthält.

Meine Frage:

Ist euch ein Befehl bekannt, mit dem man die vertikale Größe einer solchen "text column" anpassen kann?
D.h. ich möchte nicht über die geometric bounds einen festen Wert eintragen, sondern das ganze nach dem Schema "fit given frame to content" lösen.
Möglich dass das garnicht vorgesehen ist?!

Für Denkanstöße und Hilfe bin ich Euch schon jetzt sehr dankbar.

Grüße, pjoern.
X

InDesign CS2: Textrahmen mit 2 Spalten

Hans Haesler
  
Beiträge gesamt: 5826

25. Okt 2006, 09:11
Beitrag # 2 von 8
Beitrag ID: #421250
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo lieber pjoern,

wenn Du den Befehl manuell ausführen willst, dann siehst Du,
dass der Artikel nicht verfügbar ist.

Wie sieht denn der Inhalt des zweispaltigen Rahmens aus?
Das heisst, ist der Zeilenabstand durchwegs derselbe?
Und gibt es zwischen den Absätzen keine Abstands-Werte?

Gruss, Hans


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

pjoern
Beiträge gesamt: 110

25. Okt 2006, 09:23
Beitrag # 3 von 8
Beitrag ID: #421251
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Hans.

Beim Inhalt meines 2spaltigen Textrahmens handelt es sich nur um Text.
Die linke Spalte enthält nur eine 6stellige Ziffernfolge (123456), dann folgt ein Spaltenumbruch und in der rechten Spalte fließt mein Text in Absätzen unterteilt weiter.

Der Zeilenabstand ist immer derselbe.

Den Absätzen wird jeweil ein zutreffendes Absatzformat zugewiesen, welches die Abstände regelt.
Der Textrahmen selber enthält keine definition zu den Abständen, etc.

Gruss, pjoern


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

Hans Haesler
  
Beiträge gesamt: 5826

25. Okt 2006, 10:54
Beitrag # 4 von 8
Beitrag ID: #421252
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

also ... die erste Spalte kann man leicht ausschliessen.

Bei einem richtigen Script müsste man eine Menge Tests einbauen,
damit eventuelle Fehlermeldungen verständlicher ausfallen würden.
Hier geht man davon aus, dass ein Textrahmen ausgewählt ist,
(mindestens zweispaltig), wobei die erste Spalte nur eine Zeile enthält
und nicht beachtet werden soll.
---
tell document 1 of application "Adobe InDesign CS2"
   activate
   tell selection
      set nColumns to (text column count of text frame preferences) - 1
      tell parent story
         set ascentVal to ascent of character 1
         set leadVal to (leading * 0.35278)
         set nLines to (((((count lines) - 1) + (nColumns - 1)) / nColumns) div 1) - 1
         set frameH to (nLines * leadVal) + ascentVal
      end tell
      set {y1, x1, y2, x2} to geometric bounds
      set geometric bounds to {y1, x1, y1 + frameH, x2}
   end tell
end tell
---
Das Script stellt die Anzahl Spalten fest und zieht davon schon mal
eine ab (weil die erste nicht gezählt werden soll). Dann speichert es die
Versalhöhe der ersten Zeile und den Zeilenabstand, welcher in mm
umgerechnet wird.

Die längste Zeile ist die undurchsichtigste. :-) Dort wird die Anzahl
Zeilen pro Spalte ausgerechnet. Damit das Script auch bei Rahmen mit
mehr als zwei Spalten eingesetzt werden kann, wird zum Total der Zeilen
(minus eins, wegen der ersten Spalte) ein Wert basierend auf der Anzahl
Spalten dazugerechnet, bevor diese Zahl durch die Anzahl Spalten geteilt
und dann mit div 1 abgerundet wird. Vom Resultat muss man noch eins
abziehen, weil bei der Berechnung der Rahmenhöhe für die oberste Zeile
nicht der Zeilenabstand, sondern nur die Versalhöhe eingesetzt wird.

Schliesslich müssen dennoch die geometric bounds verlangt werden,
damit die Höhe des Rahmens angepasst werden kann.

Das funktioniert soweit gut. Voraussetzung ist allerdings, dass zwischen
den Absätzen nicht extra Raum (Abstand vor / Abstand nach) eingefügt
ist. Wenn dies der Fall sein sollte, dann müsste die Sache anders
angepackt werden.

Gruss, Hans


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

pjoern
Beiträge gesamt: 110

25. Okt 2006, 11:50
Beitrag # 5 von 8
Beitrag ID: #421253
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans ;D

Hui, das ist ja fast in den Rücken, durch die Brust ins Auge :D
Nunja, es funktioniert soweit richtig "knorke"!

--- Evtl. habe ich es kaputt gemacht! :) ---
Ich habe KEINEN extra Raum vor bzw. nach den Absätzen und er erweitert die Textrahmen etwas lang (fast bis zum Seitenende).
Eine kleine Änderrung hab ich vorgenommen, da sich das Script sonst nicht ausführen ließ.
Habe einfach aus dem
set leadVal to (leading * 0.35278)
ein
set leadVal to (auto leading * 0,35278)
gemacht.

Evtl. ein kapitaler Fehler? :D

Ich "experimentiere" einfach noch mit deinen Zeilen herrum und dann steht ganz bestimmt bald die perfekte Lösung! :D

Bis hierhin bin ich dir zu tiefstem Dank verpflichtet. :)
Freue mich riesig über deine Hilfsbereitschaft! Danke!

Gruss, pjoern.


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

Hans Haesler
  
Beiträge gesamt: 5826

25. Okt 2006, 12:24
Beitrag # 6 von 8
Beitrag ID: #421254
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

welch ein Überschwang! :-) Bitteschön.

Nun, den automatischen Zeilenabstand verwende ich nie.
Darum hat es hier mit dem ersten Script funktioniert.

Damit einem das auto leading keinen Streich spielt, muss ein Test
eingebaut werden:
---
tell document 1 of application "Adobe InDesign CS2"
   activate
   tell selection
      set nColumns to (text column count of text frame preferences) - 1
      tell parent story
         set ascentVal to ascent of character 1
         if leading is auto then
            set autoVal to (auto leading) / 100
            set typeSize to point size
            set leadVal to ((typeSize * autoVal) * 0.35278)
         else
            set leadVal to (leading * 0.35278)
         end if
         set nLines to (((((count lines) - 1) + (nColumns - 1)) / nColumns) div 1) - 1
         set frameH to (nLines * leadVal) + ascentVal
      end tell
      set {y1, x1, y2, x2} to geometric bounds
      set geometric bounds to {y1, x1, y1 + frameH, x2}
   end tell
end tell
---
Nun sollte der Rahmen auch bei Dir richtig angepasst werden.

Gruss, Hans


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

pjoern
Beiträge gesamt: 110

25. Okt 2006, 14:12
Beitrag # 7 von 8
Beitrag ID: #421255
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wundervoll!
Nicht nur, dass dein Script fehlerfrei läuft, ich scheine es sogar verstanden zu haben!! :D

Na besser kann´s nicht laufen!

Schöne Zeit & Grüße, pjoern.


als Antwort auf: [#421249]

InDesign CS2: Textrahmen mit 2 Spalten

Hans Haesler
  
Beiträge gesamt: 5826

25. Okt 2006, 15:31
Beitrag # 8 von 8
Beitrag ID: #421256
Bewertung:
(4468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

gut, dass es nun auch bei Dir klappt und sehr gut, dass Du die Sache
verstanden hast!

Dennoch rasch eine Erklärung (für interessierte Mitleser ;-), warum
die erste Version nicht laufen will, wenn "Auto" eingestellt ist.

In der Zeile ...
---
set leadVal to (leading * 0.35278)
---
... wird das Wert der Konstante leading zum Rechnen benutzt. Mit dem
automatischen Zeilenabstand ist dies aber nicht eine Bruchzahl (z.B. 13.0),
sondern eine weitere Konstante (= auto). Deshalb die Fehlermeldung.

Man darf aber nicht auto leading direkt zum Rechnen benutzen, denn
diese Konstante enthält den Wert, welcher als Prozentwert definiert
ist. In den meisten Fällen wird es der Vorgabewert 120 sein.
Sonst ergibt dies für jede Zeile 42.3336 mm. Deshalb die viel zu
grosse Rahmenhöhe.

Gruss, Hans


als Antwort auf: [#421249]
X