AppleScript - Quark XPress
Un dossier technique sur le scripting applicatif de Quark XPress

     

RCI Informatique, Août 2007

 

1 - Automatisation de Quark XPress
 

Le logiciel de mise en pages Quark XPress peut être utilisé de différentes façons :

- Utilisation normale, en utilisant les menus et sous-menus décrits dans la documentation.

- Utilisation normale, avec des fonctionnalités complémentaires apportées par diverses extensions disponibles.

- Intégration avec d'autres applications, en tant qu'ensemble de fonctionnalités scriptables
 

C'est cette dernière approche, l'intégration avec d'autres applications, qui est abordée dans ce document.

 

2 - Application = ensemble de structure de données (les objets "gérés" par l"application) et ensemble d'actions automatisables

 

Un document XPress est constitué d'un ensemble de pages, comportant des "objets" de diverses natures. Entre autres, des blocs texte, des blocs images, des tableaux, des filets, etc.

La documentation "utilisateur" décrit comment agir sur ces objets en utilisant les menus, sous-menus et boîtes de dialogue, en résumé, l'interface-utilisateur.

En programmation "par scripts", on ne "voit" plus les objets XPress de la même façon. On voit les objets XPress en tant qu'"objets informatiques", possédant des "attributs" ou "propriétés", et sur lesquels on peut "agir" par des ordres de programmation, que l'on appelle des "commandes" ou "méthodes".

 

 

3 - AppleScript
 

• AppleScript est le langage de programmation conçu par Apple pour contrôler les applications Macintosh, non plus en utilisant l' interface-utilisateur "classique" de ces applications, mais en mettant en œuvre un ensemble de commandes, extérieures à ces applications, agissant sur ces applications.

• AppleScript permet de réaliser :

     - Des programmes de type "batch" contrôlant une ou plusieurs applications.

     - Des programmes interactifs contrôlant une ou plusieurs applications.

     - Des programmes automatisant les échanges de données entre applications.

     - Des programmes établissant une coopération dynamique, via le réseau, entre applications installées sur des machines différentes.

     - Des programmes agissant de façon séquentielle ou interactive sur le système d'exploitation.

 

• En utilisant AppleScript, on ne considère plus les applicatifs comme des logiciels fermés, mais comme une collection de fonctionnalités et de modules, structurés, et accessibles à travers un langage de description et de commande.

• Avec AppleScript on peut accéder aux fonctions spécifiques d'un logiciel, directement, sans utiliser les menus.

• Le copier-coller, ou les liens entre applications permettaient déjà des transferts simples de données.  AppleScript permet d'organiser ces échanges de données avec des algorithmes de contrôle et de traitement.

• En travaillant directement sur les structures de données des différentes applications, le programmeur n'est plus dépendant de la disposition à un instant donné des différentes fenêtres, des dialogues, des états de menus. Les automatismes que l'on va  créer pourront être indépendants du contexte.

• De nombreuses applications bureautiques intègrent des "langages de scripting". Ces langages sont plus ou moins structurés, plus ou moins liés aux commandes disponibles dans les menus, plus ou moins aptes à être étendus par de nouvelles commandes. AppleScript offre un langage standard et puissant de contrôle des applications "scriptables".

 

• AppleScript est un langage complet, disposant des commandes, structures de contrôle, structures de données. Sa syntaxe comporte des structures de listes, de gestion d'attributs/valeurs, et surtout de l'accès à la richesse sans limite des fonctionnalités et structures de données des différents applicatifs qu' AppleScript va permettre de contrôler.
 

 

4 - AppleScript et la programmation Inter-Applications
 

• Devant un projet de développement spécifique d'une application, plusieurs stratégies sont possibles actuellement :

   - Mise en œuvre d'un langage généraliste de haut-niveau, tel que Pascal, C ou C++

et des routines d'accès aux fonctions de fenêtrage, gestion de fichiers et autres fonctions intégrées au système.

   - Utilisation d'un système de gestion de fichiers, intégrant des outils de création de masques de saisie et interface utilisateur, ainsi que des outils de création d' états. Citons FileMaker Pro, Oracle Application Express, Access, etc.

   - Utilisation d'un SGBD relationnel SQL et programmation de l'interface utilisateur avec des outils spécifiques.

   - Enfin, une stratégie de programmation inter-applications, consistant à intégrer dans un même développement les fonctionnalités de 2, 3 ou n  applicatifs standard.
 

• Dans le cadre de la stratégie inter-applications, AppleScript représente un outil essentiel, qui va pouvoir jouer le rôle de "liant" entre les fonctionnalités des diverses applications.

• Aux débuts de la micro-informatique, on avait constaté l'apparition d'une génération de progiciels, les "intégrés". Mais ces logiciels, avaient en grande partie disparu, victimes de défauts majeurs :  Faiblesse manifeste de certaines des fonctionnalités, trop grande complexité de l'ensemble, Tendance au gigantisme de la documentation papier.
 

• L'approche de la programmation inter-applications avec AppleScript permet de retrouver les avantages des intégrés, sans les inconvénients :

   - Liberté dans le choix et le rythme d'acquisition des différents logiciels.

   - Choix des meilleurs outils pour chacune des fonctions de base.

   - Utilisation, pour Macintosh OS, d'un langage unique : AppleScript.

 

• Un nouveau métier apparaît, celui d'intégrateur d'applications.

   - Le programmeur "traditionnel" devait avant tout bien connaître les routines de base du langage utilisé.

   - L'intégrateur d'applications doit connaître, au contraire, les fonctionnalités des logiciels (Tableur, Gestionnaire de Fichier, Logiciel de Mise en Page, ...) mis en œuvre simultanément.

   - Le programmeur "traditionnel" était proche de la machine ou du système, l'intégrateur d'application doit au contraire être proche de l'utilisateur et totalement conscient des objectifs fonctionnels à atteindre.

   - Ce qui exigeait des semaines ou mois de développement, lorsqu'il fallait tout "réinventer", n'exige plus que des heures ou des journées, si on dispose de puissantes fonctionnalités, modulaires, et conçues de façon à être facilement intégrées.

 

 

5 - Quark XPress, Macintosh et AppleScript

 

En environnement Apple, les principaux logiciels scriptables sont Quark XPress, Microsoft Excel, Microsoft Word (dans une moindre mesure), les logiciels Adobe  (Illustrator, Photoshop, InDesign),  FileMaker Pro,  MacSQL, Adobe Acrobat, ainsi que le "Finder" de Macintosh OS.

En environnement Windows, la technologie OLE Automation permet des fonctionnalités équivalentes, à conditions que les applications disposent d'un dictionnaire d'objets et de méthodes publiées et disponibles. L'un des langages les plus utilisés, sous Windows, est VBA (Visual Basic Applications), fourni en standard avec la suite logicielle Microsoft Office.

Quark XPress est très utilisé dans le domaine de la presse, de l'édition et de la communication.

Y compris pour la version 6.5, introduite en janvier 2005, puis pour les versions 7, il n'est automatisable, par scripts, que dans sa version Macintosh.

Certaines applications de PAO, comportaient un langage de "macro-instructions". C'était le cas de PageMaker d'Aldus /Adobe,

Quark XPress n'est, actuellement, automatisable qu'en utilisant AppleScript. 

Certaines actions automatiques peuvent cependant être réalisées par des extensions, ou en utilisant le format XPress Tags.

Le format XPress Tags permet de créer, par programmation ou scripts, à l'extérieur de Quark XPress, des "flots de texte" avec styles.
 

Cependant, contrairement par exemple au langage MIF (utilisé par FrameMaker) qui permet de créer des documents complexes, à l'extérieur de l'application, ou dans une moindre mesure le langage RTF (pour Microsoft Word), Quark XPress ne dispose pas, jusqu'à la version 6.5, d'un format externe de description de documents. Les versions 7 n'offrent non plus aucune solution simple de création d'un document XPress, en XML.

Pour toutes ces raisons, et du fait des parts de marché d'Apple dans le monde de la presse et de l'édition, une part importante des développements réalisés avec AppleScript depuis les années 1990, ont concerné Quark XPress.

 

6 - Ce qui est automatisable, de façon simple, avec AppleScript et Quark XPress

 

La création de nouvelles commandes, destinées à une utilisation interactive avec Quark XPress, 

Ces commandes ressemblent à ce qui est possible d'effectuer, dans d'autres logiciels, par des macros-instructions.

Les scripts de cette catégorie sont en général de tailles modestes (quelques lignes à quelques dizaines de lignes).

 

Voici quelques exemples, effectivement réalisés, de scripts de cette catégorie :

 

         - Affectation d'un nom au bloc texte ou au bloc image sélectionné

         - Se positionner sur un bloc nommé, sélectionné dans une liste

         - Ajustement automatique de la hauteur d'un bloc texte à son contenu

         - Dégroupage puis regroupage d'éléments

         - Création automatique d'une image JPEG correspondant à la sélection en cours

         - Copier/Coller avec élimination des attributs typographiques

         - Comptage de mots et de signes

         - Création automatique d'un bloc image avec un fond perdu paramétrable

         - Recherche/remplacement selon des règles pré-établies

         - Automatismes de création de fichiers PDF et Postscript EPS

         - Importation et placement automatisés d'images

         - Placement automatisé de blocs texte de type "légende de figures"

         - Création automatique de "blocs ancrés"

 

 

7 - Utilisation d'AppleScript / Quark XPress pour la programmation d'applications plus complexes

 

Ce niveau d'utilisation concerne de véritables projets.

La programmation AppleScript y sera en général intégrée dans une organisation des traitements et des fonctionnalités.

Dans des environnements de matériels informatiques hétérogènes, des structures, en réseau, permettront de fédérer les différents modules applicatifs.

D'autres logiciels seront souvent présents, en amont ou en aval de Quark XPress:   Bases de données, Tableurs, Traitements de textes, outils d'imposition, systèmes de publication internet/intranet, etc.

 

Voici quelques exemples, effectivement réalisés avec Quark XPress, pour ce type de projets :

         -  Bases de données de type "Annuaire d'organismes et de personnes", à partir de laquelle sont produits des documents XPress (papier) et des pages HTML générées dynamiquement pour le site Intranet.

         -  Saisie en mode web de fiches touristiques, puis génération automatisée des guides papier avec Quark XPress

         - Fabrication automatisée dans Quark XPress de pages de style "Trombinoscope" à partir d'informations textuelles importées et de lots de photographies

         - Saisie par des rédacteurs de texte dans Word, et de tableaux de chiffres dans Excel, puis intégration automatisée dans des pages XPress

         - Extraction automatisée depuis des documents XPress afin d'alimenter des archives

         - Extraction automatisée depuis des documents XPress de textes à traduire, puis réintégration des textes traduits dans les mêmes blocs qu'à l'extraction

         - Importation et exportation de données, au niveau des blocs, en formats XML et CSV

         - Fabrication automatisée dans Quark XPress de planches de cartes de visite, avec mise en oeuvre d'algorithmes complexes d'ajustement de texte, étroitisation, normalisation de la présentation en tenant compte des contenus

         - Transferts contrôlés de documents XPress entre répertoires et serveurs

         - Combinaison en un seul document XPress  de pages extraites de différents documents, de façon à produire des supports de cours personnalisés, reprenant uniquement les thèmes effectivement abordés lors d'une session.

 

8 - Méthodologie de développement AppleScript / Quark XPress
 

         8.1 - Considérer AppleScript comme un vrai langage

                   AppleScript est un vrai langage de programmation, capable d'interagir avec des objets, manipulant facilement texte et listes.

                   Même si c'est un langage plus facile d'accès que des langages tels que Pascal, C, C++, C#, Java, ce langage met en oeuvre des principes de base qu'il serait gênant de ne pas maîtriser:  algorithmes, portée des variables, boucles, structuration des programmes, etc.

                   Avant de se lancer dans le scripting de Quark XPress, il est conseillé de disposer de bases en programmation au travers d'un autre langage, de préférence orienté objet.

 

         8.2 - Nécessité de bien connaître le logiciel Quark XPress

                   En programmation AppleScript de Quark XPress, on a une vision "de l'intérieur" des objets XPress, non plus à partir des menus et boites de dialogues, mais à partir des propriétés de ces objets.

                   De nombreuses propriétés (internes) existent pour permettre un sous-menu particulier ou un choix particulier dans une boite de dialogue.

                   Le programmeur qui connaîtrait XPress de façon insuffisante aura des difficultés à s'orienter dans les objets.

                   Un informaticien souhaitant scripter QuarkXPress efficacement devrait commencer par suivre des  session d'initiation et de perfectionnement puis utiliser le produit assez longuement au travers d' un échantillon assez vaste de vrais documents.

                   Les concepts suivants doivent en particulier être maitrisés:   Les différents types de blocs, le chaînage entre blocs, les groupes de blocs, le placement d'images dans blocs graphiques, la création et l'utilisation de feuilles de style.

 

         8.3 - Nécessité de bien connaître le système Macintosh OS X

                   En particulier la gestion des volumes, fichiers et type de fichiers.

                   La plupart des développements XPress/AppleScript ont besoin également d'effectuer des scripts agissant sur le Finder : accès à des fichiers, déplacement d'un fichier d'un répertoire à un autre, création de fichiers temporaires, etc.

                   De plus, il faut connaître les aspects spécifiques au système de fichiers Macintosh :  séparateurs, type, créateur, notion de ressource, associations type/application.


         8.4 - Maîtriser les actions élémentaires de scripting Quark XPress avant de se lancer dans des développements complexes

                   Prenons un exemple:  On veut alimenter automatiquement un bloc de texte avec des données issues du tableur Excel.

                   Il faudra maitriser les différents points suivants :

                   - Savoir faire appel, dans une même "boucle", successivement à Excel et à XPress

                   - Savoir ouvrir un document Excel dont le nom et le répertoire sont stockés dans une variable AppleScript

                   - Savoir parcourir les cellules d'une zone Excel nommée

                   - Savoir ignorer les cellules Excel masquées

                   - Savoir nommer un bloc texte XPress

                   - Savoir accéder au bloc texte XPress ayant un nom précis

                   - Savoir invoquer depuis AppleScript des styles paragraphe et caractère XPress

                   - Savoir générer avec AppleScript des lettrines XPress

 

                   Une action ne doit être considérée comme "faisable" avec un langage de programmation que lorsque les faits ont prouvé de multiples fois que c'était le cas.

                   Pour le scripting de Quark XPress, on est de plus confronté à une documentation succinte.

                   Pour ces raisons, l'expérimentation est vitale au programmeur.

                   Le programmeur doit valider les différentes "briques logicielles" dont il peut disposer, avant de se lancer dans toute construction.

 

         8.5 - Organiser les scripts en fonctions et procédures, et les regrouper dans des bibliothèques de scripts

                   Dès qu'une même succession d'instructions existe à différents endroits d'un programme, on peut envisager de créer une procédure ou une fonction.

                   On ne devrait JAMAIS multiplier des instructions par copier/coller, ni dupliquer des objets comportant du code.

                   Dès que l'on a plusieurs procédures ou fonctions, proches l'une des autres en contenu, on peut envisager de les "généraliser" en une seule, en ajoutant des arguments.

                   Dès que l'on a une collection de fonctions et de procédures qui sont opérationnelles, on peut envisager de les regrouper dans une "bibliothèque" ou "librairie". Un avantage des bibliothèques est également de masquer le "code source". On peut donc "mettre à disposition" un ensemble de fonctionnalités AppleScript, tout en conservant la confidentialité des instructions utilisées dans les scripts.

                   Un autre avantage des bibliothèques de scripts consiste dans leur aspect "dynamique".

                   Un script, à son début, peut choisir de charger une bibliothèque de scripts ou une autre.

                   Par exemple, on peut avoir une bibliothèque de scripts prenant en charge la version Macintosh Excel 2002, et une autre la version Macintosh Excel 2004.

                   Au début du script on "déterminera" la version d'Excel, installée sur la machine utilisée actuellement  et selon la valeur obtenue on ouvrira l'une des deux bibliothèques.       
 

         8.6 - Gérer les versions successives d'un développement

                   Par exemple, on commence à la version 1.01.

                   A chaque étape du développement on "incrémente" ce numéro de version.

                   On va placer "en tests" la version 1.05. les test vont être menés sur plusieurs journées, par des personnes différentes.

                   Pendant ce temps le programmeur sera passé à la version 1.06, puis 1.07, etc.

                   Chaque version intermédiaire aura été sauvegardée soigneusement. En même temps, le dossier technique de programmation aura été complété, indiquant ce qui a été ajouté ou modifié dans les versions 1.06 et 1.07.

                   Les utilisateurs ou testeurs auront, de leur côté, établi la liste des bugs ou améliorations à apporter, au vu de la version de tests 1.05

                   A ce moment, le programmeur intégrera, dans la version la plus récente (1.07) les remarques des utilisateurs relatifs à la version 1.05

                   Cela permettra de créer, des versions successives 1.08, 109, 1.10.

                   La version 1.10 sera à nouveau proposée aux tests des utilisateurs. Si ces tests sont satisfaisants, alors cette version 1.10 peut être déclarée "en production".

                   Et cela va pouvoir continuer, au fur et à mesure du développement de nouvelles fonctionnalités.

                   AppleScript est particulièrement compatible avec les techniques de développement rapide.

 

                   Un développement AppleScript peut être comparé à une sculpture.  On part d'une ébauche, qui est ensuite affinée, polie, jusqu'à donner satisfaction aux utilisateurs.

                   Programmeur(s) et utilisateur(s) travaillent en étroite collaboration, si possible sans intermédiaires.

                   Il faudra éviter la multiplication de spécifications verbeuses qui souvent se perdent dans les détails en omettant ce qui est important.

                   On peut de plus également alterner tests de faisabilité et développement effectif.

 

         8.7 - Tout stocker en réseau, rien sur les disques durs respectifs des différents postes de travail

                   Arborescences de données et modules des programmes seront stockés "en réseau"

                   Des "alias" de répertoires et des programmes seront installés sur chaque poste de travail.

                   De cette façon on pourra disposer en réseau, à la fois de la version "en production" du logiciel, mais aussi des versions "en cours de tests".

                   Aucun fichier ne sera accédé par son chemin "absolu", mais toujours de façon "relative" à la racine du répertoire partagé en réseau.

                   Par cette technique, les versions "en tests" pourront disposer de jeux de données différents de la version "en production", sans occasionner un travail supplémentaire de programmation.

                   Des sauvegardes automatiques des données et des programmes pourront être mises en oeuvre, sans se soucier des disques durs particulier de chaque poste de travail.

 

9 - Exemples de scripts AppleScript / Quark XPress

Tous ces scripts sont extraits des supports de cours de formation au langage AppleScript, formations assurées par RCI Informatique depuis 1994.

 

         9.1  Affecter un nom au bloc Quark XPress actuellement sélectionné
 

on NommageBlocTexte()
 
-- Copyright RCI Informatique  1992-2007
  tell application "QuarkXPress Passport"
    tell selection
      set wObj to object reference
    end tell

    if (class of wObj) ≠ text box then
      activate me
      display dialog "Vous devez sélectionner un bloc texte !"
      return
    end if

    --
On a un bloc texte
    set w to name of wObj
    display dialog "Nom du bloc texte sélectionné ?" default answer w ¬

      buttons {"OK", "Fin"} default button "OK"
    set R to result
    if (button returned of R) ≠ "OK" then return -1
    set w to text returned of R

    try
      set name of wObj to w

    on error

      display dialog "Impossible d'attribuer le nom" & return & "<" & w & ">"
    end try

  end tell

end NommageBlocTexte

NommageBlocTexte()

 

         9.2  Ajuster la hauteur d'un bloc texte Quark XPress à son contenu, de façon itérative

         Cette méthode consiste à tester la propriété "débordement" d'un bloc texte.

         On augmente ou diminue la hauteur du bloc, par étapes successives, jusqu'à ce que l'on ne soit plus dans une situation de débordement

 

on AjusterBlocNomme(xBloc, xPasMoins, xPasPlus)
  -- ajuste un bloc désigné par son nom

  -- avec un des pas de diminution/agrandissement

  tell application "QuarkXPress Passport"

    tell document 1
      set vertical measure to millimeters
      set horizontal measure to millimeters

      repeat with k from 1 to 10
        tell text box xBloc
          if box overflows then exit repeat
          set wb to (bottom of bounds) as number
          set wt to (top of bounds) as number
          set wl to (left of bounds) as number
          set wr to (right of bounds) as number
          set newB to wb - (xPasMoins * k) -- on diminue cm par cm

         
if newBwt then exit repeat
          set bounds to {wt, wl, newB, wr}
        end tell
      end repeat

      repeat with k from 1 to 300
        tell text box xBloc

          if not box overflows then exit repeat
          set wb to (bottom of bounds) as number
          set wt to (top of bounds) as number
          set wl to (left of bounds) as number
          set wr to (right of bounds) as number
          set bounds to {wt, wl, wb + (k * xPasPlus), wr}
        end tell
      end repeat
    end tell
  end tell
end AjusterBlocNomme

 

 

         9.3  Ajuster la hauteur d'un bloc texte Quark XPress à son contenu, de façon plus rapide

         Cette méthode consiste à ajuster le bas du bloc texte, à la position du dernier caractère. Elle est nettement plus rapide que la précédente, car ne faisant pas appel à des itérations successives.

         Il est conseillé, en plus de prévoir le cas où de toute façon le texte sera en débordement, en complétant par le test de "box owerflows"

 

-- Ajustement d'un bloc à son contenu
-- Tous droits réservés RCI Informatique, 1992-2007

tell application "QuarkXPress Passport"

  tell document 1

    set vertical measure to millimeters

    set horizontal measure to millimeters


    tell current page
      set wPB to (bottom of bounds) as number

    end tell


    tell text box 1
      --
stockage des (4) coordonnées du bloc de texte

      set wt to (top of bounds) as number
      set wl to (left of bounds) as number
      set wb to (bottom of bounds) as number

      set wr to (right of bounds) as number


      --
Agrandissement du bloc de texte jusqu'en bas de page

      set bounds to {wt, wl, wPB, wr}


      --
Obtention d'informations sur le dernier caractère

      tell last character

        --
de façon relative au début du bloc

        set wBL to (baseline) as number

        set wDe to (descent) as number

      end tell


      --
Restriction de la hauteur du bloc

      --
a la position du dernier caractère, augmentée de 1/10e de mm

      set bounds to {wt, wl, wt + wBL + wDe + 0.1, wr}

    end tell

  end tell

end tell

 

 

         9.4  Exemple de fichier XPress Tags

         C'est un fichier texte, qui peut être constitué par un script ou un programme totalement extérieur à XPress.

         Cela fonctionne avec les versions Macintosh et Windows que Quark XPress.

         Cet exemple appelle des feuilles de styles paragraphe et caractères, qui doivent être définis dans le document XPress.

 

@Style_RCI_1:Lundi

@$:Mardi est le <@StyleCar_RCI_3>deuxième<@$> jour de travail de la semaine

Mercredi

@Style_RCI_1:Jeudi

@$:Vendredi

@Style_RCI_2:Samedi

@$:Dimanche  


 

         9.5  Script remplissant un bloc texte XPress et faisant référence à des styles

 

-- Attribution de feuilles de styles à des paragraphes de texte XPress existants

-- On crée deux feuilles de style "caractères" nommées stc1 et stc2
--
On crée deux feuilles de style "paragraphes" nommées stp1 et stp2, ayant respectivement comme "attributs de caractères" les styles stc1 et stc2


--
On créé un document XPress avec une seule page et un seul bloc de texte

--
On introduit déjà du texte dans le bloc, dans différents styles

--
le premier paragraphe est, au départ, en style stp2


tell application "QuarkXPress Passport"

  tell document 1
    tell text box 1

      --
effacement de tout le texte

      set contents of story 1 to ""

      make new paragraph at end with properties {contents:"abc", paragraph style:"stp1"}
      make new paragraph at end with properties {contents:"def", paragraph style:"stp2"}
      make new paragraph at end with properties {contents:"ghi", paragraph style:"stp1"}

      make new paragraph at end with properties {contents:"jkl", paragraph style:"stp2"}
      make new paragraph at end with properties {contents:"mnop" & return & "suite", paragraph style:"Normal(e)"}
      make new paragraph at end with properties {contents:"qrs" & return & "tuv", paragraph style:"stp1"}

    end tell

  end tell
end tell
   

  

         9.6  Script de création d'un tableau XPress. Remplissage des cellules avec du texte.

 

-- Création d'un tableau de cellules de type texte

tell application "QuarkXPress Passport"
  --
Création d'un nouveau document Quark XPress

  make new document


  --
On s'adresse par la suite au document XPress situé au premier plan

  tell document 1

    --
Création d'un tableau de 6 cellules de type texte, nommé MonTableau

    make new table box at beginning with properties {column count:1, row count:6, name:"MonTableau", cell type:text cell type}

    --
Définition des coordonnées, en millimètres, du rectangle

    --
dans lequel se trouve le tableau

    set bounds of table box "MonTableau" to {"30mm", "30mm", "100mm", "60mm"}

    --
Parcours des 6 cellules du tableau

    repeat with k from 1 to 6

      --
Obtention de l'identifiant de la k-ième cellule en tant que "bloc de texte"
      set wID to uniqueID of text cell k of table box "MonTableau"


      --
Calcul du texte à écrire dans la cellule

      set w to ("cellule " & k) as string


      --
Définition du contenu de la cellule texte

     
set contents of story 1 of text box id wID to w
    end repeat
  end tell

end tell

 

 

          9.7 Script d'importation d'une image JPEG dans un bloc Quark XPress

 

tell application "QuarkXPress Passport"
 
activate -- activation et création du nouveau document
  make document at beginning


  tell document 1 --
les unités seront en centimètres

    set vertical measure to centimeters
    set horizontal measure to centimeters


    tell page 1

      make picture box at beginning -- création d'un bloc image

      set name of picture box 1 to "BlocB" --
ce bloc s'appellera BlocB

      set bounds of picture box "BlocB" to {5, 7, 12, 18} --
Positionnement


      --
Importation dans le bloc image d'une photo présente sous forme de fichier

      tell picture box "BlocB"
        set image 1 to file "HD:Photo3.jpg"

        set bounds of image 1 to exact fit --
Ajustement de l'image

      end tell

    end tell --
page 1

  end tell --
document 1

end tell -- XPress

 

 

10 - Utilisation d' AppleScript / Quark XPress, en liaison avec Microsoft Excel, FileMaker Pro, Microsoft Word, Adobe Illustrator CS

 

 

         10.1 Placement de texte dans des blocs XPress, à partir de données FileMaker Pro

 

global NbEnreg

--
Un document FileMaker, nommé Noms.fp5 comportant une rubrique nommée rub_nom, est déjà ouvert


tell application "FileMaker Pro"

  activate --
activation FileMaker


  show (every record of window "Noms.fp5") --
  afficher tous les enregistrements du fichier


  --
Détermination du Nb d'enregistrements et stockage dans une variable "globale"

  set NbEnreg to (count of record of window "Noms.fp5")
end tell

-- Constitution initiale du document XPress
tell application "QuarkXPress Passport"
  activate
  make document at beginning


  tell document 1 --
Indication que les mesures seront en cm

    set vertical measure to centimeters

    set horizontal measure to centimeters
  end tell
end tell

-- Boucle générale
repeat with k from 1 to NbEnreg
  tell application "FileMaker Pro"
    --
Lecture du contenu de la rubrique de la k-ième fiche Filemaker Pro

    set w to (cell "rub_nom" of record k of window "Noms.fp5")
  end tell --
à FileMaker


  tell application "QuarkXPress Passport"

   
tell page 1 of document 1

      --
Création d'un bloc, à une certaine position

      make text box at beginning

      set bounds of text box 1 to {2, 3 * k, 5, 2 + 3 * k}

      --
Placement du texte issu de FileMaker pro dans ce bloc

      set contents of story 1 of text box 1 to w
    end tell -- à la page

  end tell --
à XPress   

end repeat

 

         10.2 Placement de texte dans des blocs XPress, à partir de données des cellules d'une feuille Microsoft Excel

 

-- Constitution initiale du document XPress
tell application "QuarkXPress Passport"
  activate
  make document at beginning

  tell document 1 --
Indication que les mesures seront en cm

    set vertical measure to centimeters

    set horizontal measure to centimeters
  end tell

end tell


-- Boucle générale 
repeat with k from 1 to 5

 
tell application "Microsoft Excel"

    set w to text of Cell ("L" & k & "C1")

  end tell --
à Excel


  tell application "QuarkXPress Passport"

    tell page 1 of document 1
      make text box at beginning

      set bounds of text box 1 to {2, 3 * k, 5, 2 + 3 * k}

      set contents of story 1 of text box 1 to w
    end tell -- à la page

  end tell -- à XPress   

end repeat

 

 

 

         10.3 Utilisation d'AppleScript , et Adobe Illustrator CS pour la conversion de formats de toutes les images d'un dossier

 

set wIn to "DisqueDur:In"
set wOut to "DisqueDur:Out"


tell application "Finder"

  set wfic to files of folder wIn

e
nd tell


repeat with f in wfic

  set w to f as string
  set l to count of characters of wIn
  set lf to count of characters of w
  set w to (characters (l + 2) thru lf of w) as string

  conversion(wIn, wOut, w)

end repeat

on conversion(xfIn, xfOut, xdIn)
 
tell application "Adobe Illustrator"
    -- Ouverture d'une image EPS (Illustrator)

    -- enregistrement en format JPEG 50% de qualité

    set smallscale to 100
    activate me

    display dialog xfIn & ":" & xdIn giving up after 1
    activate

    open file (xfIn & ":" & xdIn)
  end tell

  set p to offset of "." in xdIn
  set w to ((characters 1 thru p of xdIn) as string) & "jpg"

  tell application "Adobe Illustrator"
    export document 1 to file (xfOut & ":" & w) as JPEG with options ¬
             {quality:40, optimization:false, blur:0.0, matte:false ¬

             , horizontal scaling:smallscale, vertical scaling:smallscale ¬

             , antialiasing:true, artboard clipping:false, saving as HTML:false}


    close document 1 saving no
  end tell
end conversion

 

 

 

         10.4 Utilisation d'AppleScript , soit avec Quark XPress, soit avec Adobe InDesign, pour effectuer les mêmes actions

                   Exemple de création d'un bloc image, occupant l'ensemble de la page, avec un fond perdu, respectivement avec Adobe InDesign CS et avec Quark XPress

 

                   Avec  Adobe InDesign CS :

 

tell application "Adobe InDesign CS"
  try
    tell active document
      set vertical measurement units of view preferences to millimeters
      set horizontal measurement units of view preferences to millimeters

      tell page 1
        set wT to item 1 of bounds
        set wL to item 2 of bounds
        set wB to item 3 of bounds
        set wr to item 4 of bounds

        set MyRect to make rectangle with properties {geometric bounds:{wT - 10, wL - 10, wB + 10, wr + 10}, content type:graphic type}

      end tell
    end tell
  end try
end tell

 

                   Avec  Quark XPress

 

tell application "QuarkXPress Passport"
 
tell document 1
    set horizontal measure to millimeters
    set vertical measure to millimeters

    set wL to (page width) as real
    set wH to (page height) as real

    make picture box at beginning

    tell picture box 1
      set bounds to {-TailleFP, -TailleFP, wH + TailleFP, wL + TailleFP}
    end tell
  end tell  
end tell

 

 

         10.5 Utilisation d'AppleScript , et Adobe Illustrator CS pour créer de nouveaux objets graphiques, à des positions précises

 

tell application "Adobe Illustrator"

  tell document 1
    set r1 to make new ellipse with properties {position:{20, 300}, width:400, height:50}

    set r2 to make new rounded rectangle with properties {position:{20, 150}, width:400, height:50, vertical radius:15, horizontal radius:40}

    set r3 to make new ellipse with properties {position:{20, 450}, width:100, height:100}
  end tell

end tell

 

 

         10.6 Utilisation d'AppleScript , et Microsoft Word pour créer une structure de syntaxe XML, destinée à ensuite être injectée dans Quark XPress

 

on Word_to_XML()

  -- Transforme un document Word en texte balisé, style XML


  set wOut to ""
  set wOut2 to ""

  tell application "Microsoft Word" -- version Word X pour Mac, Service Release 1

 
   
tell document 1
      set nb to count of paragraphs

      repeat with k from 1 to nb
        set w to (contents of paragraph k) as string
        set wN to (paragraph style of paragraph k) as string

        ignoring case
          if wN = "titre 1" then
            set wOut2 to wOut2 & "<titre 1>" & w & "</titre 1>" & return
          end if

          if wN = "titre 2" then
            set wOut2 to wOut2 & "<titre 2>" & w & "</titre 2>" & return
          end if  

          if wN = "normal" then
            set wOut to wOut & w & return
          end if

        end ignoring
      end repeat
    end tell
  end tell
  return {wOut, wOut2}
end Word_to_XML

 

  

 


Tous droits réservés, RCI Informatique SAS, 1992-2007

rci@wanadoo.fr

www.rci-informatique.net