[GastForen Programmierung/Entwicklung AppleScript InDesignCSx - Textframes splitten

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

InDesignCSx - Textframes splitten

TMA
Beiträge gesamt: 384

4. Apr 2008, 14:44
Beitrag # 1 von 7
Bewertung:
(1503 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
Habe mehrere InDesignCS3-Dokumente.
In diesen sind mehrere Textboxen mit mehreren Zeilen an Text (Absätze) teilweise in verschiedenen Textgrößen pro Absatz.

Beispiel an einer textbox:
zeile 1 bla
zeile 2 fgjfghkfjghsdg
zeile 3 fgkjalfghja
...

Ich möchte nun die jeweilige Textbox aufsplitten, so das jeder Absatz in einer neuen Textbox steht.

Also bei einer Textbox mit 3 Absätzen möchte ich nachher 3 einzelne Textboxen haben mit jeweils einem Absatz drin. Das ganze natürlich Standgenau zur alten Textbox die es nachher nicht mehr geben soll.
Zudem sollen die neuen Bounds der Textboxen möglichst knapp beschnitten sein (fit to text oder so).

Wie mache ich das am besten oder hat jemand schon so ein code?
Ich meine die paragraphen auslesen ist kein Problem aber das es nachher Standgenau wieder aussehen soll. Da muss man bestimmt einiges mit den Bounds und der Schriftgröße berechnen, oder gehts einfacher?

Das ganze am besten lauffähig für CS2 und CS3.

Gruß und schönes Wochenende
TMA
X

InDesignCSx - Textframes splitten

Hans Haesler
  
Beiträge gesamt: 5816

4. Apr 2008, 20:55
Beitrag # 2 von 7
Beitrag ID: #422399
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

hier schon mal ein Script. Entwickelt unter CS2 und getestet mit drei einfachen Textrahmen, welche je fünf Absätze enthalten.
[edit: Das Beschränken auf die Auswahl habe ich nachträglich eingefügt.]
Code
tell document 1 of application "Adobe InDesign CS2" 
  activate
 
  try
    set allIDs to id of every item of selection ¬
      whose content type is text type
  on error
    display dialog "Es ist kein Textrahmen ausgewählt." buttons ¬
      "OK" default button 1 with icon 2
    error number -128
  end try
 
  repeat with i from 1 to count of allIDs
    set baseID to item i of allIDs
   
    set idList to {}
    set baseList to {}
   
    repeat 1 times
     
      tell text frame id baseID
        set nParas to count of paragraphs of parent story
        if nParas is 0 then exit repeat
      end tell
     
      repeat with k from 2 to nParas
        tell text frame id baseID
          tell parent story
            tell paragraph k
              set end of baseList to baseline of line 1
            end tell
          end tell
        end tell
       
        set newFrame to duplicate text frame id baseID
        set end of idList to id of newFrame
        tell newFrame
          tell parent story
            try
              delete (paragraphs (k + 1) thru -1)
            end try
            try
              delete (paragraphs 1 thru -2)
            end try
            if (count of characters) is greater than 1 then
              if contents of character -1 is return then
                delete character -1
              end if
            end if
          end tell
        end tell
      end repeat
     
      tell text frame id baseID
        set {y1, x1, y2, x2} to geometric bounds
        tell parent story
          try
            delete (paragraphs 2 thru -1)
          end try
          if contents of character -1 is return then
            delete character -1
          end if
          set y2 to (baseline of line -1) + 1
        end tell
        set geometric bounds to {y1, x1, y2, x2}
      end tell
     
      repeat with k from 1 to count of idList
        set curID to item k of idList
        tell text frame id curID
          set {y1, x1, y2, x2} to geometric bounds
          tell parent story
            set yDiff to (item k of baseList) - (baseline of line 1)
            set y2 to (baseline of line -1) + 1
          end tell
          set geometric bounds to {y1, x1, y2, x2}
        end tell
        move text frame id curID by {0, yDiff}
      end repeat
     
    end repeat
  end repeat
end tell

In dieser ersten Version ist nur ein Minimum an Fehlervorbeugung eingebaut. Es gibt bestimmt noch weitere Fallstricke vorauszusehen (z.B. Rahmen mit Übersatz, bei welchem die erste Zeile eines Absatzes nicht sichtbar ist).

Gruss, Hans


als Antwort auf: [#422398]

InDesignCSx - Textframes splitten

TMA
Beiträge gesamt: 384

7. Apr 2008, 05:39
Beitrag # 3 von 7
Beitrag ID: #422400
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
schon mal besten Dank für das Script. Werde es gleich mal testen und schauen wie es so arbeitet.
Beschränkung auf eine Auswahl brauche ich nicht. Es soll vollautomatisch als Droplet dienen und eine Menge Dokumente bearbeiten. Dabei handelt es sich um einfache Dokumente. Visitenkarten, Briefbögen etc..
Deswegen gibt es fast keine Fallstricke. Ist alles recht einfach aufgebaut.

Danke und Gruß
TMA


als Antwort auf: [#422398]

InDesignCSx - Textframes splitten

TMA
Beiträge gesamt: 384

8. Apr 2008, 12:55
Beitrag # 4 von 7
Beitrag ID: #422401
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
habs mal getestet. Unter CS2 läufts super. Bei CS3 kommt folgende Fehlermeldung:

Can't make «class pBas» of line 1 of «class strp» of «class txtf» id 571 of document 1 of application "Adobe InDesign CS3" into type number.

Und zwar zeigt er mir den Befehl "baseline" in dieser Zeile an (letzte repeat-Schleife):
Code
set yDiff to (item k of baseList) - (baseline of line 1) 


Im Log-Fenster hört er bei dieser Zeile auf:
get baseline of line 1 of parent story of text frame id 571 of document 1

Ich weis noch nicht warum er das nicht kann.

Gruß
TMA


als Antwort auf: [#422398]

InDesignCSx - Textframes splitten

Hans Haesler
  
Beiträge gesamt: 5816

8. Apr 2008, 14:27
Beitrag # 5 von 7
Beitrag ID: #422402
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

danke für die Rückmeldung. Wie gesagt, habe ich das Script nur mit CS2 getestet.

Ich werde im Laufe des Abends einen Versuch mit CS3 machen.

Gruss, Hans


als Antwort auf: [#422398]

InDesignCSx - Textframes splitten

Hans Haesler
  
Beiträge gesamt: 5816

8. Apr 2008, 19:04
Beitrag # 6 von 7
Beitrag ID: #422403
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

ich kann Deine Beobachtung bestätigen. Aber bei meinem ersten Versuch hatte ich zuvor eine andere Fehlermeldung: Weil nur ein Rahmen ausgewählt, war das Ergebnis der ID-Nummern eine Ganzzahl (anstelle der erwarteten Liste). Abhilfe: Die class testen und – falls notwendig – das Ergebnis in eine Liste umwandeln:
---
if class of allIDs is not list then set allIDs to {allIDs}
---

Dein gemeldetes Problem beim Feststellen der Position der Grundlinie zeigt, dass  CS3 offensichtlich wählerischer ist als CS2, wenn gleichzeitig eine mathematische Aktion verlangt wird. Abhilfe bringt entweder ein explizites get ...
---
set yDiff to (item k of baseList) - (get baseline of line 1)
---
... oder ein vorheriges Speichern des Wertes:
---
set topBaseLine to baseline of line 1
set yDiff to (item k of baseList) - topBaseLine
---

Hier das modifizierte Script, welches sowohl mit CS2 als auch mit CS3 funktionieren sollte:
Code
tell document 1 of application "Adobe InDesign CS3" 
  activate
 
  try
    set allIDs to id of every item of selection ¬
      whose content type is text type
    if class of allIDs is not list then set allIDs to {allIDs}
  on error
    display dialog "Es ist kein Textrahmen ausgewählt." buttons ¬
      "OK" default button 1 with icon 2
    error number -128
  end try
 
  repeat with i from 1 to count of allIDs
    set baseID to item i of allIDs
   
    set idList to {}
    set baseList to {}
   
    repeat 1 times
     
      tell text frame id baseID
        set nParas to count of paragraphs of parent story
        if nParas is 0 then exit repeat
      end tell
     
      repeat with k from 2 to nParas
        tell text frame id baseID
          tell parent story
            tell paragraph k
              set end of baseList to baseline of line 1
            end tell
          end tell
        end tell
       
        set newFrame to duplicate text frame id baseID
        set end of idList to id of newFrame
        tell newFrame
          tell parent story
            try
              delete (paragraphs (k + 1) thru -1)
            end try
            try
              delete (paragraphs 1 thru -2)
            end try
            if (count of characters) is greater than 1 then
              if contents of character -1 is return then
                delete character -1
              end if
            end if
          end tell
        end tell
      end repeat
     
      tell text frame id baseID
        set {y1, x1, y2, x2} to geometric bounds
        tell parent story
          try
            delete (paragraphs 2 thru -1)
          end try
          if contents of character -1 is return then
            delete character -1
          end if
          set y2 to (baseline of line -1) + 1
        end tell
        set geometric bounds to {y1, x1, y2, x2}
      end tell
     
      repeat with k from 1 to count of idList
        set curID to item k of idList
        tell text frame id curID
          set {y1, x1, y2, x2} to geometric bounds
          tell parent story
            set yDiff to (item k of baseList) - (get baseline of line 1)
            set y2 to (baseline of line -1) + 1
          end tell
          set geometric bounds to {y1, x1, y2, x2}
        end tell
        move text frame id curID by {0, yDiff}
      end repeat
     
    end repeat
  end repeat
end tell

Gruss, Hans


als Antwort auf: [#422398]

InDesignCSx - Textframes splitten

TMA
Beiträge gesamt: 384

9. Apr 2008, 06:47
Beitrag # 7 von 7
Beitrag ID: #422404
Bewertung:
(1502 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
kleiner Befehl, grosse Wirkung. Mit "get baseline" läufts wunderbar.

Nochmals besten Dank für deine Bemühungen und Gruß
TMA


als Antwort auf: [#422398]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
29.09.2022

IDUGS#85 Press2id

Zoom Meeting
Donnerstag, 29. Sept. 2022, 19.00 - 21.00 Uhr

Vortrag

Kennst du WordPress? Vielleicht. Verwendest du WordPress? Ja, klar! WordPress ist das am weitesten verbreitete System für die Erstellung von Webseiten. Um Webseitenbau soll es auf dieser IDUG aber nicht gehen. Gregor zeigt press2id (github.com/grefel/press2id). Seine Open-Source-Lösung für die Verbindung von Web und InDesign. Richtig gelesen: InDesign liest mithilfe von press2id die Inhalte der WordPress-Webseiten und generiert daraus Zeitschriften, Kataloge, Programmhefte oder Bierdeckel (das zeigen wir natürlich auch!). So wird die „Content First“ Theorie zu einer konkret anwendbaren Praxis, ohne gleich die ganz großen Räder zu drehen. Versprochen: Jeder kann nach der IDUG innerhalb kürzester Zeit Daten von WordPress nach InDesign importieren. Aber Achtung: Prinzipiell kann press2id aus jeder Website, oder besser Contentmanagementsystem (CMS) Daten auslesen und nach InDesign importieren! Spannend, oder? Danach geht es in die Praxis: Stefan hat die Webseite des Parktheater Iserlohn (parktheater-iserlohn.de) gestaltet. Die gedruckten Spielpläne (parktheater-iserlohn.de/interaktive-spielplaene) werden mit press2id realisiert. Wir schauen in den Maschinenraum und zeigen, wie die Lösung des Projekts realisiert wurde.

Nein

Organisator: InDesign Usergroup Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailidug AT satzkiste DOT de

https://idugs85.eventbrite.de/

Von Wordpress nach InDesign
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022