<pre> tell application "QuarkXPress Passport™ 4.11" set thelist to {"box1", "box2", "box3", "box4"} set userChoice to (choose from list thelist with prompt "make a choice" without multiple selections allowed) tell document 1 tell current page make picture box at beginning with properties ¬ {bounds:{"5mm ", "5mm", "40mm", "40mm"}, color:"none", shade:"0%", name, runaround:"none runaround"} end tell end tell end tell ------ Hallo, mit diesem Script möchte ich einen Bildrahmen mit bestimmten Eigenschaften erzeugen. Aus einer Liste läßt sich der Name für diesen Bildrahmen wählen. Diese Namen benötige ich für spätere Auswertungen.
Nun das Problem: Die Variable userChoise wird nicht richtig verarbeitet. Ausserdem funktioniert runaround ebenfalls nicht.
Sicherlich eine reine Syntaxfrage. Aber wo liegt das Problem.
2. Frage: Für Ausgabe sammeln. Nur Bilder sammeln, die mit einem bestimmten Namen versehen wurden. Wie geht das.
das Script funktioniert nicht wie gewünscht, weil die Variable 'userChoice' mal mit "ce" und mal mit "se" getippt worden ist. Und "none runaround" ist eine Konstante und kein String (d.h. keine Textkette) und darf deshalb nicht mit An- und Abführungszeichen versehen werden: Achtung: Du solltest unbedingt einen Test einbauen, welcher verhindert, dass die Box erzeugt wird, falls der Anwender einen Namen auswählt und dann auf "Abbruch" klickt oder auch nur auf "Abbruch" ohne Auswahl. In beiden Fällen enthält 'userChoice' den Wert 'false' und dies ergibt eine Fehlermeldung, wenn die Box benannt werden soll.
Ein simpler if-then-Test, welcher um den 'tell document 1'-Block gelegt wird: --- if userChoice is not false then tell document 1 . . . . . . end tell end if ---
Die zweite Frage ist nicht so einfach zu beantworten. Ich werde versuchen, eine Kurzfassung zu veröffentlichen. Aber dazu brauche ich nähere Angaben. Was heisst "bestimmt"? Ist damit nur ein Name gemeint? Oder mehrere? Oder gar nur ein Bestandteil der Namen? Oder etwa der Name der Bildbox? Sind Feinbilder geladen? Oder Layoutbilder? Ist jedes Bild eine einzige Datei? Oder sind auch vorseparierte DCS-Dateien (C-, M-, Y-, K- und die Master-Datei) darunter?
Bitte schildere mir die Ausgangslage. Hier oder mit einem privaten Mail.
Hans Haesler, <a href="mailto:hsa@ringier.ch">hsa@ringier.ch</a>
Zur Zweiten Frage: Ich möchte Für Ausgabe sammeln. Es sollen nur Bilder gesammelt werden, deren Boxname z.B. "Box1" hat. Also es soll ebenfalls eine Auswahlliste gezeigt werden. thelist to {"box1", "box2", "box3", "box4"} Die Bildboxen beinhalten ausschliesslich Feindaten. Weiterhin soll ein Zielverzeichnis angegeben werden können. Bei evtl. doppelten Dateinamen soll eine Warnung gezeigt werden. (evtl. neue Namensgebung anbieten)
hier ein erster Entwurf. Er erhält keine Kommentare, damit die Sache nicht zu lang wird. Aber der Code ist ja eigentlich selbst-erklärend... Trotzdem einige Hinweise:
Die Antwort aus 'choose from list' ist eine Liste und wird zum String konvertiert. Deshalb muss "false" auch als String eingesetzt werden.
Das Script geht die Bildboxen der Reihe nach durch und wenn der Name übereinstimmt und ein Bild vorhanden ist, welches einen Pfad hat, dann wird dieser in die Liste 'pathList' aufgenommen, falls er noch nicht darin vorhanden ist.
Leider verhindert ein Bug, mit der Formulierung "every picture box whose name is boxName" das Erstellen der Liste auf einen Schlag und man muss die zuverlässigere, aber langsamere Repeat-Schleife einsetzen.
Wenn die Liste ein Element oder mehr enthält, wird der Handler 'collectFiles()' aufgerufen, der Anwender wählt den Zielordner und der "Finder" kopiert die Bilddateien.
--- tell application "QuarkXPress Passport™ 4.11" activate if (exists of document 1) is false then display dialog "Öffne zuerst ein XPress-Dokument." buttons ¬ "OK" default button 1 with icon 2 error number -128 else if current page is null then display dialog "Du bist auf einer Musterseite.
Zuerst ins Dokument wechseln." buttons "OK" default button 1 with icon 0 error number -128 end if end if set boxList to {"box1", "box2", "box3", "box4"} set boxName to (choose from list boxList with prompt ¬ "Select a box name" without multiple selections allowed) as string if boxName is not "false" then set pathList to {} tell document 1 if exists picture box boxName then repeat with i from 1 to count picture boxes tell picture box i if name = boxName then if bounds of image 1 is not {0, 0, 0, 0} then set filePath to (get file path of image 1) as string if filePath is not "null" then if filePath is not in pathList then set end of pathList to filePath end if end if end if end if end tell end repeat if pathList is not {} then my collectFiles(pathList) else display dialog "Die Boxen \"" & boxName & ¬ "\" sind leer." buttons "OK" default button 1 with icon 2 end if else display dialog "Dieses Dokument enthält keine Box mit dem Namen \"" & boxName & ¬ "\"." buttons "OK" default button 1 with icon 2 end if end tell end if end tell
on collectFiles(pathList) tell application "QuarkXPress Passport™ 4.11" set targetFolder to ¬ (choose folder with prompt "Select a folder for the image files") end tell tell application "Finder" to activate repeat with i from 1 to count of pathList try tell application "Finder" to duplicate file (item i of pathList) ¬ to folder targetFolder with replacing end try end repeat tell application "QuarkXPress Passport™ 4.11" activate display dialog "Fertig." buttons "OK" default button 1 with icon 1 end tell end collectFiles ---
Nun versuche mal, dies zum Laufen zu bringen. Später kann man, wenn überhaupt notwendig, eine Duplikat-Behandlung einfügen.
Übrigens: die Liste mit den Box-Namen könnte man auch dynamisch erstellen. Dann könnte das Script ohne Anpassung der "hard-gecodeten" Liste universell eingesetzt werden.
Hans Haesler, <a href="mailto:hsa@ringier.ch">hsa@ringier.ch</a>
Vielen Dank, Hans. Habs am Laufen, super. Funktioniert. Leider gabs einmal einen Systemabsturz "Fehler 10". Es handelte sich dabei lediglich um ein 1-seitiges Dokument mit 3 Bildboxen. Es läßt sich jetzt auch garnicht nachvollziehen, was da passiert ist.
Abgesehen davon, hätte ich noch ne Frage: Ich möchte alle Bildboxen, die keinen Namen haben markieren. Z.B. ein kleines farbiges Quadrat (Eigenschaften: Ausgabe unterdrücken; Umfliessen none; BoxName) Der BoxName soll wieder für das Entfernen verwendt werden.
Oder hast Du noch ne andere Idee, wie man den QXP Benutzer dazu bewegen kann, nur mit benannten Bildboxen zu arbeiten? Derzeit verwende ich das OSA Menu. Aber man tut sich eben leichter, aus der Werkzeugpalette das Bildboxwerkzeug zu verwenden. Läßt sich Applescript auch dort hinterelegen (mit Button) oder wird hier eine andere Technologie eingestzt?
bitte schön. Tut mir leid, wegen dem Absturz. Kann mal vorkommen, ohne dass man weiss warum. Alle unser Zeitschriften benutzen nach der Produktion jeder Ausgabe ein Droplet von mir zum Sammeln aller Bilder (zur Archivierung). Doch ich habe noch nie von einem Absturz gehört.
Aber: wichtig ist, dass man nach dem Neustart als erstes den Programm-Ordner von QuarkXPress öffnet, eine eventuelle temporäre XPress-Datei entfernt und die Präferenzen-Datei sowie die Wörterbuch-Dateien durch frische ersetzt, welche man in einem SOS-Ordner bereithält.
Diese Dateien können beschädigt sein und weitere Abstürze verursachen.
Die beste und schnellste Art, um Scripts auszuführen ist immer noch die Verwendung des OSA-Menüs. Gut: es gibt einige Ausnahmen, bei welchen kein Geschwindigkeits-Vorteil herausschaut. Aber es ist doch recht praktisch. Alle unsere Layouter starten meine Scripts im OSA-Menü (ausser es handle sich um ein Droplet) und sind begeistert.
Man könnte die Scripts auch mit Tastatur-Kürzeln starten. Doch dies funktionierte nicht so richtig, als ich es das letzte Mal ausprobiert hatte.
Die Werkzeugpalette kann nur durch XTensions erweitert werden. Und da sind wir einfachen Anwender schon etwas überfordert.
Zur Kennzeichnung der namenlosen Boxen werden ich versuchen heute Nachmittag ein Script zu schreiben, wenn ich etwas Zeit dafür finde. Sonst wird es eventuell Freitagabend.
Hans Haesler, <a href="mailto:hsa@ringier.ch">hsa@ringier.ch</a>
hier ist ein funktionierendes Script, welches in einem Dokument sämtliche Bildboxen, welche keinen Namen haben, markiert. Wenn die "fehlbaren" Boxen benannt sind kann das Script nochmals gestartet werden. Es räumt alle Markierungsboxen ab und meldet entweder, dass keine namenlose Boxen vorhanden sind oder markiert jene, welche noch keinen Namen haben.
Übrigens: zum komfortablen Benennen von mehreren Boxen habe ich ein Script geschrieben. Es ist eine Applikation, welche per Doppelklick gestartet wird. Der Anwender muss nur die zu benennenden Boxen eine nach der anderen auswählen und erhält jedesmal einen Dialog, um den Namen einzutragen. Wenn alle Boxen benannt sind, das Programm mit Cmd-Q beenden.
Wenn Du Interesse daran hast, dann sende mir bitte ein Mail. --- global hMes global isc global mes global noNameList global vMes
on checkDoc() set AppleScript's text item delimiters to {""} tell application "QuarkXPress Passport™ 4.11" activate if (exists of document 1) is false then display dialog "Öffne zuerst ein XPress-Dokument." buttons ¬ "OK" default button 1 with icon 2 error number -128 else if current page is null then display dialog "Du bist auf einer Musterseite.
Zuerst ins Dokument wechseln." buttons "OK" default button 1 with icon 0 error number -128 end if end if set numPictBox to 0 tell document 1 set numPictBox to count of picture boxes end tell if numPictBox is 0 then display dialog "Das Dokument hat keine Bildboxen." buttons "OK" default button 1 with icon 0 error number -128 end if end tell end checkDoc
on initVars() tell document 1 of application "QuarkXPress Passport™ 4.11" activate set isc to 0 set mes to 0 set {pROy, pROx} to page rule origin as list if {pROy as real} is not 0 or {pROx as real} is not 0 then set page rule origin to {0, 0} set vMes to vertical measure set hMes to horizontal measure if vMes is not millimeters or hMes is not millimeters then set mes to 1 end if if item spread coords = false then set isc to 1 if isc = 1 and mes = 1 then set properties to ¬ {vertical measures, horizontal measures ¬ , item spread coords:true} else if isc = 0 and mes = 1 then set properties to {vertical measures, horizontal measures} else if isc = 1 and mes = 0 then set item spread coords to true end if set noNameList to "" try delete picture box "kill" end try try set noNameList to object reference of every picture box whose name is "" on error display dialog "Alle Bildboxen haben einen Namen." buttons ¬ "OK" default button 1 with icon 1 error number -128 end try if class of noNameList is not list then set noNameList to {noNameList} end tell end initVars
on markBoxes() tell document 1 of application "QuarkXPress Passport™ 4.11" repeat with aBox in reverse of noNameList tell aBox set {y1, x1, y2, x2} to bounds as list set my2 to (y1 as real) + 10 set mx2 to (x1 as real) + 10 end tell make picture box at before aBox with properties ¬ {bounds:{y1, x1, my2, mx2}, color:"Magenta", shade:100, name:"kill"} end repeat end tell end markBoxes
on reStore() tell document 1 of application "QuarkXPress Passport™ 4.11" if mes = 1 then if isc = 0 then set properties to {vertical measure:vMes, horizontal measure:hMes} else if isc = 1 then set properties to ¬ {vertical measure:vMes, horizontal measure:hMes, item spread coords:false} else if isc = 2 then set properties to ¬ {vertical measure:vMes, horizontal measure:hMes, item spread coords:true} end if else if mes = 0 then if isc = 1 then set item spread coords to false else if isc = 2 then set item spread coords to true end if end if do updates end tell end reStore
on infUser() set picBox to " Boxen markiert." set markNum to count of noNameList if markNum = 1 then set picBox to " Box markiert." tell document 1 of application "QuarkXPress Passport™ 4.11" display dialog "Fertig.
" & markNum & picBox buttons "OK" default button 1 with icon 1 end tell end infUser