Hallo, ich bin einmal wieder auf der Suche nach einem Script was mir folgende Arbeiten abnimmt: Ein XPress Dokument wird ausgelesen und von den geladenen Bilder wird mir eine SimpleText Datei generiert. Anhand dieser Liste möchte ich gerne Bilder suchen lassen (die nicht in meiner Bilddatenbank sind) sondern auf verschiedenen Volumes verteilt sind. Ist so etwas möglich? Danke Uwe
das Erstellen der Liste ist relativ einfach. Das Suchen per Script sollte möglich sein, habe ich aber noch nie gemacht. Ich kann mir aber vorstellen, dass die Suche sehr zeitaufwendig sein kann, je nach Anzahl der gemounteten Volumes und der Ordner, welche darin enthalten sind.
Das Problem dabei ist, dass ein Script in jeden Ordner schauen wird. Im Gegensatz zum manuellen Suchen, wo der Anwender gezielter vorgehen kann, indem er Ordner, von welchen er weiss, dass die Bilder nicht dort stecken können, gar nicht aufmacht.
Bevor ich ans Entwickeln gehe, brauche ich noch verschiedene Angaben: 1. Version von QuarkXPress. 2. Version des Mac OS. 3. Wieviele Bilder sind so in einem typischen Dokument? 4. Trifft der Status "fehlt" für alle Bilder im XPress-Dokument zu, oder hat es welche, die "OK" sind? 5. Was soll mit "gefundenen" Bildern getan werden?
1. XPress Version 4 2. MAC OS X (10.3.1), bei Problemen auch noch OS 9 möglich 3. ca. 10 Bilder pro Dok 4. alle Bilder sind fehlend 5. Das Ergebniss soll entweder eine Textdatei oder eine Art Fenster sein, woraus ich sehen kann in welchen Ordnern die Bestandteile zu finden sind Bei Namensgleichheit alle Bestandteile auflisten.
noch mehr Fragen, damit die Suche möglichst eingeschränkt werden kann:
6. Muss nur in den Volumes gesucht werden? 7. Wieviele sind es normalerweise? 8. Oder muss auch die Harddisk mit einbezogen werden? 9. Wieviele Partitionen hat die Harddisk? 10. Kommt es auch vor, dass eine CD (oder sonst ein externes Medium) eingelegt ist?
ich habe jetzt ein Script (unter Mac OS 9), welches funktioniert.
Aber meine Befürchtungen sind bestätigt: es würde viel zu lange dauern, bis auch nur ein Bild lokalisiert ist. Denn ich nehme an, dass auf den Volumes viele Ordner untergebracht sind.
Ich muss deshalb die Sache anders angehen und versuchen, mit Perl (und so) eine Lösung zu finden. Doch dies wird dauern, weil ich mich zuerst schlau machen muss. Ich werde mich wieder melden.
hier ist eine provisorische Lösung. Leider nicht vollautomatisch. Leider etwas umständlich.
1. Ein XPress-Dokument öffnen und das folgende Script abspielen. 2. Es erzeugt im Ordner des eingeloggten Benutzers die Textdatei "Dokumentname.txt" mit den Namen der Bilder. 3. Später diese Datei öffnen, den ersten Namen auswählen, mit Befehl-C kopieren. 4. In den Finder wechseln und mit Befehl-F den Suchen-Dialog aufrufen. 5. Im Menü "Suchen" den Artikel "An bestimmten Orten" wählen. 6. Die Checkboxen der gewünschten Volumes aktivieren. 7. Durch Klick auf den "—" Button die Eigenschaften auf eine Such-Zeile reduzieren. 8. Die Artikel "Name" und "ist" einstellen. 9. Den Namen in das Feld einsetzen und auf "Suchen" klicken.
Das Suchergebnis erscheint recht schnell. Der übergeordnete Ordner wird angegeben. Wenn man die Zeile auswählt, wird unten der ganze Pfad angezeigt.
Leider kann dieser Such-Dialog nicht per Script angesprochen werden. Man kann ihn deshalb nicht im Batchbetrieb mit den Namen füttern, sondern muss dies manuell und Name um Name vornehmen. Aber es ist die weitaus schnellste Lösung, welche ich im Moment anzubieten habe. --- on checkDoc() tell application "QuarkXPress 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 end if end tell end checkDoc
on makeList() tell document 1 of application "QuarkXPress 4.11" set imgName to "" set AppleScript's text item delimiters to {":"} set imgList to {} set docName to name if (count of docName) > 27 then set docName to text 1 thru 27 of docName repeat with i from 1 to count of picture boxes try tell picture box i tell image 1 if bounds is not {0, 0, 0, 0} then set filePath to ((get file path) as string) if filePath is not "null" and filePath is not "no disk file" then set imgName to last text item of filePath if imgName is not in imgList then set end of imgList to imgName end if end if end if end tell end tell end try end repeat end tell if imgList = {} then set AppleScript's text item delimiters to {""} display dialog "Dieses Dokument enthält keine Bilder." buttons "OK" default button 1 with icon 0 error number -128 end if if (count of imgList) > 1 then quicksort(imgList, 1, length of imgList) end if set AppleScript's text item delimiters to return set aString to text items of imgList as text set AppleScript's text item delimiters to {""} writeList(docName, aString) end makeList
on writeList(docName, aString) set imgFile to ((path to "cusr") as Unicode text) & docName & ".txt" try open for access file imgFile with write permission set eof of file imgFile to 0 write aString to file imgFile close access file imgFile on error errMsg try close access file imgFile end try end try tell application "QuarkXPress 4.11" display dialog "Fertig." buttons "OK" default button 1 with icon 1 end tell end writeList
on quicksort(a, L, R) set i to L set n to R set aRef to item L of a as text repeat while i < n repeat while (aRef < item n of a) and (i < n) set n to n - 1 end repeat if n is not i then set item i of a to item n of a set i to i + 1 end if repeat while (aRef > item i of a) and (i < n) set i to i + 1 end repeat if n is not i then set item n of a to item i of a set n to n - 1 end if end repeat set item n of a to aRef if L < n then quicksort(a, L, n - 1) end if if R > i then quicksort(a, i + 1, R) end if return a end quicksort
--main - - - - - checkDoc() makeList() --- Wenn Du es vorziehst, kann die Liste der Namen auch in ein neues XPress-Dokument kopiert werden. Denkbar ist auch ein Droplet, auf welches mehrere XPress-Dokumente gezogen werden können.
Hallo Hans, vielen Dank für die Hilfe. Ich habe es ausprobiert und es funktioniert, wenngleich noch viel "Handarbeit" zu erledigen ist. Aber man ist ja über jede Arbeitserleichterung dankbar.
wenn ich dieses script unter os 9.2.2 und qxp 5.01 einsetzten will was muß ich da ändern. ich habe ja kein homeverzeichniss wie unter osx. reicht da nur der pfad zum ablegen der txt-datei.
genau: es reicht den Pfad im Handler 'on writeList(docName, aString)' zu ändern. Statt das Verzeichnis des aktuellen Benutzers anzugeben … … kannst Du mit dem Pfad zur Harddisk beginnen … … wobei '((path to startup disk) as string)' den Namen der Harddisk wiedergibt.
Wenn Du noch einen oder mehrere Ordner einflechten willst, geschieht dies so: Die Ordnernamen musst Du durch existierende ersetzen.
Wie vorher schon erklärt, werden die Namen der Bilder des ersten QuarkXPress-Dokumentes in eine Textdatei geschrieben, welche den Namen des XPress-Dokumentes bekommt, plus das Suffix ".txt".
Je nach Aufgabe kann es aber praktischer sein, wenn die Liste der Bilder in ein neues XPress-Dokument kopiert wird und man sie sofort ausdrucken kann. Ich werde Dir ein Script für QuarkXPress 5.01 schicken, welches erlaubt, entweder nur die Namen der Bilder oder mitsamt dem ganzen Pfad in eine Textbox zu kopieren.
Hallo Hans, was für einen Befehl muß ich denn eingeben, wenn ich das Ergebniss in ein Verzeichniss auf einem Servervolume sichern will. Damit es für jeden sichtbar ist, und nicht auf in dem Home-Verzeichniss des Users?
im Handler 'on writeList(docName, aString)' musst Du die Zeile … … in welcher der Pfad zur Textdatei zusammengesetzt wird, ändern.
Anstelle von '((path to "cusr") as Unicode text)' musst Du den Pfad zum Zielordner des Volumes angeben. Zu Beginn und zum Schluss ein Anführungszeichen. Als Abschluss der Namen des Volumes und der Ordner einen Doppelpunkt setzen: Damit ist der Pfad "hard-wired" eingetragen. Diese Lösung wird man wählen, wenn der Zielordner immer derselbe ist. Man könnte per Script testen, ob der Ordner vorhanden ist. Wenn nicht, eine Meldung zeigen und entweder die Ausführung abbrechen oder den Anwender auffordern einen Zielordner zu wählen. In diesem Fall muss aber der Ordnerpfad beim Zusammensetzen des Pfades zur Textdatei als Variable definiert sein.
Damit hat man Anwenderfreundlichkeit und Souplesse in einem: der Zielordner kann flexibel gewählt werden, ohne dass das Script editiert werden muss. Falls man den Ordner wechseln möchte, muss man den bisherigen löschen, verschieben oder umbenennen. Erst dann fordert das Script auf, einen Ordner zu wählen.
Wenn Du an einer solchen Lösung interessiert sein solltest, dann könnte ich sie Dir zustellen.