Forenindex » Programmierung/Entwicklung » AppleScript » QuarkXPress 4.11 Bildbox

QuarkXPress 4.11 Bildbox

Gast
Beiträge gesamt:

20. Feb 2003, 17:06
Bewertung:

gelesen: 1936

Beitrag als Lesezeichen
Das deutsche Update ist seit einigen Wochen ebenfalls verfügbar.

<A HREF="http://www.adobe.com/support/downloads/detail.jsp?ftpID=1476" TARGET="_blank"><b>Indesign 2.01, Macintosh</b></A>

<A HREF="http://www.adobe.com/support/downloads/detail.jsp?ftpID=1475" TARGET="_blank"><b>Indesign 2.01, Windows</b></A>

QuarkXPress 4.11 Bildbox

Gast
Beiträge gesamt:

19. Feb 2003, 19:36
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
<pre>
tell application "QuarkXPress Passport&#153; 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 &not;
{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.

Über Hilfe würde ich mich freuen.

Gruss
Christoph



</pre>

QuarkXPress 4.11 Bildbox

Hans Haesler
  
Beiträge gesamt: 5826

19. Feb 2003, 23:06
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
Hallo Christoph,

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:
Code
......, shade:"0%", name, runaround:none runaround} 

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>

QuarkXPress 4.11 Bildbox

Gast
Beiträge gesamt:

19. Feb 2003, 23:39
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
Vielen Dank, Hans. Ist ja mal wieder peinlich.

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)

Gruss
Christoph

QuarkXPress 4.11 Bildbox

Hans Haesler
  
Beiträge gesamt: 5826

20. Feb 2003, 11:06
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
Hallo Christoph,

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&#153; 4.11"
 activate
 if (exists of document 1) is false then
  display dialog "Öffne zuerst ein XPress-Dokument." buttons &not;
   "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 &not;
  "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 & &not;
      "\" 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 & &not;
     "\"." buttons "OK" default button 1 with icon 2
   end if
  end tell
 end if
end tell

on collectFiles(pathList)
 tell application "QuarkXPress Passport&#153; 4.11"
  set targetFolder to &not;
   (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) &not;
    to folder targetFolder with replacing
  end try
 end repeat
 tell application "QuarkXPress Passport&#153; 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>

QuarkXPress 4.11 Bildbox

Gast
Beiträge gesamt:

20. Feb 2003, 13:08
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
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?

Gruss und nochmal dankeschön
Christoph

QuarkXPress 4.11 Bildbox

Hans Haesler
  
Beiträge gesamt: 5826

20. Feb 2003, 13:42
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
Hallo Christoph,

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>

QuarkXPress 4.11 Bildbox

Hans Haesler
  
Beiträge gesamt: 5826

20. Feb 2003, 17:06
Bewertung:

gelesen: 1935

Beitrag als Lesezeichen
Hallo Christoph,

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&#153; 4.11"
    activate
    if (exists of document 1) is false then
      display dialog "Öffne zuerst ein XPress-Dokument." buttons &not;
        "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&#153; 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 &not;
        {vertical measures, horizontal measures &not;
          , 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 &not;
        "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&#153; 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 &not;
        {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&#153; 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 &not;
          {vertical measure:vMes, horizontal measure:hMes, item spread coords:false}
      else if isc = 2 then
        set properties to &not;
          {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&#153; 4.11"
    display dialog "Fertig.

" & markNum & picBox buttons "OK" default button 1 with icon 1
  end tell
end infUser

--main - - - - -
checkDoc()
initVars()
markBoxes()
reStore()
infUser()
---

Hans Haesler, <a href="mailto:hsa@ringier.ch">hsa@ringier.ch</a>