[GastForen Programmierung/Entwicklung AppleScript QXP: Gesamter Text auf Schriftbreite 100%

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

QXP: Gesamter Text auf Schriftbreite 100%

Anonym
Beiträge gesamt: 22827

24. Apr 2008, 14:58
Beitrag # 1 von 7
Bewertung:
(1420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Haesler,

ich suche nach einer Möglichkeit den Inhalt aller Textrahmen eines QXP-Dokuments in einem Durchgang auf “Schriftbreite horizontal von 100%” zu setzen. Also genauer gesagt: Menu “Stil”  > “Schriftbreite” > “Skalieren: Horizontal: 100%”.

Gibt es evtl. eine Möglichkeit dies mit Hilfe eines Scripts für QXP 6 und QXP 7 zu steuern?

Herzlichen Dank und viele Grüße aus Düsseldorf,
Marcus Weyerke
X

QXP: Gesamter Text auf Schriftbreite 100%

Hans Haesler
  
Beiträge gesamt: 5826

24. Apr 2008, 20:55
Beitrag # 2 von 7
Beitrag ID: #422411
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marcus,

dies ist ohne weiteres per Script möglich. Hier schon mal eine erste Version:
---
(*[color=#4C4D4D]
Schriftbreite100_01d
Dieses Script setzt die horizontale Schriftbreite aller Texte aller Layouts auf 100%.
[/color]*)

tell application "QuarkXPress Passport"
   activate
   -- eine eventuelle Auswahl aufheben
   set selection to null
   -- das Projekt ansprechen
   tell project 1
      -- eine Schleife durch die Layouts
      repeat with i from 1 to count of layout spaces
         tell layout space i
            -- jede Textkette des aktuellen Layouts adressieren ...
            try
               tell every story
                  -- ... und die horizontale Schriftbreite auf 100% setzen
                  set horizontal scale of every paragraph to 100
               end tell
            end try
         end tell
      end repeat
   end tell
   -- die Bildschirmanzeige auffrischen
   do updates
   -- Dieser Dialog meldet, dass die Aktion beendet ist
   display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end tell
---
Getestet mit QXP 6.52 und 7.31 unter Mac OS 10.4.11 (Tiger) und mit 7.31 unter 10.5.2 (Leopard).

Achtung: Mit QuarkXPress 7.x ist es möglich, nicht nur die Position der Boxen, sondern auch den Inhalt zu sperren. Falls in Deinen Dokumenten solche Sperrungen vorkommen, müsste das Script erweitert werden: Bei jeder Textkette die Sperrung testen, falls notwendig aufheben, die Schriftbreite auf 100% setzen, die Sperrung wieder aktivieren.

Oder wäre es vielleicht dringlicher, auch die Boxen der Musterseiten zu erfassen? Bitte sage mir Bescheid.

Gruss, Hans


als Antwort auf: [#422410]

QXP: Gesamter Text auf Schriftbreite 100%

Anonym
Beiträge gesamt: 22827

25. Apr 2008, 10:43
Beitrag # 3 von 7
Beitrag ID: #422412
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen, vielen Dank für das exzellente Script. Ich bin begeistert, denn es bedeutet für mich wirklich eine Arbeitserleichterung.

Das man in QXP 7 auch den Inhalt von Textrahmen sperren kann, habe ich noch nicht gewusst. Frage: Wäre es denn möglich, um letzteren Fall mit einzubeziehen, das Script so zu erweitern, dass man eine Abfrage einbaut und mit dieser entscheidet, ob gesperrter Text berücksichtigt werden soll oder nicht?

Danke und viele Grüße aus Düsseldorf,
Marcus


als Antwort auf: [#422410]

QXP: Gesamter Text auf Schriftbreite 100%

Hans Haesler
  
Beiträge gesamt: 5826

25. Apr 2008, 12:55
Beitrag # 4 von 7
Beitrag ID: #422413
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marcus,

bitteschön.

Doch, doch: Eine Textkette kann gesperrt werden. Menü "Objekt", Artikel "Sperren" -> "Textkette". Der Text kann noch ausgewählt und kopiert aber nicht verändert werden. Dasselbe gilt für ein Bild. Auswählen und kopieren geht, aber veschieben innerhalb der Box oder die Bildgrösse ändern geht nicht.

Ja, es ist möglich, eine Abfrage in eine spezielle QXP-7-Version des Scripts einzubauen und dann je nach Entscheidung des Anwenders, die entsprechende Aktionen auszulösen.

Doch vielleicht wird es Samstag, bevor ich Zeit dafür finden werde.

Gruss, Hans


als Antwort auf: [#422410]

QXP: Gesamter Text auf Schriftbreite 100%

Hans Haesler
  
Beiträge gesamt: 5826

26. Apr 2008, 08:56
Beitrag # 5 von 7
Beitrag ID: #422414
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marcus,

und hier ist das Script. Zu Beginn wird die Programm-Version festggestellt. Wenn die Nummer nicht mit 7 beginnt, können keine gesperrten Textketten vorkommen und es werden sofort alle Stories aller Layouts behandelt.

Wenn QXP 7.x läuft, dann wird als erstes geprüft, ob überhaupt gesperrte Textketten vorhanden sind. Und nur dann wird der Dialog gezeigt, mit welchem der Anwender entscheiden kann, welche Aktion ausgeführt werden soll.

Das Entsperren kann nicht auf einen Rutsch durchgeführt werden. Deshalb macht das Script eine Schleife durch die Layouts und erstellt bei jedem eine Liste der Sperrungs-Option. Falls diese ein 'true' enthält, wird eine Schleife durch die Liste gemacht und dann gezielt die entsprechende Story entsperrt. Dadurch wird der Ablauf gewaltig beschleunigt.

Für das Auf-100-Prozent-Setzen wird keine Schleife mehr benötigt. Der Befehl wirkt auf alle Textketten aller Layouts.

Eine weitere, spürbare Beschleunigung bringt der Einsatz der 'do script'-Methode.
Code
(* 
Schriftbreite100_03d
Dieses Script (für QXP 6.52 und 7.31) setzt die horizontale
Schriftbreite aller Texte aller Layouts auf 100%.
(Wenn QXP 7.31, kann per Dialog entschieden werden,
ob auch gesperrte Textketten zu behandeln sind)
*)

tell application "QuarkXPress Passport"
  activate
  -- eine eventuelle Auswahl aufheben
  set selection to null
  -- die Version feststellen
  set versStr to version as string
  set bigVers to (character 1 of versStr) as integer
 
  if bigVers is 7 then
    set allLocks to do script {getLocked}
    if allLocks contains true then
      set bR to button returned of (display dialog ¬
        "Gesperrte Textketten behandeln?" buttons ¬
        {" Abbrechen ", "Nein", "JA"} default button 3 with icon 1)
      if bR is " Abbrechen " then
        error number -128
      else if bR is "Nein" then
        do script {resetNormal}
      else if bR is "JA" then
        do script {resetLocked}
      end if
    else
      do script {resetNormal}
    end if
  else
    do script {resetNormal}
  end if
  -- die Bildschirmanzeige auffrischen
  do updates
  -- dieser Dialog meldet, dass die Aktion beendet ist
  display dialog "Fertig." buttons ¬
    "OK" default button 1 with icon 1 giving up after 1
end tell

script getLocked
  tell application "QuarkXPress Passport"
    -- eine Liste aller Sperrungsoptionen aufstellen
    tell project 1
      set allLocks to content lock of every story of every layout space
    end tell
  end tell
  return allLocks
end script

script resetNormal
  tell application "QuarkXPress Passport"
    -- das Projekt ansprechen
    tell project 1
      try
        -- jede Textkette aller Layouts adressieren ...
        tell every story of every layout space
          -- ... und die horizontale Schriftbreite auf 100% setzen
          set horizontal scale of every paragraph to 100
        end tell
      end try
    end tell
  end tell
end script

script resetLocked
  tell application "QuarkXPress Passport"
    -- das Projekt ansprechen
    tell project 1
      -- eine Schleife durch die Layouts
      repeat with i from 1 to count of layout spaces
        tell layout space i
          -- eine Liste der Sperrungen aufstellen
          set lockList to content lock of every story
          -- wenn diese Liste ein 'true' enthält ...
          if lockList contains true then
            -- ... eine Schleife durch die Liste und die 
            -- entsprechende(n) Textkette(n) entsperren
            repeat with j from 1 to count of lockList
              if item j of lockList is true then
                tell story j
                  try
                    set {format lock, content lock} to {false, false}
                  end try
                end tell
              end if
            end repeat
          end if
        end tell
      end repeat
      try
        -- jede Textkette aller Layouts adressieren ...
        tell every story of every layout space
          -- ... und die horizontale Schriftbreite auf 100% setzen
          set horizontal scale of every paragraph to 100
        end tell
      end try
    end tell
  end tell
end script

Dieses Script funktioniert also mit QXP 6.52 und QXP 7.31. Und sogar unter Leopard.

Gruss, Hans


als Antwort auf: [#422410]

QXP: Gesamter Text auf Schriftbreite 100%

Anonym
Beiträge gesamt: 22827

28. Apr 2008, 15:46
Beitrag # 6 von 7
Beitrag ID: #422415
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

mein Kompliment und vielen herzlichen Dank. Alles läuft bestens.

Bis bald und beste Grüße aus Düsseldorf,
Marcus


als Antwort auf: [#422410]

QXP: Gesamter Text auf Schriftbreite 100%

Hans Haesler
  
Beiträge gesamt: 5826

28. Apr 2008, 18:26
Beitrag # 7 von 7
Beitrag ID: #422416
Bewertung:
(1419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marcus,

bitteschön.

Einen hab' ich noch... :-) Ich habe mir überlegt, dass es korrekter wäre, wenn gesperrte Textketten nach dem Durchlauf des Scripts wieder gesperrt würden. Dazu muss der Code etwas umgestellt werden.

Weil in der Schleife durch die Layouts die Liste der gesperrten Boxen bekannt ist, sollte man dies ausnutzen und das Zurücksetzen der Schriftbreite auf 100% sofort vornehmen. Dass dies nicht mehr global für alle Layouts auf einen Schlag geschieht, hat nur eine geringfügige Auswirkung auf die Ausführungsdauer.
Code
(* 
Schriftbreite100_04d
Dieses Script (für QXP 6.52 und 7.31) setzt die horizontale
Schriftbreite aller Texte aller Layouts auf 100%.
(Wenn QXP 7.31, kann per Dialog entschieden werden,
ob auch gesperrte Textketten zu behandeln sind)
*)

tell application "QuarkXPress Passport"
  activate
  -- eine eventuelle Auswahl aufheben
  set selection to null
  -- die Version feststellen
  set versStr to version as string
  set bigVers to (character 1 of versStr) as integer
 
  if bigVers is 7 then
    set allLocks to do script {getLocked}
    if allLocks contains true then
      set bR to button returned of (display dialog ¬
        "Gesperrte Textketten behandeln?" buttons ¬
        {" Abbrechen ", "Nein", "JA"} default button 3 with icon 1)
      if bR is " Abbrechen " then
        error number -128
      else if bR is "Nein" then
        do script {resetNormal}
      else if bR is "JA" then
        do script {resetLocked}
      end if
    else
      do script {resetNormal}
    end if
  else
    do script {resetNormal}
  end if
  -- die Bildschirmanzeige auffrischen
  do updates
  -- dieser Dialog meldet, dass die Aktion beendet ist
  display dialog "Fertig." buttons ¬
    "OK" default button 1 with icon 1 giving up after 1
end tell

script getLocked
  tell application "QuarkXPress Passport"
    -- eine Liste aller Sperrungsoptionen aufstellen
    tell project 1
      set allLocks to content lock of every story of every layout space
    end tell
  end tell
  return allLocks
end script

script resetNormal
  tell application "QuarkXPress Passport"
    -- das Projekt ansprechen
    tell project 1
      try
        -- jede Textkette aller Layouts adressieren ...
        tell every story of every layout space
          -- ... und die horizontale Schriftbreite auf 100% setzen
          set horizontal scale of every paragraph to 100
        end tell
      end try
    end tell
  end tell
end script

script resetLocked
  tell application "QuarkXPress Passport"
    -- das Projekt ansprechen
    tell project 1
      -- eine Schleife durch die Layouts
      repeat with i from 1 to count of layout spaces
        tell layout space i
          -- eine Liste der Sperrungen aufstellen
          set lockList to format lock of every story
          -- wenn diese Liste ein 'true' enthält ...
          if lockList contains true then
            -- ... eine Schleife durch die Liste und die
            -- entsprechende(n) Textkette(n) entsperren
            repeat with j from 1 to count of lockList
              if item j of lockList is true then
                tell story j
                  try
                    set format lock to false
                  end try
                end tell
              end if
            end repeat
          end if
          try
            -- jede Textkette des aktuellen Layouts adressieren ...
            tell every story
              -- ... und die horizontale Schriftbreite auf 100% setzen
              set horizontal scale of every paragraph to 100
            end tell
          end try
          -- wenn die Gesperrt-Liste ein 'true' enthält ...
          if lockList contains true then
            -- ... eine Schleife durch die Liste und die
            -- entsprechende(n) Textkette(n) wieder sperren
            repeat with j from 1 to count of lockList
              if item j of lockList is true then
                tell story j
                  try
                    set format lock to true
                  end try
                end tell
              end if
            end repeat
          end if
        end tell
      end repeat
    end tell
  end tell
end script

Per Script kann die Sperrung von Inhalt und Formatierung separat vorgenommen werden. Dass nur der Inhalt gesperrt ist, wird kaum vorkommen.  Aber es ist möglich. Weitere Erklärungen dazu im Thema "QXP 7.x: Textketten sperren"
http://www.page-online.de/forum/viewthread/3523/

Gruss, Hans


als Antwort auf: [#422410]
X