Forenindex » Programmierung/Entwicklung » AppleScript » Automatische Numerierung auf Musterseiten

Automatische Numerierung auf Musterseiten

Hans Haesler
  
Beiträge gesamt: 5826

8. Apr 2003, 09:27
Bewertung:

gelesen: 872

Beitrag als Lesezeichen
Per Script Boxen auf Musterseiten zu erzeugen ist nicht so schwierig. Man muss nur die Hierarchie beachten:
'tell application "QuarkXPress 4.11" / tell master document 1 / tell page 1 of spread 1'

Wichtig: beim Ablauf eines Scripts nie die Musterseite anzeigen. Das Resultat wäre: eine Fehlermeldung oder ein Absturz oder ein
Fehlverhalten, wenn man wieder im Dokument ist.

Die Aufgabe: ein neues, doppelseitiges Dokument anlegen und auf der linken und rechten Seite von "A-Muster A" automatische Seiten-
zahlen erzeugen. Das folgende Script kann ausgebaut werden. Es ist bewusst einfach gehalten, damit der Code nicht zu lange wird.
Aus dem gleichen Grund enthält es keine Kommentare. Deshalb zuerst einige Erklärungen.

Zu Beginn wird das Seitenformat wird mit den Variablen 'pWidth' und 'pHeight' bestimmt. Der Vorteil des Gebrauchs von Variablen:
Für ein neues Format muss man nur diese zwei Werte ändern und nicht überall im Script nach der Breite und der Höhe fahnden.

Zwei weitere Variablen werden festgelegt: 1. Der Pfad zum Ordner "Scripting Additions" inklusive Dateiname. 2. Eine Textkette,
welche den Kürzel "Befehl-3" im XPress-Tags-Format bildet. Anschliessend wird versucht, diesen String in die Datei zu schreiben.

Dann wird das 'default document' (das Vorgabedokument) vorbereitet. Es könnten noch mehr Attribute festgelegt werden. Hier sind
es nur die notwendigsten: die Masseinheiten, Doppelseiten, keine automatische Textbox und die Breite und Höhe.

Die Checkbox "Einschließlich Stilvorlagen" des Dialogs "Text laden" wird durch 'set import styles to true' aktiviert. Der Anwender
bekommt diesen Dialog nicht zu sehen. Aber weil die automatische Seitennummer in der Datei "AutoNumber.xtg" im XPress-Tags-Format
ist, muss sichergestellt werden, dass die Checkbox aktiviert ist, damit die Umwandlung vorgenommen wird.

Ein neues Dokument wird erzeugt. Mit 'tell page 1 of spread 1' wird die linke Musterseite von "A-Muster A" adressiert. Eine Textbox
wird erzeugt mit den 'bounds', vier Werte der Positionen der Ränder: {pHeight - 11, 15, pHeight - 5, 45}. Die Werte 1 und 3 sind die
vertikalen Parameter. Ausgehend von der Seitenhöhe werden einmal 11 und einmal 5 mm abgezogen. Dies ergibt eine Boxenhöhe von 6 mm.
Horizontal ist es einfacher: der zweite Wert ist '15' und der vierte '45'. Die Box ist also 30 mm breit.

Anschliessend wird die am Anfang erzeugte Textkette mit 'set properties to {contents:tagsPath as alias...' geladen. Die weiteren
Attribute betreffen die Schriftgrösse (= size:11), die Schrift (= font:"Helvetica") und die Ausrichtung nach links (= justification:
left justified).

Dann wiederholt sich das Ganze für die rechte Seite (= 'tell page 2 of spread 1'). Zwei Unterschiede: für die horizontalen Werte der
Box wird auch die Seitenbreite benötigt, wenn man die Position der Pagina jene der linken Seite spiegeln soll. Und die Ausrichtung
ist logischerweise nach rechts (= justification:right justified).
---
set pWidth to 210
set pHeight to 297
set tagsPath to (path to scripting additions folder as string) & "AutoNumber.xtg"
set aStr to "<\\3>"
try
  open for access file tagsPath with write permission
  set eof of file tagsPath to 0
  write aStr to file tagsPath
  close access file tagsPath
on error
  try
    close access file tagsPath
  end try
end try

tell application "QuarkXPress 4.11"
  activate
  tell default document 1
    set properties to &not;
      {horizontal measures, vertical measures &not;
        , facing pages:true, automatic text box:false &not;
        , page width:pWidth, page height:pHeight}
  end tell
  set import styles to true
  make document at beginning
  tell master document 1
    tell page 1 of spread 1
      make text box at beginning with properties &not;
        {bounds:{pHeight - 11, 15, pHeight - 5, 45}}
      tell text box 1
        tell story 1
          tell paragraph 1
            set properties to {contents:tagsPath as alias, size:11 &not;
              , font:"Helvetica", justification:left justified}
          end tell
        end tell
      end tell
    end tell
    tell page 2 of spread 1
      make text box at beginning with properties &not;
        {bounds:{pHeight - 11, pWidth - 45, pHeight - 5, pWidth - 15}}
      tell text box 1
        tell story 1
          tell paragraph 1
            set properties to {contents:tagsPath as alias, size:11 &not;
              , font:"Helvetica", justification:right justified}
          end tell
        end tell
      end tell
    end tell
  end tell
end tell
---
Man könnte natürlich auch mit einem Dialog die Grösse der Seite erhalten. Vorteil: das Script muss nicht verändert werden. Aber das
gibt erheblich Mehraufwand für den Scripter: die Eingabe muss getestet werden. Sind es zwei Werte? Sind es Zahlen? Liegen sie im
Bereich des Möglichen? Wenn alles stimmt, okay. Sonst muss man den Anwender informieren.

Übrigens: mit 'tell page 1 of spread 2' und 'tell page 2 of spread 2' werden die linken und rechten Seiten von "B-Muster B" adressiert.
Mit QXP 5.01 funktioniert das auch (im Gegensatz zum Erzeugen von Hilfslinien). Aber die Boxen sind nicht sofort sichtbar. Man muss
entweder die Musterseite zuweisen (manuell oder per Script) oder die Musterseite anzeigen und wieder zurück ins Dokument schalten.

Hans Haesler, hsa@ringier.ch