Guide des scripts
Transcription
Guide des scripts
Guide des scripts ® ® Adobe InDesign CS2 Adobe InDesign CS2 Guide des scripts © 2005 Adobe Systems Incorporated. Tous droits réservés. AVIS : toutes les informations contenues dans le présent document sont la propriété d’Adobe Systems Incorporated. Aucune partie de cette publication (qu’elle soit sur support papier ou électronique) ne peut être reproduite, enregistrée ou transmise sous quelque forme que ce soit, par quelque moyen que ce soit, électronique, mécanique ou autre, sans l’autorisation écrite préalable d’Adobe Systems Incorporated. Le logiciel décrit dans ce document est fourni sous licence et ne peut être utilisé ou copié que conformément à la licence. Cette publication et les informations qu’elle contient sont fournies EN L’ETAT. Elles peuvent être modifiées sans préavis et ne constituent pas un engagement de la part d’Adobe Systems Incorporated. Adobe Systems Incorporated ne peut être tenu pour responsable des erreurs ou des inexactitudes apparaissant dans les informations fournies par ce guide, n’émet aucune garantie (expresse, implicite ou légale) quant à la présente publication, et décline expressément toute garantie de qualité marchande, d’adaptation à un usage particulier et de non-violation des droits de tiers. Toutes les références à des noms de société dans les modèles cités en exemple sont indiquées uniquement à des fins de démonstration et ne se réfèrent à aucune organisation existante. Adobe, le logo Adobe, Acrobat, Adobe PDF, Adobe Creative Suite, Illustrator, InDesign, InCopy, GoLive et Photoshop sont des marques ou des marques déposées d’Adobe Systems Incorporated aux Etats-Unis et/ou dans d’autres pays. Apple, Mac, Macintosh et Mac OS sont des marques ou des marques déposées d’Apple Computer, Inc., aux Etats-Unis et dans d’autres pays. Microsoft et Windows sont des marques ou des marques déposées de Microsoft Corporation aux Etats-Unis et dans d’autres pays. UNIX est une marque déposée aux Etats-Unis et dans d’autres pays, concédée sous licence exclusive par X/Open Company, Ltd. Toutes les autres marques citées sont la propriété de leurs détenteurs respectifs. Si ce guide est distribué avec un logiciel comprenant un accord avec l’utilisateur final, ce guide, ainsi que le logiciel qu’il décrit, sont fournis sous licence et ne peuvent être utilisés ou copiés qu’en accord avec les termes de cette licence. Sauf autorisation spécifiée dans la licence, aucune partie de ce guide ne peut être reproduite, enregistrée ou transmise sous quelque forme que ce soit, par quelque moyen que ce soit, électronique, mécanique ou autre, sans l’autorisation écrite préalable d’Adobe Systems Incorporated. Veuillez noter que le contenu de ce guide est protégé par des droits d’auteur, même s’il n’est pas distribué avec un logiciel accompagné d’un contrat de licence pour l’utilisateur final. Les informations contenues dans ce document sont données à titre purement indicatif. Elles peuvent être modifiées sans préavis et ne constituent pas un engagement de la part d’Adobe Systems Incorporated. Adobe Systems Incorporated ne peut être tenu pour responsable des erreurs ou des inexactitudes apparaissant dans les informations fournies par ce guide. Adobe Systems Incorporated, 345 Park Avenue, San Jose, Californie 95110, Etats-Unis. Adobe InDesign CS2 Guide des scripts Sommaire Sommaire 1 Introduction................................................................. 1 Que contient ce guide ? .............................................................................................. 1 A qui est destiné ce guide ? ....................................................................................... 1 Conditions préalables .................................................................................................. 2 JavaScript ....................................................................................................................................................2 Macintosh ...................................................................................................................................................2 Windows .....................................................................................................................................................2 Comment utiliser les scripts de ce guide ? ........................................................... 2 Copie d’exemples avec des lignes longues ................................................................................3 Exécution de fichiers JavaScript .......................................................................................................3 Informations complémentaires ................................................................................ 4 2 Ressources de script d’InDesign en ligne.....................................................................................4 Introduction aux scripts ............................................. 5 Introduction aux scripts .............................................................................................. 5 Qu’est-ce que le script ?........................................................................................................................5 Pourquoi développer des scripts ?..................................................................................................6 Qu’en est-il des macros ?......................................................................................................................6 Lecture des fichiers de scripts ................................................................................... 7 Insertion de commentaires ................................................................................................................7 Lignes longues en AppleScript et VBScript.................................................................................7 Lignes longues en JavaScript ............................................................................................................8 Objets et classes ............................................................................................................ 8 Objets ...........................................................................................................................................................8 Référencement d’objets.......................................................................................................................9 Valeurs et variables ....................................................................................................... 9 Valeurs ..........................................................................................................................................................9 Variables ....................................................................................................................................................10 Noms de variables ................................................................................................................................11 Affectation de valeurs à des variables .........................................................................................11 Variables de tableau de données ..................................................................................................12 Conversion de valeurs d’un type à un autre.............................................................................12 Localisation du type de valeur d’une variable.........................................................................13 Opérateurs ..................................................................................................................... 14 Méthodes ....................................................................................................................... 14 i ii Sommaire Adobe InDesign CS2 Guide des scripts Structures de contrôle ............................................................................................... 15 Instructions conditionnelles ............................................................................................................15 Boucles .......................................................................................................................................................16 3 Sous-routines et gestionnaires ............................................................................... 17 Initiation aux scripts InDesign ............................... 19 Mesures et positionnement..................................................................................... 19 Coordonnées ..........................................................................................................................................19 Unités de mesure ................................................................................................................................. 20 Modèle d’objet de document InDesign .............................................................. 21 Présentation du modèle d’objet InDesign ................................................................................21 Votre premier script InDesign ................................................................................. 22 Ajout de caractéristiques à « Hello World » ........................................................ 25 Ajout d’une interface utilisateur à « Hello World » ........................................... 29 Présentation des boîtes de dialogue .......................................................................................... 29 Ajout de l’interface utilisateur ................................................................................ 30 Création d’une interface utilisateur plus complexe ..............................................................33 Gestion des erreurs..................................................................................................... 38 Utilisation des palettes pour gérer des scripts ..................................................40 Utilisation de la palette Scripts ...................................................................................................... 40 Utilisation de la palette Intitulé de script ...................................................................................41 Tests et dépannage .................................................................................................... 41 4 Débogage d’un AppleScript ............................................................................................................41 Débogage d’un VBScript ...................................................................................................................42 Débogage d’un JavaScript................................................................................................................42 Utilisation des fonctions et outils ExtendScript.... 43 Outils ExtendScript ..................................................................................................... 43 Configuration de la fenêtre Outils ExtendScript ................................................................... 44 Sélection d’une cible de débogage .............................................................................................45 Sélection des scripts .......................................................................................................................... 46 Suivi des données .................................................................................................................................47 Console JavaScript .............................................................................................................................. 48 Editeur de scripts .................................................................................................................................. 49 Débogage dans l’environnement Outils ExtendScript ...................................................... 50 Profilage.................................................................................................................................................... 54 Propriétés de l’objet Dollar ($) .........................................................................................................55 Fonctions de l’objet Dollar ($)......................................................................................................... 56 Objet Reflection .................................................................................................................................. 58 Objet ReflectionInfo ...........................................................................................................................59 Valeurs des variables dans les chaînes localisées ...................................................................61 Activation de la localisation automatique.................................................................................61 Noms de langue ....................................................................................................................................62 Test de la localisation...........................................................................................................................62 Fonction alert globale........................................................................................................................ 64 Fonction confirm globale................................................................................................................. 64 Fonction prompt globale ................................................................................................................. 65 Objet UnitValue..................................................................................................................................... 66 Conversion de valeurs en pixels et de pourcentages ......................................................... 68 Calcul avec des valeurs d’unité ...................................................................................................... 68 Directives de prétraitement ............................................................................................................ 69 Importation et exportation de scripts.........................................................................................71 Surcharge d’opérateurs ............................................................................................ 72 Indicateurs d’application et d’espace de noms................................................. 73 Adobe InDesign CS2 Guide des scripts Sommaire Indicateurs d’application .................................................................................................................. 73 Indicateurs d’espace de noms.........................................................................................................74 5 Emplacements des scripts et vérification de l’installation de l’application............................................................................................................. 74 Utilisation de documents dans AppleScript .......... 77 Notions de base de la gestion de documents................................................... 78 Création d’un document ...................................................................................................................78 Ouverture d’un document................................................................................................................78 Fermeture d’un document ...............................................................................................................79 Enregistrement d’un document.....................................................................................................79 Notions de base de la mise en page .....................................................................80 Définition du format de page et de la longueur du document ..................................... 80 Définition du fond perdu et de la ligne-bloc ...........................................................................81 Configuration des marges et des colonnes ............................................................................. 82 Modification de l’aspect de la table de montage ............................................84 Utilisation des repères et des grilles .....................................................................84 Définition des repères........................................................................................................................ 84 Configuration des préférences de grille .................................................................................... 85 Magnétisme des repères et des grilles....................................................................................... 86 Modification des unités de mesure et de la règle ............................................86 Définition et application des paramètres prédéfinis de document .......... 87 Création d’un paramètre prédéfini par copie de valeurs ...................................................87 Création d’un paramètre prédéfini à partir de nouvelles valeurs ................................. 88 Utilisation d’un paramètre prédéfini........................................................................................... 88 Configuration des planches types......................................................................... 89 Définition des paramètres par défaut de mise en forme de texte .............90 Définition des paramètres de texte par défaut de l’application .................................... 90 Configuration des paramètres par défaut du document actif ........................................92 Utilisation des paramètres de texte par défaut ......................................................................92 Ajout de métadonnées XMP ................................................................................... 93 Création d’un modèle de document .................................................................... 93 Impression d’un document...................................................................................... 97 Impression à l’aide de groupes de pages ..................................................................................97 Configuration des préférences d’impression...........................................................................97 Utilisation des impressions prédéfinies ...................................................................................100 Création d’impressions prédéfinies à partir des préférences d’impression ...........100 Exportation d’un document au format PDF ....................................................105 Utilisation des options d’exportation PDF actuelles..........................................................105 Configuration des options d’exportation PDF .....................................................................105 Exportation d’un groupe de pages ...........................................................................................107 Exportation de pages individuelles...........................................................................................107 Exportation de pages au format EPS ..................................................................108 6 Exportation de toutes les pages .................................................................................................108 Exportation d’un groupe de pages ...........................................................................................108 Exportation avec dénomination de fichier ............................................................................109 Utilisation de documents dans JavaScript ............111 Notions de base de la gestion de documents................................................. 112 Création d’un document .................................................................................................................112 Ouverture d’un document..............................................................................................................112 Fermeture d’un document .............................................................................................................112 Enregistrement d’un document...................................................................................................113 iii iv Sommaire Adobe InDesign CS2 Guide des scripts Notions de base de la mise en page ................................................................... 114 Définition du format de page et de la longueur du document ....................................114 Définition du fond perdu et de la ligne-bloc .........................................................................114 Configuration des marges et des colonnes ............................................................................115 Modification de l’aspect de la table de montage .......................................... 117 Utilisation des repères et des grilles ................................................................... 117 Définition des repères.......................................................................................................................117 Configuration des préférences de grille ...................................................................................119 Magnétisme des repères et des grilles......................................................................................119 Modification des unités de mesure et de la règle .......................................... 119 Définition et application des paramètres prédéfinis de document ........120 Création d’un paramètre prédéfini par copie de valeurs ................................................ 120 Création d’un paramètre prédéfini à partir de nouvelles valeurs ............................... 121 Utilisation d’un paramètre prédéfini......................................................................................... 122 Configuration des planches types.......................................................................122 Définition des paramètres par défaut de mise en forme de texte ...........123 Définition des paramètres de texte par défaut de l’application .................................. 123 Configuration des paramètres par défaut du document actif ..................................... 125 Utilisation des paramètres de texte par défaut ................................................................... 125 Ajout de métadonnées XMP ................................................................................. 126 Création d’un modèle de document .................................................................. 126 Impression d’un document....................................................................................129 Impression à l’aide de groupes de pages ............................................................................... 130 Configuration des préférences d’impression........................................................................ 130 Utilisation des impressions prédéfinies ................................................................................... 133 Création d’impressions prédéfinies à partir des préférences d’impression ........... 133 Exportation d’un document au format PDF ....................................................138 Utilisation des options d’exportation PDF actuelles.......................................................... 138 Configuration des options d’exportation PDF et exportation de pages individuelles ..................................................................................................................... 138 Exportation d’un groupe de pages ...........................................................................................140 Exportation de pages au format EPS ..................................................................140 7 Exportation de toutes les pages ................................................................................................. 141 Exportation d’un groupe de pages ........................................................................................... 141 Contrôle des options d’exportation .......................................................................................... 141 Utilisation de documents dans VBScript..............143 Notions de base de la gestion de documents.................................................144 Création d’un document ................................................................................................................144 Ouverture d’un document.............................................................................................................144 Fermeture d’un document ............................................................................................................ 145 Enregistrement d’un document.................................................................................................. 145 Notions de base de la mise en page ...................................................................146 Définition du format de page et de la longueur du document ...................................146 Définition du fond perdu et de la ligne-bloc ........................................................................146 Configuration des marges et des colonnes ...........................................................................148 Modification de l’aspect de la table de montage ..........................................149 Utilisation des repères et des grilles ...................................................................150 Définition des repères...................................................................................................................... 150 Configuration des préférences de grille .................................................................................. 152 Magnétisme des repères et des grilles..................................................................................... 152 Modification des unités de mesure et de la règle .......................................... 152 Adobe InDesign CS2 Guide des scripts Sommaire Définition et application des paramètres prédéfinis de document ........ 153 Création d’un paramètre prédéfini par copie de valeurs ................................................ 153 Création d’un paramètre prédéfini à partir de nouvelles valeurs ...............................154 Utilisation d’un paramètre prédéfini......................................................................................... 155 Configuration des planches types....................................................................... 155 Définition des paramètres par défaut de mise en forme de texte ...........156 Définition des paramètres de texte par défaut de l’application .................................. 156 Configuration des paramètres par défaut du document actif ..................................... 159 Utilisation des paramètres de texte par défaut ................................................................... 159 Ajout de métadonnées XMP ................................................................................. 159 Création d’un modèle de document ..................................................................160 Impression d’un document....................................................................................164 Impression à l’aide de groupes de pages ...............................................................................164 Configuration des préférences d’impression........................................................................165 Création d’impressions prédéfinies à partir des préférences d’impression ...........168 Exportation d’un document au format PDF .................................................... 170 Utilisation des options d’exportation PDF actuelles.......................................................... 170 Configuration des options d’exportation PDF ..................................................................... 170 Exportation d’un groupe de pages ........................................................................................... 171 Exportation de pages individuelles........................................................................................... 172 Exportation de pages au format EPS .................................................................. 173 Exportation de toutes les pages ................................................................................................. 173 Exportation d’un groupe de pages ........................................................................................... 173 Contrôle d’autres options d’exportation................................................................................. 173 v vi Sommaire Adobe InDesign CS2 Guide des scripts Adobe InDesign CS2 Guide des scripts 1 Introduction 1 Introduction Si vous lisez ceci c’est que vous avez découvert la fonction la plus puissante d’Adobe® InDesign® CS2. Aucune autre fonction (outil, palette ou boîte de dialogue visible sur l’interface utilisateur du programme) n’est aussi rapide, facile et économique que le script. Que contient ce guide ? Ce guide contient les chapitres suivants : Chapitre 1, « Introduction » : ce chapitre donne des informations générales sur ce guide, répertorie les conditions préalables nécessaires pour utiliser InDesign et fournit des astuces permettant de copier les exemples de scripts de ce guide dans un éditeur de scripts. Chapitre 2, « Introduction aux scripts » : ce chapitre est une présentation rapide des concepts généraux de programmation de scripts. Il est principalement destiné aux personnes qui n’ont jamais créé de scripts et à celles qui ne connaissent pas les langages de script pris en charge par InDesign. Chapitre 3, « Initiation aux scripts InDesign » : ce chapitre rassemble des informations générales indispensables pour créer des scripts pour InDesign. Il donne également des exemples simples d’opérations de création de script. Chapitre 4, « Utilisation des fonctions et outils ExtendScript » : ce chapitre présente des outils pour JavaScript, notamment le débogage et la communication entre applications. Chapitre 5, « Utilisation de documents dans AppleScript » : ce chapitre donne des exemples AppleScript pour la plupart des opérations nécessaires à l’utilisation de documents InDesign. Chapitre 6, « Utilisation de documents dans JavaScript » : ce chapitre donne des exemples JavaScript pour la plupart des opérations nécessaires à l’utilisation de documents InDesign. Chapitre 7, « Utilisation de documents dans VBScript » : ce chapitre donne des exemples VBScript pour la plupart des opérations nécessaires à l’utilisation de documents InDesign. A qui est destiné ce guide ? Ce guide est destiné aux personnes qui souhaitent créer des scripts simples pour améliorer leur productivité, qu’elles aient ou non déjà créé un script, comme aux créateurs de scripts chevronnés souhaitant en savoir plus sur la création de scripts InDesign. 2 Introduction Adobe InDesign CS2 Guide des scripts Conditions préalables Le langage utilisé pour écrire des scripts dépend du système de script de la plate-forme sur laquelle vous travaillez : VBScript pour Microsoft® Windows®, AppleScript pour Mac OS® sur Apple® Macintosh® ou JavaScript pour les deux plates-formes. Bien que les systèmes d’écriture de script diffèrent, leur fonctionnement avec InDesign est très similaire. Les exemples de script contenus dans ce manuel sont donnés pour tous ces langages. La conversion d’un script d’un langage à un autre est un procédé assez simple. JavaScript InDesign prend en charge JavaScript pour le script multiplate-forme sous Mac OS et Windows. La prise en charge de JavaScript par InDesign repose sur l’implémentation de JavaScript pour Adobe appelée ExtendScript. L’interprète ExtendScript est conforme à la norme ECMA 262 en vigueur pour JavaScript. Toutes les fonctions de langage de JavaScript 1.5 sont prises en charge, y compris les expressions try/ catch/finally, les opérateurs d’égalité et les nouveaux opérateurs instanceof et in. Adobe GoLive® ainsi que d’autres produits Adobe utilisent également l’interprète ExtendScript JavaScript. Macintosh Pour utiliser le script d’InDesign sur Macintosh, vous pouvez utiliser soit JavaScript soit AppleScript. Pour écrire des AppleScripts, vous devez posséder AppleScript version 1.6 ou supérieure, ainsi qu’un éditeur de scripts AppleScript. AppleScript est fourni avec tous les systèmes Apple et peut être téléchargé gratuitement à partir du site Web d’Apple. L’éditeur de scripts d’Apple est fourni avec Mac OS ; des éditeurs de script tiers, tels que Script Debugger (de Late Night Software, http://www.latenightsw.com), sont également disponibles. Windows Pour utiliser le script d’InDesign sous Windows, vous pouvez utiliser soit JavaScript soit une version de Microsoft Visual Basic, telle que VBScript. Pour créer des scripts InDesign à l’aide de VBScript, un éditeur de texte (Bloc-notes, par exemple) vous suffira. Parmi les autres versions de Visual Basic, citons notamment Visual Basic 5 Control Creation Edition (CCE), Visual Basic 6, Visual Basic .NET, ainsi que toute autre application contenant Visual Basic for Applications (VBA). Microsoft Office, Visio, AutoCAD et d’autres programmes incluent VBA. VBA, pris en charge par InDesign, n’est pas intégré au programme. Pour utiliser VBScript ou VisualBasic dans le script InDesign sous Windows, vous devez installer InDesign depuis le compte d’un utilisateur bénéficiant des droits d’administrateur. Une fois l’installation terminée, n’importe quel utilisateur peut exécuter des scripts InDesign. Les utilisateurs bénéficiant des droits d’administrateur et d’utilisateur avec pouvoirs peuvent ajouter des scripts à la palette Scripts d’InDesign. Comment utiliser les scripts de ce guide ? Pour utiliser les scripts de ce guide : 1. Copiez le script de ce document Adobe® PDF® et collez-le dans votre éditeur de scripts (par exemple, Bloc-notes sous Windows ou TextEdit sous Mac OS). Important : reportez-vous à la section suivante, « Copie d’exemples avec des lignes longues ». Adobe InDesign CS2 Guide des scripts Introduction 3 2. Enregistrez le script dans un fichier de texte brut dans le dossier Scripts du dossier Paramètres prédéfinis dans votre dossier InDesign (créez le dossier Scripts s’il n’existe pas), avec l’extension appropriée : .as pour AppleScript .jsx pour JavaScript .vbs pour VBScript Remarque : vous pouvez également stocker le fichier de script dans un autre emplacement et placer un alias (Mac OS) ou raccourci (Windows) pour ce fichier dans le dossier Scripts. 3. Pour afficher la palette Scripts, choisissez Fenêtre > Automatisation > Scripts. 4. Pour exécuter le script, cliquez deux fois sur son nom dans la palette Scripts. Copie d’exemples avec des lignes longues Lorsque vous copiez et collez de longues lignes de code dans votre éditeur de scripts, des sauts de ligne indésirables générés par la mise en page du guide et le « copier-coller » peuvent être ajoutés au code. Dans certains cas, ces sauts de ligne peuvent provoquer l’échec d’un script. Pour corriger le script, supprimez les sauts de ligne inutiles. Astuce : en général, lorsque vous compilez le script dans AppleScript ou Visual Basic, votre éditeur de scripts vous indique les lignes à corriger. Exemple AppleScript Lorsque vous collez la ligne ci-dessous dans un éditeur de texte, supprimez le saut de ligne qui vient juste après « properties ». Si vous ne le faites pas, le script génère une erreur. set myBaseNameField to make text editbox with properties {edit contents:myDocumentName, min width:160} Exemple JavaScript Lorsque vous collez la ligne ci-dessous dans un éditeur de texte, supprimez les sauts de ligne qui viennent juste après les virgules. La ligne doit se terminer par un point-virgule (« ; »). Dans cet exemple, cela fonctionne correctement avec ou sans sauts de ligne ; cependant, l’interprète ExtendScript peut interpréter un saut de ligne comme la fin d’une instruction dans certains cas. guides.add(myDocument.layers.item(“GuideLayer”), {orientation:HorizontalOrVertical.horizontal, location:marginPreferences.top, fitToPage:false}); Exemple VBScript Lorsque vous collez la ligne ci-dessous dans un éditeur de texte, supprimez les sauts de ligne qui précèdent le signe égal (=). Si vous ne le faites pas, le script génère une erreur. myInDesign.ActiveDocument.MasterSpreads.Item(“B-Master”).Pages.Item(1).AppliedMaster = myInDesign.ActiveDocument.MasterSpreads.Item(“A-Master”) Exécution de fichiers JavaScript Affectez l’extension .jsx aux fichiers JavaScript d’InDesign. Vous pouvez exécuter ces fichiers à partir des outils ExtendScript ou de la palette Scripts, garantissant ainsi une interprétation correcte par ExtendScript. Vous pouvez également cliquer deux fois sur ces fichiers à partir de votre système d’exploitation. L’utilitaire Outils ExtendScript démarre, et le script est exécuté. 4 Introduction Adobe InDesign CS2 Guide des scripts Informations complémentaires Le Guide de référence pour les scripts Adobe InDesign CS2 contient des informations détaillées sur les objets, les propriétés et les méthodes disponibles pour les scripts dans InDesign. Nous ne pouvons pas vous fournir ici une documentation détaillée sur AppleScript, VBScript ou JavaScript. Vous aurez donc sûrement besoin de vous informer davantage sur un ou plusieurs de ces langages de script. Ressources de script d’InDesign en ligne Pour plus d’informations sur la programmation de scripts pour InDesign, visitez les sites : http://partners.adobe.com/public/developer/scripting/index.html http://www.adobeforums.com (forum des utilisateurs pour les scripts InDesign). Dans le forum, les créateurs de scripts peuvent poser des questions, envoyer des réponses et partager leurs dernières compositions. Le forum contient plusieurs centaines d’exemples de scripts. http://www.adobe.fr/products/indesign/scripting.html. Adobe InDesign CS2 Guide des scripts 2 Introduction aux scripts 5 Introduction aux scripts Si vous avez déjà utilisé InDesign, vous avez certainement l’habitude de travailler avec les blocs et leur contenu, et d’appliquer des couleurs, une mise en forme et des styles. Vous avez défini des publications, des pages, des planches et leur conception graphique. Si vous avez déjà manipulé tous ces éléments, vous devez maintenant considérer une composition InDesign comme une collection d’objets. La création de scripts dans InDesign reprend ce principe. Au cœur de la création de scripts InDesign se trouve le modèle d’objet. Il s’agit d’une description de tous les types d’éléments (documents, planches, pages, blocs et leur contenu) pouvant apparaître dans une composition InDesign. Chaque type d’objet possède son propre ensemble de propriétés, et chaque objet d’une composition InDesign possède sa propre identité. Comme les utilisateurs d’InDesign ne sont pas tous familiarisés avec les différents termes, concepts et techniques de programmation, ce chapitre présente les concepts de base qui vous aideront à écrire vos scripts. Dans le cadre de ce chapitre, nous allons étudier les concepts de base de programmation de scripts sous Windows et Macintosh. Pour plus de détails sur l’utilisation d’un système de scripts particulier avec InDesign, consultez le chapitre 3, « Initiation aux scripts InDesign ». Les créateurs de scripts expérimentés peuvent passer directement à ce chapitre. Introduction aux scripts Le script n’est pas réservé aux spécialistes en informatique ; il est accessible à tous les utilisateurs d’InDesign. Nul besoin d’être diplômé en informatique ou en mathématiques pour écrire des scripts pouvant automatiser un grand nombre de tâches de mise en page courantes dans InDesign. Si vous comprenez ce que vous êtes en train de lire, alors vous êtes parfaitement capable d’écrire des scripts pour InDesign. Qu’est-ce que le script ? Un script est une série de commandes indiquant à InDesign d’exécuter une série d’actions. Il peut s’agir d’actions simples n’affectant qu’un seul objet sélectionné dans la composition en cours ou bien d’actions complexes affectant la totalité des objets de toutes les compositions InDesign sur votre disque dur. Les actions peuvent impliquer uniquement InDesign ou d’autres applications telles que des traitements de texte, des feuilles de calcul et des programmes de gestion de bases de données. La plupart des tâches que vous pouvez exécuter en manipulant les outils, les menus, les palettes et les boîtes de dialogue InDesign peuvent être exécutées par un script. Le script sert notamment à automatiser les tâches répétitives, mais il peut aussi servir d’outil de création. Outre l’exécution de tâches de production courantes comme la préparation d’une série de compositions 6 Introduction aux scripts Adobe InDesign CS2 Guide des scripts pour une impression à distance, le script peut aussi exécuter des tâches créatives qui vous prendraient trop de temps ou seraient trop complexes. Par exemple, vous pouvez écrire un script permettant de modifier de façon aléatoire la police et la couleur des caractères d’une sélection ou d’augmenter progressivement la taille et le décalage vertical des caractères d’un bout à l’autre d’une étendue de texte. Sans recourir au script, vous ne pourriez pas utiliser ces effets créatifs. Pour écrire un script sur Macintosh, vous devez le plus souvent utiliser AppleScript, un système d’écriture de script qui envoie des messages aux applications ou au système d’exploitation à l’aide d’AppleEvents. Sous Windows, les programmes VBScript utilisent un système similaire pour la communication entre applications, communément appelé Windows Automation. En revanche, les JavaScripts fonctionnent sur les deux plates-formes. La terminologie diffère d’un langage de script à l’autre, mais l’idée reste la même : envoyer des informations d’un programme (le système de script) vers un autre (InDesign) afin que l’application réceptrice exécute une tâche. Les applications ne peuvent pas toutes être contrôlées par des scripts. Pour que le script soit efficace, une application doit recevoir des messages d’une autre application et doit pouvoir les transformer en actions. En outre, les messages envoyés à une application doivent être construits de telle sorte que l’application comprenne ce que vous lui demandez de faire. Ce manuel est une sorte de « cours de langue » ; nous vous y apprendrons à parler la langue d’InDesign. Pourquoi développer des scripts ? Les arts graphiques sont un domaine d’activité caractérisé par la créativité, mais, en réalité, la plupart du travail de mise en page est tout sauf créatif. En examinant de plus près votre travail, vous verrez certainement que vous passez le plus clair de votre temps à répéter des tâches de production identiques ou similaires. En fait, vous vous rendrez sûrement compte que le temps que vous passez à insérer ou remplacer des images, à corriger des erreurs de texte et à préparer des fichiers destinés à l’impression numérique restreint souvent le temps disponible pour votre travail de création. Ne serait-il pas intéressant de disposer d’un assistant qui effectuerait certaines voire toutes les tâches ennuyeuses et répétitives à votre place ? Vous pourriez ainsi vous concentrer davantage sur l’aspect créatif de votre travail. En y consacrant un peu de temps, le script d’InDesign peut devenir votre assistant de mise en page. Vous pouvez commencer avec des scripts courts et simples, vous faisant gagner quelques secondes par jour, puis passer au script qui travaille la nuit, pendant que vous dormez. Pensez à votre travail. N’y a t-il pas une tâche que vous trouvez tout particulièrement pénible ? Si c’est le cas, c’est l’occasion rêvée de vous lancer dans le script. Pensez à cette tâche de manière analytique. Quels sont les étapes qui entrent en jeu ? Quelles sont les conditions dans lesquelles vous devez exécuter cette tâche ? Une fois que vous avez clairement identifié le processus, vous êtes capable de l’écrire en script. Qu’en est-il des macros ? Une macro est l’enregistrement d’une série d’actions de l’interface utilisateur (choix de menus, pressions de touches et déplacements de la souris). Lorsque vous « lancez » une macro, celle-ci exécute toutes les actions enregistrées. La création de macros nécessite des programmes utilitaires spéciaux. QuicKeys, de CE Software, est un exemple de programme permettant de créer des macros. De nombreuses personnes confondent les macros et les scripts. Les macros comme les scripts sont deux moyens d’automatiser les tâches répétitives, mais leur fonctionnement diffère. Les points ci-dessous résument les principales différences. Les macros utilisent l’interface utilisateur d’un programme pour exécuter le travail. Lorsqu’une macro est lancée, elle affiche et ferme les boîtes de dialogue, ouvre et choisit des menus et saisit du texte dans des documents ou dans des champs. Les scripts, en revanche, n’utilisent pas l’interface utilisateur d’un programme pour exécuter leurs tâches et travaillent bien plus vite que les macros les plus rapides. Introduction aux scripts 7 Adobe InDesign CS2 Guide des scripts Les macros offrent des possibilités limitées lorsqu’il s’agit d’obtenir des informations d’un programme et d’y répondre. Les scripts sont capables d’obtenir des informations, ainsi que de prendre des décisions et d’exécuter des calculs en fonction des informations reçues. Remarque : Dans Microsoft Word, Excel, comme dans d’autres applications Microsoft Office, les macros sont des enregistrements de séries d’actions de l’utilisateur rédigés comme des scripts et dans lesquels il est possible d’ajouter des éléments de script. Ces macros sont différentes de celles décrites plus haut, et InDesign ne permet pas l'enregistrement de séries d’actions de l’utilisateur en tant que scripts. Lecture des fichiers de scripts L'insertion de commentaires à l’intérieur d'un script ainsi que la mise en forme de celui-ci en facilitent la compréhension et la maintenance. Insertion de commentaires Les commentaires permettent d’ajouter un descriptif aux instructions d’un script. Les commentaires sont ignorés pendant l’exécution d’un script (ils ne génèrent donc aucune erreur). Ils permettent de documenter les opérations d’un script (pour mémoire ou pour un autre développeur). Pour inclure un commentaire dans un AppleScript, saisissez-le, puis insérez « -- » à sa gauche ou encadrezle de « (*« et »*) ». En VBScript, saisissez « Rem » (pour « remarque ») ou « ' » (un seul guillemet de citation) à gauche du commentaire. Saisissez le marqueur de commentaire au début d’une ligne pour transformer toute cette ligne en commentaire. En JavaScript, saisissez « // » à gauche du commentaire ou placez ce commentaire entre « /* » et « */ ». Par exemple : AppleScript --this is a comment (* and so is this *) VBScript Rem this is a comment ' and so is this JavaScript // this is a comment /* and so is this */ Lignes longues en AppleScript et VBScript En AppleScript et en VBScript, un retour chariot à la fin d’une ligne signale la fin d’une instruction. Cependant, les lignes d’un script peuvent être très longues. Comment rendre le script plus lisible sans couper les lignes trop longues ? En AppleScript et en VBScript, il est possible de définir des caractères spéciaux dits « de continuité ». Il s’agit de caractères coupant les lignes, mais indiquant au script que chaque ligne coupée continue l’instruction de la ligne précédente. En AppleScript, appuyez sur les touches Option + Retour (¬ s’affiche) pour entrer un caractère de continuité. En VBScript, saisissez un trait de soulignement (_) suivi d’un retour chariot à la fin de la ligne pour indiquer la continuité de cette ligne. Dans les deux langages, le caractère de continuité ne peut pas apparaître dans une chaîne de texte. 8 Introduction aux scripts Adobe InDesign CS2 Guide des scripts Lignes longues en JavaScript En JavaScript, un point-virgule (;) signale la fin d’une instruction. Les instructions pouvant contenir des retours chariots, il n’est pas nécessaire d’insérer un caractère de continuité. En revanche, pour l’interprète ExtendScript d’InDesign, il n’est pas nécessaire de signaler la fin d’une ligne d’instruction par un pointvirgule. ExtendScript interprète chaque ligne comme une instruction, dès que cela est possible. Par exemple : return true; n’est pas interprété comme : return true; Il est toutefois recommandé de terminer chaque ligne par un point-virgule et d’insérer un retour chariot uniquement pour signaler la fin d’une instruction. Objets et classes La terminologie de la programmation orientée objet peut être difficile à assimiler au premier abord. Cette section définit des termes courants et présente des exemples. Objets Les objets appartiennent à des classes et possèdent des propriétés à manipuler avec des méthodes (Windows) ou des commandes (Macintosh). Que signifient ces termes dans ce contexte ? Vous pouvez vous représenter les objets et leurs propriétés de la façon suivante : Vous habitez dans une maison technologiquement avancée (voire magique) répondant à toutes vos commandes. La maison est un objet. Les propriétés de cet objet Maison peuvent comprendre le nombre de pièces, la couleur de la façade et sa date de construction, par exemple. Supposons que vous puissiez modifier certaines propriétés de la maison (avec le bon type de commande). Si vous lui ordonnez de se peindre en bleu, la maison (qui connaît la méthode « peinture ») va changer de couleur. Supposons que la maison contienne un certain nombre de petits objets. Chaque pièce pourrait par exemple être un objet de la maison et chaque fenêtre, porte ou appareil ménager des objets de la pièce. Vous pouvez vous adresser à ces objets directement ou par l’intermédiaire de la maison. Notez qu’il vous faudra être très spécifique : vous ne pouvez demander à la maison d’ouvrir une fenêtre sans lui indiquer laquelle. Vous pouvez également donner des ordres aux objets de chaque pièce (« Ordonne à la cuisine d’ouvrir la fenêtre nord », par exemple). Chaque objet de cette maison peut répondre à différentes méthodes en fonction de ses possibilités. Il est possible, par exemple, d’ouvrir ou de fermer les fenêtres et les portes, mais pas le sol et le plafond. Certaines propriétés d’objet peuvent être modifiées, d’autres non. Il est possible de changer la position d’un meuble, mais pas la date de construction de la maison, par exemple. Les propriétés modifiables sont dites en lecture/écriture, et les propriétés non modifiables sont dites en lecture seule. Pour appliquer cette métaphore à InDesign : la maison représente l’application, ses pièces représentent les pages et les planches, et ses portes et fenêtres représentent les blocs. Vous pouvez ordonner aux pages InDesign d’ajouter des blocs et aux blocs de changer de propriété ou de contenu. Puis, vous pouvez ordonner aux blocs de changer de couleur, d’importer une image ou de se remplir de texte. Les objets de votre composition sont classés selon une hiérarchie : les blocs sont hébergés par des pages, les pages par le document, et le document par InDesign. Les termes modèle d’objet ou hiérarchie font référence à cette structure. Introduction aux scripts 9 Adobe InDesign CS2 Guide des scripts Référencement d’objets Lorsque vous envoyez une commande à un objet InDesign, vous devez envoyer le message au bon objet. Il faut donc que son adresse soit correcte. Pour ce faire, vous devez identifier chaque objet par sa position dans la hiérarchie. Lorsque vous identifiez un objet de cette façon, vous créez une référence à cet objet. Les différents langages utilisent des méthodes différentes de référencement d’objet, mais le principe reste le même : donner au script un chemin d’accès à l’objet avec lequel vous souhaitez travailler. Les exemples ci-dessous indiquent comment faire référence au premier bloc de texte de la première double page du document actif (notez que ces scripts sont incomplets). AppleScript first text frame of the first spread of the first document Remarque : lorsque votre AppleScript fait référence à un objet texte, InDesign renvoie le texte contenu dans l’objet et non pas une référence à l’objet lui-même. Pour obtenir une référence à l’objet texte, utilisez la propriété de référencement d’objet comme dans l’exemple ci-dessous. tell application "Adobe InDesign CS2" set myDocument to make document tell spread 1 of myDocument set myTextFrame to make text frame set contents of myTextFrame to "InDesign" --The following line returns the text "InDesign" get paragraph 1 of myTextFrame --The following line returns a text object get object reference of paragraph 1 of myTextFrame end tell end tell VBScript Documents.Item(1).Spreads.Item(1).TextFrames.Item(1) JavaScript app.documents.item(0).spreads.item(0).textFrames.item(0) Valeurs et variables Les scripts peuvent s’avérer très utiles lorsque vous pouvez préciser des données exactes (valeurs) et utiliser des variables (conteneurs de données). Valeurs Le corps d’un caractère, la position horizontale d’un bloc de texte sur une page ou la couleur de contour d’un rectangle sont autant d’exemples de valeurs utilisées pour la création de scripts InDesign. Les valeurs sont des données utilisées par un script pendant son exécution. Le type d’une valeur définit quelle sorte de donnée elle contient. Le type de valeur du contenu d’un mot, par exemple, est une chaîne de texte. De même, le type de valeur de l’interligne d’un paragraphe est un nombre. En général, les valeurs utilisées dans un script sont des nombres ou du texte. Le tableau cidessous répertorie les types de valeurs les plus couramment utilisées pour la création de scripts InDesign. Type de valeur Nature Exemple Booléen Logique : True ou False True 10 Introduction aux scripts Adobe InDesign CS2 Guide des scripts Type de valeur Nature Exemple Entier Nombres entiers (sans virgule). Les entiers peuvent être positifs ou négatifs. En VBScript, vous pouvez utiliser des données de type long pour les entiers. En AppleScript, vous pouvez utiliser indifféremment des données de type long ou fixe pour les nombres entiers et les nombres réels. 14 Double (VBScript), fixe ou réel (AppleScript), virgule flottante (JavaScript) Nombre très précis pouvant être décimal. 13,9972 Chaîne Série de caractères de texte. Les chaînes de texte sont présentées entre guillemets anglais. "I am a string" Tableau de données (VBScript, JavaScript) ou liste (AppleScript) Liste de valeurs (ces valeurs peuvent être de tout type). AppleScript : {"0p0", "0p0", "16p4", "20p6"} VBScript : Array("0p0", "0p0", "16p4", "20p6") JavaScript : ["0p0", "0p0", "16p4", "20p6"] Variables Les variables sont des conteneurs de données. Une variable peut contenir un nombre, une chaîne de texte ou une référence à un objet InDesign. Les variables possèdent des noms. Vous ferez donc référence à une variable par son nom. Pour placer une donnée dans une variable, vous devez l’assigner à cette variable. Le nom de fichier de la composition InDesign active, la date et l’heure en cours et le nombre de pages de cette même composition sont autant d’exemples de données pouvant être assignées à une variable. Pourquoi ne pas tout simplement entrer les données telles quelles (par exemple le nom de la composition, la date et l’heure en cours et le nombre de pages de la composition) au lieu d’utiliser des variables ? Si vous procédez ainsi, votre script ne fonctionnera que pour une seule composition ou dans une seule situation. En utilisant des variables, vous pouvez écrire des scripts qui fonctionneront dans différentes situations. Pendant l’exécution d’un script, celui-ci peut assigner des données à des variables, notamment celles représentant la composition ou la sélection active (par exemple) et prendre ensuite des décisions en fonction du contenu de ces variables. L’affectation de valeurs ou de chaînes de texte à des variables est très simple, comme le montrent les exemples ci-dessous. AppleScript set myNumber to 10 set myString to "Hello, World!" VBScript myNumber = 10 myString = "Hello, World!" JavaScript var myNumber = 10; var myString = "Hello, World!"; En AppleScript, il est possible d’assigner une référence d’objet à une variable pendant la création de l’objet : set myTextFrame to make text frame with properties(geometric bounds: (0,0,3.5, 4)) ou d’assigner à cette variable une référence à un objet existant : tell application "Adobe InDesign CS2" set myTextFrame to first text frame of the first spread of the first document end tell Adobe InDesign CS2 Guide des scripts Introduction aux scripts 11 VBScript fonctionne de la même façon. Par exemple, pour assigner une variable pendant la création d’un bloc (le terme myInDesign à la ligne suivante faisant référence à l’objet application InDesign) : Set myTextFrame = myInDesign.Documents.Item(1).Spreads.Item(1).TextFrames.Add ou pour faire référence à un bloc existant : Set myTextFrame = InDesign.Documents.Item(1).Spreads.Item(1).TextFrames.Item(1) La même opération en JavaScript ressemble plutôt à l’opération VBScript qu’à l’opération AppleScript (en JavaScript InDesign, app fait référence à l’application InDesign). Pour faire référence à un bloc existant : appvar myTextFrame = app.documents[0].spreads[0].textFrames[0]; //ou var myTextFrame = app.documents.item(0).spreads.item(0).textFrames.item(0); ou pour assigner une variable pendant la création d’un bloc : var myTextFrame = app.documents[0].spreads[0].textFrames.add(); //ou var myTextFrame = app.documents.item(0).spreads.item(0).textFrames.add(); Remarque : en JavaScript, toute variable non précédée de var est considérée par défaut comme globale, non liée à une fonction spécifique. var n’est pas obligatoire, mais il est vivement recommandé de l’utiliser dans les scripts comprenant plusieurs fonctions. En AppleScript et VBScript, les variables sont locales sauf si elles sont définies comme globales. Autrement dit, elles ne sont plus valides en dehors de la fonction dans laquelle elles ont été créées. En général, quel que soit le langage, il est préférable d’utiliser des variables locales et d’attribuer des valeurs spécifiques aux fonctions/sous-routines/gestionnaires plutôt que de définir et d’utiliser des variables globales. En JavaScript, pour définir une variable comme variable locale, utilisez var comme indiqué dans l’exemple précédent. Pour indiquer qu’une fonction JavaScript comprend plusieurs variables locales, répertoriez ces variables en début de fonction, comme dans l’exemple ci-dessous. function myFunction(){ var myNumber, myString; } Noms de variables Dans la mesure du possible, utilisez des noms évocateurs pour les variables, tels que premièrePage ou logoSociété au lieu de x ou c, par exemple. Votre script sera beaucoup plus lisible. L’utilisation de noms longs n’affecte en rien la vitesse d’exécution du script. Les noms de variables doivent être composés d’un seul mot, mais vous pouvez utiliser les majuscules (pour écrire maPremièrePage, par exemple) ou les traits de soulignement (ma _ première _ page) afin de les rendre plus lisibles. Les noms de variables ne peuvent pas commencer par un chiffre, ni contenir des signes de ponctuation ou des guillemets de citation. Vous pouvez attribuer un préfixe aux noms de vos variables, afin de les distinguer des objets, commandes et mots-clés de votre système de script. Toutes les variables utilisées dans ce manuel, par exemple, commencent par my. Affectation de valeurs à des variables En AppleScript, vous devez utiliser set pour assigner tout type de valeur à une variable. set myDocument to active document set myString to "X" Pour les versions de VBScript ou Visual Basic différentes de VB.NET, vous devez utiliser Set pour assigner des références d’objets à toutes les variables sauf les types de chaîne de texte, tableau de données (array) et nombre. Set myDocument = myInDesign.Documents.Add myString = "X" 12 Introduction aux scripts Adobe InDesign CS2 Guide des scripts En VB.NET, vous n’avez pas besoin d’utiliser Set pour les variables d’objet. myDocument = myInDesign.Documents.Add myString = "X" Comme avec VB.NET, vous n’êtes pas obligé d’utiliser Set en JavaScript lors de l’affectation d’une valeur à une variable, quel que soit le type de cette variable : var myDocument = app.documents.add(); var myString = "X"; Variables de tableau de données AppleScript, VBScript et JavaScript prennent en charge les tableaux de données (arrays). Un tableau de données est un type de variable répertoriant des valeurs. En AppleScript, un tableau de données est appelé liste. AppleScript set myArray to {1, 2, 3, 4} VBScript myArray = Array(1, 2, 3, 4) Rem In Visual Basic.NET: myArray = New Double (1, 2, 3, 4) JavaScript myArray = [1, 2, 3, 4]; Pour faire référence à un élément d’un tableau de données, vous devez utiliser son numéro dans le tableau. En VBScript et en JavaScript, le premier élément d’un tableau de données est le numéro 0 ; en AppleScript, il s’agit du numéro 1. AppleScript set myFirstArrayItem to item 1 of myArray VBScript myFirstArrayItem = myArray(0) JavaScript myFirstArrayItem = myArray[0]; Remarque : vous pouvez utiliser l’instruction Option Base de Visual Basic pour attribuer le numéro 1 au premier élément d’un tableau de données. Dans les exemples de ce manuel et du CD-ROM InDesign, nous supposons que le premier élément d’un tableau est le numéro 0 et non pas le numéro 1. Il s’agit de l’option par défaut. Si vous avez choisi 1 pour Option Base, vous devrez ajuster toutes les références des tableaux de données en conséquence dans les scripts d’exemple. Un tableau de données peut en contenir un autre, comme dans les exemples ci-dessous. AppleScript set myArray to {{0, 0}, {72, 72}} VBScript myArray = Array(Array(0,0), Array(72, 72)) Rem In Visual Basic.NET: myArray = New Array(New Double(0,0), NewDouble (0,0)) JavaScript myArray = [[0,0], [72,72]]; Conversion de valeurs d’un type à un autre Tous les langages de script pris en charge par InDesign permettent de convertir des valeurs variables d’un type à un autre. Parmi les conversions les plus communes, on peut citer la conversion de nombres en chaînes de texte (ce qui permet d’entrer des nombres comme texte ou de les afficher dans des boîtes de dialogue) ou de chaînes de texte en nombres (ce qui permet d’utiliser du texte pour définir un corps ou d'autres valeurs numériques). AppleScript --To convert from a number to a string: set myNumber to 2 set myString to (myNumber as string) Adobe InDesign CS2 Guide des scripts Introduction aux scripts 13 --To convert from a string to a number: set myString to "2" set myNumber to (myString as integer) --if your string contains a decimal value, use "as real" rather than "as integer" VBScript Rem To convert from a number to a string: myNumber = 2 myString = cstr(myNumber) Rem To convert from a string to an integer: myString = "2" myNumber = cInt(myString) Rem If your string contains a decimal value, use "cDbl" rather than "cInt": myNumber = cDbl(myString) JavaScript //To convert from a number to a string: myNumber = 2; myString = myNumber + ""; //To convert from a string to an integer: myString = "2"; myNumber = parseInt(myString); //If your string contains a decimal value, use "parseFloat" rather than "parseInt": myNumber = parseFloat(myString); //You can also convert strings to numbers using the following: myNumber = +myString; Localisation du type de valeur d’une variable Parfois, un script devra prendre des décisions en fonction du type de valeur d’un objet. Si vous travaillez sur un script opérant sur une sélection de texte, par exemple, vous devrez peut-être faire en sorte que ce script s’arrête si le type de sélection est un élément de page. Tous les langages de script permettent de déterminer le type d’une variable. AppleScript -- Given a variable of unknown type, "myMysteryVariable"... set myType to class of myMysteryVariable --myType will be an AppleScript type (e.g., rectangle) VBScript Rem Given a variable of unknown type, "myMysteryVariable"... myType = TypeName(myMysteryVariable) Rem myType will be a string corresponding to the variable type (e.g., "Rectangle") JavaScript //Given a variable of unknown type, "myMysteryVariable"... var myType =typeof (myMysteryVariable); //If the variable is an object, "typeof" will return "object". //To get the specific type of the object, add the following: if (myType == "object"){ myType = myMysteryVariable.constructor.name; } //myType will be a string corresponding to the JavaScript type (e.g., "Rectangle") Lorsque vous effectuez une itération via une collection, en JavaScript, le type de l’élément doit correspondre au type de la collection. Lorsque vous effectuez une itération via une collection pageItems, par exemple, le type de chaque élément doit être PageItem, plutôt que Rectangle, Oval, Polygon, GraphicLine ou TextFrame. Pour obtenir le type spécifique d’un élément lorsque vous effectuez une itération via une collection d’éléments différents, utilisez la méthode getElements(), comme dans l’exemple suivant : 14 Introduction aux scripts Adobe InDesign CS2 Guide des scripts for(myCounter = 0; myCounter < app.activeDocument.pages.item(0).pageItems.length; myCounter ++){ var myPageItem = app.activeDocument.pages.item(0).pageItems.item(myCounter); var myPageItemType = myPageItem.getElements()[0].constructor.name; alert(myPageItemType); } Opérateurs Les opérateurs utilisent des variables ou des valeurs pour exécuter des calculs (addition, soustraction, multiplication et division) et renvoyer une valeur. Par exemple : MyWidth/2 renvoie une valeur égale à la moitié du contenu de la variable myWidth. Vous pouvez également utiliser des opérateurs pour exécuter des comparaisons (est égal à (=), est différent de (<>), est supérieur à (>) ou est inférieur à (<)). Par exemple : MyWidth > myHeight renvoie la valeur « true » (ou 1) si myWidth est supérieur à myHeight, ou « false » (0) si ce n’est pas le cas. Tous les langages de script fournissent des opérateurs « utilitaires » supplémentaires. En AppleScript et VBScript, l’opérateur « & » peut joindre deux chaînes de texte. "Pride " & "and Prejudice" renvoie la chaîne de texte : "Pride and Prejudice" Pour joindre deux chaînes de texte en JavaScript, utilisez le signe plus (+). "Pride " + "and Prejudice" //returns the string: "Pride and Prejudice" Méthodes Les méthodes (parfois appelées commandes ou événements) sont les verbes du langage de script. Ce sont des éléments du script qui génèrent des actions plus complexes que celles pouvant être réalisées par l’affectation de valeurs de propriété. Le type de chaque objet détermine le nombre et le type de méthodes que vous pouvez utiliser pour manipuler l’objet. En AppleScript, la commande make permet de créer de nouveaux objets et set d’assigner des valeurs aux propriétés ou de créer des variables d’objet. En VBScript, la méthode Add permet de créer de nouveaux objets, l’instruction Set permet d’assigner des objets InDesign à des variables VBScript et le signe égal (=) d’assigner des valeurs de propriétés (en Visual Basic.NET, vous pouvez omettre Set). En JavaScript, la méthode add() permet de créer de nouveaux objets et le signe égal (=) d’assigner des objets à une variable. Si vous utilisez plusieurs langages de script, il est facile de tout mélanger d’un langage à l’autre. Avec AppleScript, souvenez-vous que le signe égal est uniquement utilisé pour les instructions logiques (If) et que set est utilisé pour toute affectation de variable. Avec VBScript ou Visual Basic (versions différentes de VB.NET), Set est utilisé uniquement lors de la création d’une variable d’objet. En JavaScript, le signe égal est utilisé pour assigner des valeurs à une variable. Pour comparer des objets, utilisez un signe égal double (==). Des paramètres sont parfois requis. Par exemple, lorsque vous créez un groupe, InDesign doit savoir quels objets inclure dans le nouveau groupe. D’autres paramètres sont facultatifs. Par exemple, lorsque vous créez un nouveau document, vous pouvez spécifier qu’InDesign crée le nouveau document à partir d’un paramètre prédéfini, mais ce n’est pas obligatoire. Adobe InDesign CS2 Guide des scripts Introduction aux scripts 15 AppleScript En AppleScript, vous pouvez également utiliser « with properties » pour spécifier des propriétés d’objet lors de la création de l’objet. tell application "Adobe InDesign CS2" --Example of an optional parameter (requires that you have a document preset --named "7x9_book_cover"). set myDocument to make document with document preset "7x9_book_cover" tell page 1 of myDocument --Example of using "with properties" to specify object properties as you create the object. set myOval to make oval with properties {geometric bounds:{"6p", "6p", "18p", "18p"}} --Another "with properties" example. set myRectangle to make rectangle with properties {stroke weight:4} --Example of a required parameter: set myGroup to make group with properties {group items:{myOval, myRectangle}} end tell end tell VBScript Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Example of an optional parameter (requires that you have Rem a document preset named "7x9_book_cover"). Set myDocument = myInDesign.Documents.Add(myInDesign.DocumentPresets.Item("7x9_book_cover")) Set myOval = myDocument.Pages.Item(1).Ovals.Add myOval.GeometricBounds = Array("6p", "6p", "18p", "18p") Set myRectangle = myDocument.Pages.Item(1).Rectangles.Add myRectangle.StrokeWeight = 4 Rem Example of a required parameter. Set myGroup = myDocument.Pages.Item(1).Groups.Add(Array(myOval, myRectangle)) JavaScript //Example of an optional parameter (requires that you have //a document preset named "7x9_book_cover"). var myDocument = app.documents.add(app.documentPresets.item("7x9_book_cover")) //Example of setting object properties as you create the object. var myOval = myDocument.pages.item(0).ovals.add( {geometricBounds:["6p", "6p", "18p", "18p"]}); var myRectangle = myDocument.pages.item(0).rectangles.add( {strokeWeight:4}); //Example of a required parameter. var myGroup = myDocument.pages.item(0).groups.add([myOval, myRectangle]); Structures de contrôle La plupart des scripts ne suivent pas un chemin de manière séquentielle, du début à la fin, mais ils empruntent des voies différentes en fonction de décisions, ou ils répètent des commandes plusieurs fois. Structures de contrôle sont les commandes qui permettent d'effectuer de telles actions. Instructions conditionnelles Si vous pouviez parler à InDesign, vous lui diriez par exemple : « Si l’objet sélectionné est un rectangle, définis pour cet objet un contour d’une épaisseur de 12 points ». Cette instruction est appelée instruction c onditionnelle. Les instructions conditionnelles permettent au script d’évaluer des conditions (telles que la couleur de l’objet sélectionné, le nombre de pages de la composition ou la date) et d’agir en fonction du résultat. Une instruction conditionnelle commence presque toujours par if. Les scripts d’exemple suivants vérifient le nombre de compositions ouvertes. Si aucune composition n’est ouverte, chaque script affiche un message dans une boîte de dialogue. 16 Introduction aux scripts Adobe InDesign CS2 Guide des scripts AppleScript tell application "Adobe InDesign CS2" if (count documents) = 0 then display dialog "No InDesign documents are open!" end if end tell VBScript Set myInDesign = CreateObject ("InDesign.Application.CS2") If myInDesign.Documents.Count = 0 MsgBox "No InDesign documents are open!" End If End Sub JavaScript if(app.documents.length==0){ alert("No InDesign documents are open!"); } Remarque : JavaScript utilise un signe égal double (==) pour la comparaison des valeurs (comme dans l’exemple précédent) et un signe égal simple (=) pour l’affectation des valeurs. VBScript et AppleScript utilisent un signe égal simple pour les comparaisons. Boucles Si vous pouviez parler à InDesign, vous lui diriez par exemple : « Répète vingt fois la procédure suivante. ». En termes de script, cette instruction est appelée structure de contrôle. Les structures de contrôle gèrent les processus répétitifs ou boucles. Une boucle répète une action continuellement, avec ou sans changement entre instances (ou itérations) de la boucle, jusqu’à ce qu’une condition spécifique soit remplie. Les langages de script offrent une grande variété de structures de contrôle. La forme de boucle la plus simple est une boucle répétant une série d’opérations un certain nombre de fois. Voici un type plus complexe de structure de contrôle. Les répétitions continuent jusqu’à ce qu’une condition soit vraie ou fausse. Remarque : vous pouvez interrompre l’exécution d’un script en appuyant sur Commande + point (.) sur Mac OS ou sur Echap sous Windows. AppleScript Boucle simple : repeat with counter from 1 to 20 --do something end repeat Boucle conditionnelle : set myStop to false repeat while myStop = false --do something, at some point setting myStop to true to leave the loop. end repeat Adobe InDesign CS2 Guide des scripts Introduction aux scripts 17 VBScript Boucle simple : For counter = 1 to 20 Rem do something Next Boucle conditionnelle : Do While myStop = false Rem do something, at some point setting myStop to true to leave the loop. loop JavaScript Boucle simple : for(var myCounter = 0; myCounter < 20; myCounter++){ //do something } Boucle conditionnelle : while (myStop == false){ //do something, at some point setting myStop to true to leave the loop. } Sous-routines et gestionnaires Les sous-routines et fonctions (en VBScript ou JavaScript) ou les gestionnaires (en AppleScript) sont des modules auxquels vous pouvez faire référence dans un script. (En VBScript, la seule véritable différence entre les sous-routines et les fonctions est qu’une fonction renvoie une valeur, contrairement à une sousroutine.) Généralement, vous allez envoyer une valeur ou une série de valeurs à une sous-routine (ou un gestionnaire) et obtenir une ou plusieurs autres valeurs. Il n’y a rien de particulier à mentionner sur le code des sous-routines et des gestionnaires (ces modules ont été créés pour vous éviter de taper les mêmes lignes de code de façon répétée dans un script). Si vous devez saisir ou coller la même ligne de code en différents endroits de votre script, vous tenez un bon candidat pour une sous-routine ou un gestionnaire. AppleScript --Calculate the geometric center of a selected page item --Assumes you have a single page item selected. tell application "Adobe InDesign CS2" set mySelection to item 1 of selection --Use "my" (or "of me") to specify a handler outside of the current "tell" context. set myCenterPoint to my myCalculateCenterPoint(mySelection) display dialog "x center: " & item 1 of myCenterPoint & return & "y center: " & item 2 of myCenterPoint end tell --The following lines define the handler. on myCalculateCenterPoint(myObject) set myGeometricBounds to geometric bounds of myObject set myX1 to item 2 of myGeometricBounds set myY1 to item 1 of myGeometricBounds set myX2 to item 4 of myGeometricBounds set myY2 to item 3 of myGeometricBounds set myXCenter to myX1 + ((myX2 - myX1) / 2) set myYCenter to myY1 + ((myY2 - myY1) / 2) return {myXCenter, myYCenter} end myCalculateCenterPoint 18 Introduction aux scripts Adobe InDesign CS2 Guide des scripts VBScript Rem Calculate the geometric center of a selected page item Rem Assumes you have a single page item selected. Set myInDesign = CreateObject("InDesign.Application.CS2") Set mySelection = myInDesign.Selection.Item(1) myCenterPoint = myCalculateCenterPoint(mySelection) MsgBox "x center: " & myCenterPoint(0) & vbCr & "y center: " & myCenterPoint(1) Function myCalculateCenterPoint(myObject) myBounds = myObject.GeometricBounds myX1 = myBounds(1) myY1 = myBounds(0) myX2 = myBounds(3) myY2 = myBounds(2) myXCenter = myX1 + ((myX2 - myX1) / 2) myYCenter = myY1 + ((myY2 - myY1) / 2) myCalculateCenterPoint = Array(myXCenter, myYCenter) End Function JavaScript with(app){ var mySelection = selection[0]; var myCenterPoint = myCalculateCenterPoint(mySelection); var myString = "x center: " + myCenterPoint[0] + "\n" + "y center: " + myCenterPoint[1]; alert(myString); } function myCalculateCenterPoint(myObject){ var myGeometricBounds = myObject.geometricBounds; var myX1 = myGeometricBounds[1]; var myY1 = myGeometricBounds[0]; var myX2 = myGeometricBounds[3]; var myY2 = myGeometricBounds[2]; var myXCenter = myX1 + ((myX2 - myX1)/2); var myYCenter = myY1 + ((myY2 - myY1)/2); return [myXCenter, myYCenter]; } Adobe InDesign CS2 Guide des scripts 3 Initiation aux scripts InDesign 19 Initiation aux scripts InDesign Ce chapitre rassemble des informations générales indispensables pour créer des scripts pour InDesign. Il donne aussi des exemples simples d’opérations de création de script InDesign. Même si vous connaissez déjà AppleScript, VBScript ou JavaScript, nous vous conseillons de lire ce chapitre, car il couvre un certain nombre de sujets spécifiques à InDesign. Mesures et positionnement Dans InDesign, tous les éléments et objets sont placés sur une page en fonction des mesures que vous spécifiez. Il est très utile de connaître le fonctionnement du système de coordonnées d’InDesign et les unités de mesure qu’il utilise. Coordonnées Comme tout autre programme de mise en page et de dessin, InDesign utilise une géométrie bidimensionnelle pour enregistrer la position d’objets sur une page ou une planche. La composante horizontale d’une paire de coordonnées (ou point) est appelée x et sa composante verticale y. Vous pouvez voir ces coordonnées dans la palette Transformation lorsqu’un objet est sélectionné avec l’outil Sélection. Comme dans l’interface utilisateur d’InDesign, les coordonnées sont mesurées par rapport à une origine (point zéro) qui peut se trouver dans l’angle supérieur gauche d’une page ou d’une planche, ou au niveau de la reliure d’une planche. Il existe une différence entre les coordonnées utilisées dans InDesign et le système de coordonnées géométrique traditionnel. Sur l’axe vertical (ou y) d’InDesign, les coordonnées en dessous de zéro sont des nombres positifs et celles situées au-dessus, des nombres négatifs. En général, InDesign renvoie des coordonnées dans l’ordre x, y et elles doivent également lui être envoyées dans cet ordre. Remarque : InDesign renvoie certaines coordonnées dans un ordre différent, et celles-ci doivent lui être envoyées dans le même ordre. Les délimitations géométriques et les délimitations visibles sont des tableaux de données contenant quatre coordonnées. Ces coordonnées définissent dans l’ordre les bords supérieur, gauche, inférieur et droit du cadre de sélection de l’objet (soit y1, x1, y2, x2). Pour indiquer à InDesign de placer la sélection active à une position située deux picas à droite et six picas au-dessous du point zéro, par exemple, vous pouvez utiliser les scripts ci-dessous. 20 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts AppleScript tell application "Adobe InDesign CS2" set mySelection to item 1 of selection move mySelection to {"2p", "6p"} end tell VBScript Set myInDesign = CreateObject("InDesign.Application.CS2") myInDesign.Selection.Item(1).Move Array("2p","6p") JavaScript with(app){ mySelection = selection[0]; mySelection.move(["2p", "6p"]); } Unités de mesure Pour envoyer des valeurs de mesure à InDesign, vous pouvez utiliser soit des nombres (14.65, par exemple) soit des chaînes de mesure (« 1p7.1 », par exemple). Si vous envoyez des nombres, InDesign utilise les unités de mesure actives de la composition ; si vous envoyez des chaînes de mesure, InDesign utilise les unités de mesure spécifiées dans chaque chaîne. InDesign renvoie les coordonnées et autres valeurs de mesure en utilisant les unités de mesure actives de la composition. Dans certains cas, les résultats ne sont pas présentés de la même façon que dans la palette Transformation d’InDesign. Si le système de mesure actif est en picas, par exemple, InDesign renvoie des valeurs fractionnaires sous forme de nombres décimaux, au lieu d’utiliser les conventions « picas et points » de la palette Transformation. « 1p6 », par exemple, est renvoyé comme « 1.5 ». InDesign procède de cette façon parce que le système de scripts ne peut pas exécuter d’opération arithmétique avec des chaînes de mesure ; si vous additionnez « 0p3.5 » et « 13p4 » par exemple, vous allez obtenir une erreur de script ; en revanche, si vous additionnez 0.2916 et 13.333 (les mêmes mesures après leur conversion) le résultat sera correct. Si votre script dépend de l’addition, la soustraction, la multiplication ou la division de valeurs de mesure spécifiques, il est préférable de convertir les unités de mesure correspondantes au début du script. A la fin du script, vous pourrez convertir à nouveau les unités de mesure afin de leur rendre leur aspect initial. Vous pouvez également utiliser des remplacements d’unités de mesures, comme dans beaucoup de nos scripts d’exemple. Un remplacement d’unité de mesure est une chaîne contenant un caractère spécial, comme dans les exemples ci-dessous. Caractère p Signification picas (le p peut être suivi de points supplémentaires) Exemple 1p6 pt points 18pt mm millimeters 6,35mm cm centimeters 0,635cm c cicéros (le c peut être suivi de didots supplémentaires) 1,4c i (ou in) inches 0,25i Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 21 Modèle d’objet de document InDesign Cette section présente des types d’objet clés et leur hiérarchie dans InDesign : Application : Préférences (de toute sorte) Application : Par défaut (Colors, ParagraphStyles, etc. ; les objets par défaut de l’application s’appliquent à tous les nouveaux documents) Application : Documents (collection de documents ouverts) Document : Préférences (de toute sorte) Document : Par défaut (Colors, ParagraphStyles, etc. ; objets par défaut du document) Document : Planches/Pages Planche/Page : PageItems (Rectangles, Ovals, Polygons, GraphicLines, TextFrames, etc.) Document : Articles (texte du document) Article : Objets texte (Paragraphs, Words, Characters, Lines, etc. ; texte de l’article) Un bouton est un élément de page (il permet notamment d’ajouter un bouton interactif à un document PDF exporté). Application : Boîtes de dialogue (boîtes de dialogue du script) (comprennent la plupart des gadgets d’interface utilisateur (radio button controls, dropdowns, checkbox controls, etc.) permettant de créer des boîtes de dialogues modales). Présentation du modèle d’objet InDesign Les objets et commandes disponibles dans InDesign sont tous documentés dans le Guide de référence pour les scripts Adobe InDesign CS2, mais vous pouvez également les percevoir du point de vue de votre système de scripts si vous utilisez AppleScript ou VBScript. JavaScript ne permet pas de visualiser les modèles d’objet InDesign. AppleScript Pour afficher le dictionnaire AppleScript d’InDesign : 1. Lancez InDesign et l’éditeur de scripts Apple. Si l’éditeur de scripts est introuvable, reportez-vous à la section « Conditions préalables » du chapitre Introduction. 2. Dans l’éditeur de scripts, choisissez Fichier > Ouvrir un dictionnaire. L’éditeur de scripts affiche la boîte de dialogue standard d’ouverture de fichiers. 3. Sélectionnez l’application InDesign, puis cliquez sur OK. L’éditeur de scripts affiche une liste des objets et commandes InDesign. Vous pouvez également voir une liste des propriétés associées à chaque objet. JavaScript et VBScript Si vous utilisez JavaScript pour écrire vos scripts InDesign, vous ne pouvez pas voir le modèle d’objet InDesign comme avec AppleScript ou VBScript. Vous devez vous reporter au chapitre correspondant du Guide de référence pour les scripts Adobe InDesign. 22 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts Visual Basic Pour afficher la bibliothèque d’objets InDesign en Visual Basic (les étapes suivantes sont présentées pour Visual Basic 6 ; les boîtes de dialogue pour les utilisateurs de Visual Basic 5 CCE et Visual Basic.NET sont légèrement différentes) : 1. Dans un projet Visual Basic, choisissez Projet > Références. Visual Basic affiche la boîte de dialogue Références. 2. Sélectionnez l’option Adobe InDesign CS2 Type Library dans la liste de références disponibles, puis cliquez sur OK. Si la bibliothèque n’apparaît pas dans la liste de références disponibles, cliquez sur Parcourir, puis sélectionnez le fichier Resources for Visual Basic.tlb (que vous trouverez généralement dans ~:\Documents and Settings\nom_utilisateur\Application Data\Adobe\InCopy\Version 4.0\ Scripting Support\4.0 -- nom_utilisateur étant votre nom d’utilisateur). Après avoir localisé le fichier, cliquez sur Ouvrir pour ajouter la référence à votre projet. 3. Sélectionnez Affichage > Explorateur d’objets. Visual Basic affiche la boîte de dialogue Explorateur d’objets. 4. Choisissez « InDesign » dans la liste de bibliothèques ouvertes du menu Projet/Bibliothèque. Visual Basic affiche les objets composant le modèle d’objet InDesign. 5. Cliquez sur une classe d’objet. Visual Basic affiche les propriétés et méthodes de l’objet. Pour obtenir des informations sur une propriété ou une méthode, sélectionnez-la. Visual Basic affiche sa définition au bas de la fenêtre Explorateur d’objets. Votre premier script InDesign Le premier projet classique abordé lors de l’apprentissage d’un nouveau langage de programmation consiste à afficher, ou à imprimer, le message « Hello World ». Pour cet exemple, nous allons créer une nouvelle composition InDesign et ajouter un bloc contenant ce message. La page de document créée ressemble à l’illustration ci-dessous. AppleScript Pour créer un AppleScript : 1. Ouvrez l’éditeur de scripts Apple. 2. Entrez le script ci-dessous. Les lignes précédées par deux tirets (--) sont des commentaires qui seront ignorés par le script. Nous avons inclus ces commentaires pour décrire les opérations du programme. Lorsque vous examinerez le script, vous remarquerez comment nous avons créé puis manipulé chaque Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 23 objet successivement. La commande AppleScript tell définit l’objet qui recevra le message que nous allons lui envoyer. --Hello World tell application "Adobe InDesign CS2" --Create a new document and assign its --identity to the variable "myDocument" set myDocument to make document tell myDocument --Create a new text frame on the first page. tell page 1 set myTextFrame to make text frame --Change the size of the text frame. set geometric bounds of myTextFrame to {"0p0", "0p0", "18p0", "18p0"} --Enter text in the text frame. set contents of myTextFrame to "Hello World!" end tell end tell end tell 3. Enregistrez le script. 4. Activez le script (cliquez sur Exécuter dans l’éditeur de scripts). InDesign crée une nouvelle composition, ajoute un bloc de texte et saisit du texte. Pendant ce processus, l’éditeur de scripts peut vous demander de localiser l’application InDesign. Dans ce cas, sélectionnez l’application dans la liste d’applications ; l’éditeur de scripts gardera cet emplacement en mémoire pour la prochaine exécution du script. VBScript Pour créer un VBasic : 1. Lancez une application de traitement de texte (Bloc-notes, par exemple). 2. Entrez le script ci-dessous. Les lignes précédées par Rem sont des commentaires qui sont ignorés par le script. Nous avons inclus ces commentaires pour décrire les opérations du programme. Lorsque vous examinerez le script, vous remarquerez comment nous avons créé puis manipulé chaque objet successivement. Il est inutile d’entrer les commentaires. Rem Hello World Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Créer un document. Set myDocument = myInDesign.Documents.Add Rem Get a reference to the first page. Set myPage = myDocument.Pages.Item(1) Rem Create a text frame. Set myTextFrame = myDocument.TextFrames.Add Rem Specify the size and shape of the text frame. myTextFrame.GeometricBounds = Array("0p0", "0p0", "18p0", "18p0") Rem Enter text in the text frame. myTextFrame.Contents = "Hello World!" 3. Enregistrez le fichier en texte seul dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. Affectez-lui l’extension de fichier .vbs. 4. Affichez la palette Scripts (si nécessaire). Pour exécuter le script, cliquez deux fois sur son nom dans la palette. Visual Basic Pour créer un script Visual Basic (les étapes suivantes sont présentées pour Visual Basic 6 ; les boîtes de dialogue pour les utilisateurs de Visual Basic 5 CCE et Visual Basic.NET sont légèrement différentes) : 1. Activez Visual Basic, puis créez un nouveau projet. Ajoutez la référence InDesign CS Type Library au projet, comme expliqué précédemment. 24 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts 2. Pour créer un nouveau bouton sur le formulaire par défaut, utilisez l’outil CommandButton. Cliquez deux fois sur le bouton pour ouvrir la fenêtre de code. 3. Entrez le code ci-dessous (entre les lignes Private Sub et End Sub définissant le code du bouton). Les lignes précédées par Rem sont des commentaires qui sont ignorés par le script. Nous avons inclus ces commentaires pour décrire les opérations du programme. Lorsque vous examinerez le script, vous remarquerez comment nous avons créé puis manipulé chaque objet successivement. Il est inutile d’entrer les commentaires. Rem Hello World Rem Declare variable types (optional if Option Explicit is off). Dim myInDesign As InDesign.Application Dim myDocument As InDesign.Document Dim myPage As InDesign.Page Dim myTextFrame As InDesign.TextFrame Rem End of variable type declarations. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Créer un document. Set myDocument = myInDesign.Documents.Add Rem Get a reference to the first page. Set myPage = myDocument.Pages.Item(1) Rem Create a text frame. Set myTextFrame = myDocument.TextFrames.Add Rem Specify the size and shape of the text frame. myTextFrame.GeometricBounds = Array("0p0", "0p0", "18p0", "18p0") Rem Enter text in the text frame. myTextFrame.Contents = "Hello World!" 4. Enregistrez le formulaire. 5. Lancez InDesign. 6. Revenez à Visual Basic, puis exécutez le programme. 7. Cliquez sur le bouton que vous avez créé précédemment. InDesign crée une nouvelle composition, crée un bloc de texte et saisit du texte. JavaScript Pour créer un script JavaScript : 1. Utilisez n’importe quelle application de traitement de texte (InDesign ou Outils ExtendScript) pour saisir le texte ci-dessous. //Hello World! var myDocument = app.documents.add(); with(myDocument){ var myPage = myDocument.pages.item(0); with(myPage){ //Create a new text frame and assign it to the variable "myTextFrame" var myTextFrame = textFrames.add(); //Specify the size and shape of the text frame. myTextFrame.geometricBounds = [ "0p0", "0p0", "18p0", "18p0"]; //Enter text in the text frame. myTextFrame.contents = "Hello World!" } } 2. Enregistrez le texte dans un fichier de texte brut avec l’extension .jsx dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 25 Ajout de caractéristiques à « Hello World » Nous allons maintenant créer un nouveau script qui modifiera la composition « Hello World » créée avec notre premier script. Pour notre second script, nous allons vous apprendre comment : Obtenir le document actif. Utiliser une fonction (ou un gestionnaire dans AppleScript). Obtenir les dimensions et les marges des pages de la composition active. Redimensionner un bloc de texte. Changer la mise en forme du texte dans son bloc. Après mise en forme, la page de document ressemble à l’illustration ci-dessous : AppleScript Pour créer le script : 1. Vérifiez que le document « Hello World » est bien ouvert. Si vous avez fermé le document sans l’enregistrer, il vous suffit d’exécuter à nouveau le script précédent pour créer un nouveau document « Hello World ». 2. Choisissez Fichier > Nouveau dans l’éditeur de scripts pour créer un nouveau script. 3. Entrez le script ci-dessous. --Improved "Hello World" tell application "Adobe InDesign CS2" --Get a reference to a font. try --Enter the name of a font on your system, if necessary. set myFont to font "Helvetica" end try --Get the active document and assign the result to the variable "myDocument." set myDocument to active document tell myDocument --Use the handler "myGetBounds" to get the bounds of the --"live area" inside the margins of page 1. set myBounds to my myGetBounds(myDocument, page 1) tell text frame 1 of page 1 --Resize the text frame to match the page margins. set geometric bounds to myBounds tell paragraph 1 --Change the font, size, and paragraph alignment. try set applied font to myFont end try set point size to 72 set justification to center align end tell end tell end tell 26 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts end tell --myGetBounds is a handler that returns the bounds of the "live area" of a page. on myGetBounds(myDocument, myPage) tell application "Adobe InDesign CS2" set myPageHeight to page height of document preferences of myDocument set myPageWidth to page width of document preferences of myDocument set myLeft to left of margin preferences of myPage set myTop to top of margin preferences of myPage set myRight to right of margin preferences of myPage set myBottom to bottom of margin preferences of myPage end tell set myRight to myLeft + (myPageWidth - (myRight + myLeft)) set myBottom to myTop + (myPageHeight - (myBottom + myTop)) return {myTop, myLeft, myBottom, myRight} end myGetBounds 4. Enregistrez le script. 5. Exécutez le nouveau script. VBScript Pour créer le script : 1. Lancez une application de traitement de texte (Bloc-notes, par exemple). 2. Vérifiez que le document « Hello World » est bien ouvert. Si vous avez fermé le document sans l’enregistrer, il vous suffit d’exécuter à nouveau le script précédent pour créer un nouveau document « Hello World ». 3. Entrez le script ci-dessous. Rem Improved "Hello World" Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Enter the name of a font on your system, if necessary. Set myFont = myInDesign.Fonts.Item("Arial") Set myDocument = myInDesign.ActiveDocument Set myPage = myDocument.Pages.Item(1) Rem Get page width and page height using the function "myGetBounds". myBounds = myGetBounds(myDocument, myPage) Set myTextFrame = myPage.TextFrames.Item(1) Rem Resize the text frame to match the publication margins. myTextFrame.GeometricBounds = myBounds Set myParagraph = myTextFrame.Paragraphs.Item(1) Rem Change the font, size, and alignment. If TypeName(myFont) <> "Nothing" Then myParagraph.AppliedFont = myFont End If myParagraph.PointSize = 48 myParagraph.Justification = idJustification.idLeftAlign Function myGetBounds(myDocument, myPage) myPageHeight = myDocument.DocumentPreferences.PageHeight myPageWidth = myDocument.DocumentPreferences.PageWidth myTop = myPage.MarginPreferences.Top myLeft = myPage.MarginPreferences.Left myRight = myPage.MarginPreferences.Right myBottom = myPage.MarginPreferences.Bottom myRight = myPageWidth - myRight myBottom = myPageHeight - myBottom myGetBounds = Array(myTop, myLeft, myBottom, myRight) End Function 4. Enregistrez le texte dans un fichier de texte brut avec l’extension .vbs dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 5. Pour exécuter le nouveau script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 27 Visual Basic Pour créer le script : 1. Ouvrez le projet créé pour le script « Hello World » si ce n’est pas déjà fait. 2. Vérifiez que le document « Hello World » est bien ouvert. Si vous avez fermé le document sans l’enregistrer, il vous suffit d’exécuter à nouveau le script précédent pour créer un nouveau document « Hello World ». 3. Ajoutez un nouveau bouton au formulaire. 4. Cliquez deux fois sur le bouton pour ouvrir la fenêtre de code, puis entrez le script ci-dessous. Rem Improved "Hello World" Rem Declare variable types (optional if Option Explicit is off) Dim myInDesign As InDesign.Application Dim myDocument As InDesign.Document Dim myPage As InDesign.Page Dim myStory As InDesign.Story Dim myTextFrame As InDesign.TextFrame Rem End of variable type declarations. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Enter the name of a font on your system, if necessary. Set myFont = myInDesign.Fonts.Item("Arial") Set myDocument = myInDesign.ActiveDocument Set myPage = myDocument.Pages.Item(1) Rem Get page width and page height using the function "myGetBounds". myBounds = myGetBounds(myDocument, myPage) Set myTextFrame = myPage.TextFrames.Item(1) Rem Resize the text frame to match the publication margins. myTextFrame.GeometricBounds = myBounds Set myParagraph = myTextFrame.Paragraphs.Item(1) Rem Change the font, size, and alignment. If TypeName(myFont) <> "Nothing" Then myParagraph.AppliedFont = myFont End If myParagraph.PointSize = 48 myParagraph.Justification = idJustification.idLeftAlign 5. Après la ligne End Sub, entrez le texte ci-dessous pour créer une fonction. Private Function myGetBounds(myDocument, myPage) Rem Declare variable types (optional if Option Explicit is turned off) Rem Omit if you are using VBSCript. Dim myPageHeight, myPageWidth, myTop, myLeft, myRight, myBottom As Double Rem End of variable declaractions. myPageHeight = myDocument.DocumentPreferences.PageHeight myPageWidth = myDocument.DocumentPreferences.PageWidth myTop = myPage.MarginPreferences.Top myLeft = myPage.MarginPreferences.Left myRight = myPage.MarginPreferences.Right myBottom = myPage.MarginPreferences.Bottom myRight = myPageWidth - myRight myBottom = myPageHeight - myBottom myGetBounds = Array(myTop, myLeft, myBottom, myRight) Rem If you are using VB.NET, replace the line above with the following: Rem myGetBounds = New Double(myTop, myLeft, myBottom, myRight) End Function 6. Enregistrez le formulaire. 7. Pour exécuter le nouveau script, cliquez sur le bouton créé à l’étape 3. 28 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts JavaScript Pour créer le script : 1. Vérifiez que le document « Hello World » est bien ouvert. Si vous avez fermé le document sans l’enregistrer, il vous suffit d’exécuter à nouveau le script précédent pour créer un nouveau document « Hello World ». 2. Entrez le JavaScript ci-dessous dans un nouveau fichier texte. //Improved Hello World! //Enter the name of a font on your system, if necessary. myFont = app.fonts.item("Arial"); var myDocument = app.activeDocument with(myDocument){ var myPage = pages.item(0); var myBounds = myGetBounds(myPage,myDocument); with(myDocument.pages.item(0)){ //Get a reference to the text frame. var myTextFrame = textFrames.item(0); //Change the size of the text frame. myTextFrame.geometricBounds = myBounds; var myParagraph = myTextFrame.paragraphs.item(0); myParagraph.appliedFont = myFont; myParagraph.justification = Justification.leftAlign; myParagraph.pointZSize = 48; } } //myGetBounds calculates and return the bounds of the "live area" of the page. function myGetBounds(myPage, myDocument){ var array = new Array() var item = 0; with (myDocument.documentPreferences){ var myPageHeight = pageHeight; var myPageWidth = pageWidth; } with(myPage.marginPreferences){ var myX1 = left; var myY1 = top; var myY2 = bottom; var myX2 = right; } array[item++] = myY1; array[item++] = myX1; array[item++] = myPageHeight - myY2; array[item++] = myPageWidth - myX2; return array; } 3. Enregistrez le texte dans un fichier de texte brut avec l’extension .jsx dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 4. Pour exécuter le nouveau script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. Initiation aux scripts InDesign 29 Adobe InDesign CS2 Guide des scripts Ajout d’une interface utilisateur à « Hello World » Pour que votre script puisse collecter et agir sur les informations entrées par vos soins ou par tout autre utilisateur, vous pouvez lui ajouter une interface utilisateur. En AppleScript, VBScript et JavaScript, il est possible de créer des boîtes de dialogue pour les questions oui/non et les entrées de texte, mais vous aurez parfois besoin de créer des boîtes de dialogue plus complexes. En Visual Basic, il est possible de créer des interfaces utilisateur complètes, mais elles seront exécutées à partir d’un fichier Visual Basic exécutable distinct. Avec les scripts InDesign, vous aurez la possibilité de créer des boîtes de dialogue complexes à afficher dans InDesign et ressemblant à l’interface utilisateur standard du programme. Présentation des boîtes de dialogue Une boîte de dialogue InDesign est un objet de script InDesign comme un autre. Une boîte de dialogue peut contenir plusieurs sortes d’éléments. Eléments d’une boîte de dialogue Champs d’entrée de texte Nom InDesign Champs d’entrée de nombre Real editbox, integer editbox, measurement editbox, percent editbox, angle editbox Menus déroulants Dropdown controls Commandes composées d’un champ d’entrée de texte et d’un menu déroulant Combobox controls Cases à cocher Checkbox controls Cases d’option Radiobutton controls Text editbox controls L’objet boîte de dialogue n’héberge pas directement les commandes (c’est le rôle de l’objet colonne de boîte de dialogue). Les colonnes de boîte de dialogue permettent de contrôler la position des commandes dans une boîte de dialogue. Il est possible de diviser une colonne de boîte de dialogue en plusieurs autres colonnes ou volets de bordure (qui peuvent eux-mêmes être divisés en autres colonnes de boîte de dialogue et volets de bordure). Border panel Dialog column Dialog column Dialog column Dialog column Static text Radiobutton group Radiobutton control Integer editbox Checkbox control Dropdown 30 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts Comme tout autre objet de script InDesign, les différentes parties d’une boîte de dialogue possèdent leurs propres propriétés. Une commande checkbox, par exemple, possède une propriété pour son texte (« static label ») et une autre pour son état (« checked state »). La commande dropdown possède une propriété permettant de paramétrer la liste d’options apparaissant dans son menu (« string list »). Pour utiliser une boîte de dialogue dans un script, vous devez créer l’objet boîte de dialogue, le remplir de commandes, afficher la boîte de dialogue et rassembler les valeurs de ses commandes afin de les rendre disponibles pour le script. Les boîtes de dialogue restent dans la mémoire InDesign jusqu’à leur destruction. De cette façon, vous pouvez conserver une boîte de dialogue en mémoire et faire en sorte que les données stockées dans ses propriétés soient utilisées par plusieurs scripts. Notez que ces boîtes de dialogue occupent de l’espace en mémoire et doivent être supprimées lorsqu’elles sont inutilisées. En règle générale, il est préférable de détruire l’objet boîte de dialogue avant la fin de l’exécution du script. Ajout de l’interface utilisateur Pour cet exemple, nous allons ajouter une interface utilisateur simple à notre script « Hello World ». Les options de la boîte de dialogue permettront de spécifier le texte d’exemple (et changer ainsi la phrase « Hello World », qui doit commencer à vous lasser) et de modifier le corps du texte. Nous avons également utilisé un gestionnaire (AppleScript) ou une fonction (VBScript, JavaScript) pour obtenir la zone active de la page active (« myGetBounds »). AppleScript 1. Entrez l’AppleScript ci-dessous dans l’éditeur de scripts. --Simple User Interface Example tell application "Adobe InDesign CS2" activate set myDocument to make document set myDialog to make dialog tell myDialog set name to "Simple User Interface Example Script" set myDialogColumn to make dialog column tell myDialogColumn --Create a text entry field. set myTextEditField to make text editbox with properties ¬ {edit contents:"Hello World!", min width:180} --Create a number (real) entry field. set myPointSizeField to make real editbox with properties {edit contents:"72"} end tell show --Get the settings from the dialog box. --Get the point size from the point size field. set myPointSize to edit contents of myPointSizeField as real --Get the example text from the text edit field. set myString to edit contents of myTextEditField --Supprimer la boîte de dialogue de la mémoire. destroy myDialog end tell tell page 1 of myDocument --Create a text frame. set myTextFrame to make text frame set geometric bounds of myTextFrame to my myGetBounds(myDocument, page 1 of myDocument) --Apply the settings from the dialog box to the text frame. set contents of myTextFrame to myString --Set the point size of the text in the text frame. set point size of text 1 of myTextFrame to myPointSize end tell end tell on myGetBounds(myDocument, myPage) tell application "Adobe InDesign CS2" set myPageHeight to page height of document preferences of myDocument set myPageWidth to page width of document preferences of myDocument set myLeft to left of margin preferences of myPage set myTop to top of margin preferences of myPage Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 31 set myRight to right of margin preferences of myPage set myBottom to bottom of margin preferences of myPage end tell set myRight to myLeft + (myPageWidth - (myRight + myLeft)) set myBottom to myTop + (myPageHeight - (myBottom + myTop)) return {myTop, myLeft, myBottom, myRight} end myGetBounds 2. Enregistrez le texte sous forme de script compilé dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign ou lancez-le à partir de l’éditeur de scripts. VBScript 1. Entrez le VBScript ci-dessous dans un traitement de texte. Rem Simple User Interface Example Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDialog = myInDesign.Dialogs.Add myDialog.CanCancel = True myDialog.Name = " Simple User Interface Example Script" Set myDialogColumn = myDialog.DialogColumns.Add Set myTextEditField = myDialogColumn.TextEditboxes.Add myTextEditField.EditContents = "Hello World!" myTextEditField.MinWidth = 180 Rem Create a number (real) entry field. Set myPointSizeField = myDialogColumn.RealEditboxes.Add myPointSizeField.EditValue = 72 myDialog.Show Rem Get the values from the dialog box controls. myString = myTextEditField.EditContents myPointSize = myPointSizeField.EditValue Rem Supprimer la boîte de dialogue de la mémoire. myDialog.Destroy Rem Créer un document. Set myDocument = myInDesign.Documents.Add Set myTextFrame = myDocument.Pages.Item(1).TextFrames.Add Rem Resize the text frame to the "live" area of the page (using the function "myGetBounds"). myBounds = myGetBounds(myDocument, myDocument.Pages.Item(1)) myTextFrame.GeometricBounds = myBounds Rem Enter the text from the dialog box in the text frame. myTextFrame.Contents = myString Rem Set the size of the text to the size you entered in the dialog box. myTextFrame.Texts.Item(1).PointSize = myPointSize Rem Function for getting the bounds of the "live area" Function myGetBounds(myDocument, myPage) myPageHeight = myDocument.DocumentPreferences.PageHeight myPageWidth = myDocument.DocumentPreferences.PageWidth myTop = myPage.MarginPreferences.Top myLeft = myPage.MarginPreferences.Left myRight = myPage.MarginPreferences.Right myBottom = myPage.MarginPreferences.Bottom myRight = myPageWidth - myRight myBottom = myPageHeight - myBottom myGetBounds = Array(myTop, myLeft, myBottom, myRight) End Function 2. Enregistrez le texte dans un fichier de texte brut avec l’extension .vbs dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. 32 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts JavaScript 1. Entrez le JavaScript ci-dessous dans un traitement de texte ou l’utilitaire Outils ExtendScript. //Exemple d’interface utilisateur simple var myDialog = app.dialogs.add({name:"Simple User Interface Example Script",canCancel:true}); with(myDialog){ //Add a dialog column. with(dialogColumns.add()){ //Create a text edit field. var myTextEditField = textEditboxes.add({editContents:"Hello World!", minWidth:180}); //Create a number (real) entry field. var myPointSizeField = realEditboxes.add({editValue:72}); } } //Display the dialog box. var myResult = myDialog.show(); if(myResult == true){ //Get the values from the dialog box controls. var myString = myTextEditField.editContents; var myPointSize = myPointSizeField.editValue; //Supprimer la boîte de dialogue de la mémoire. myDialog.destroy(); //Créer un document. var myDocument = app.documents.add() with(myDocument){ //Create a text frame. var myTextFrame = pages.item(0).textFrames.add(); //Resize the text frame to the "live" area of the page (using the function "myGetBounds"). var myBounds = myGetBounds(myDocument, myDocument.pages.item(0)); myTextFrame.geometricBounds=myBounds; //Enter the text from the dialog box in the text frame. myTextFrame.contents=myString; //Set the size of the text to the size you entered in the dialog box. myTextFrame.texts.item(0).pointSize = myPointSize; } } else{ //User clicked Cancel, so remove the dialog box from memory. myDialog.destroy(); } function myGetBounds(myDocument, myPage){ with(myDocument.documentPreferences){ var myPageHeight = pageHeight; var myPageWidth = pageWidth; } with(myPage.marginPreferences){ var myTop = top; var myLeft = left; var myRight = right; var myBottom = bottom; } myRight = myPageWidth - myRight; myBottom = myPageHeight- myBottom; return [myTop, myLeft, myBottom, myRight]; } 2. Enregistrez le texte dans un fichier de texte brut avec l’extension .jsx dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 33 Création d’une interface utilisateur plus complexe Dans l’exemple ci-dessous, nous allons ajouter des commandes supplémentaires et de différents types à notre boîte de dialogue. L’exemple permet de créer une boîte de dialogue ressemblant à l’illustration ci-dessous. AppleScript 1. Entrez l’AppleScript ci-dessous dans l’éditeur de scripts. --Exemple d’interface utilisateur complexe tell application "Adobe InDesign CS2" activate set myDocument to make document set myDialog to make dialog --This example dialog box uses border panels and dialog columns to --separate and organize the user interface items in the dialog. tell myDialog set name to "User Interface Example Script" set myDialogColumn to make dialog column tell myDialogColumn set myBorderPanel to make border panel tell myBorderPanel set myDialogColumn to make dialog column tell myDialogColumn make static text with properties {static label:"Message:"} end tell set myDialogColumn to make dialog column tell myDialogColumn set myTextEditField to make text editbox with properties ¬ {edit contents:"Hello World!", min width:180} end tell end tell set myBorderPanel to make border panel tell myBorderPanel set myDialogColumn to make dialog column tell myDialogColumn make static text with properties {static label:"Point Size:"} end tell set myDialogColumn to make dialog column tell myDialogColumn set myPointSizeField to make real editbox with properties {edit contents:"72"} end tell end tell set myBorderPanel to make border panel tell myBorderPanel set myDialogColumn to make dialog column tell myDialogColumn make static text with properties {static label:"Vertical Justification:"} end tell set myDialogColumn to make dialog column 34 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts tell myDialogColumn set myVerticalJustificationMenu to make dropdown with properties ¬ {string list:{"Top", "Center", "Bottom"}, selected index:0} end tell end tell set myBorderPanel to make border panel tell myBorderPanel make static text with properties {static label:"Paragraph Alignment:"} set myParagraphAlignmentGroup to make radiobutton group tell myParagraphAlignmentGroup set myLeftRadioButton to make radiobutton control with properties ¬ {static label:"Left", checked state:true} set myCenterRadioButton to make radiobutton control with properties ¬ {static label:"Center"} set myRightRadioButton to make radiobutton control with properties ¬ {static label:"Right"} end tell end tell end tell show --Get the settings from the dialog box. --Get the point size from the point size field. set myPointSize to edit contents of myPointSizeField as real --Get the example text from the text edit field. set myString to edit contents of myTextEditField --Get the vertical justification setting from the pop-up menu. if selected index of myVerticalJustificationMenu is 0 then set myVerticalJustification to top align else if selected index of myVerticalJustificationMenu is 1 then set myVerticalJustification to center align else set myVerticalJustification to bottom align end if --Get the paragraph alignment setting from the radiobutton group. get properties of myParagraphAlignmentGroup if selected button of myParagraphAlignmentGroup is 0 then set myParagraphAlignment to left align else if selected button of myParagraphAlignmentGroup is 1 then set myParagraphAlignment to center align else set myParagraphAlignment to right align end if --Supprimer la boîte de dialogue de la mémoire. destroy myDialog end tell tell page 1 of myDocument set myTextFrame to make text frame set geometric bounds of myTextFrame to my myGetBounds(myDocument, page 1 of myDocument) --Apply the settings from the dialog box to the text frame. set contents of myTextFrame to myString --Apply the vertical justification setting. set vertical justification of text frame preferences of myTextFrame to ¬ myVerticalJustification --Apply the paragraph alignment ("justification"). --"text 1 of myTextFrame" is all of the text in the text frame. set justification of text 1 of myTextFrame to myParagraphAlignment --Set the point size of the text in the text frame. set point size of text 1 of myTextFrame to myPointSize end tell end tell on myGetBounds(myDocument, myPage) tell application "Adobe InDesign CS2" set myPageHeight to page height of document preferences of myDocument set myPageWidth to page width of document preferences of myDocument set myLeft to left of margin preferences of myPage set myTop to top of margin preferences of myPage set myRight to right of margin preferences of myPage set myBottom to bottom of margin preferences of myPage end tell set myRight to myLeft + (myPageWidth - (myRight + myLeft)) set myBottom to myTop + (myPageHeight - (myBottom + myTop)) return {myTop, myLeft, myBottom, myRight} end myGetBounds Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 35 2. Enregistrez le texte sous forme de script compilé dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign ou lancez-le à partir de l’éditeur de scripts. VBScript 1. Entrez le VBScript ci-dessous dans un traitement de texte. Rem Complex User Interface Example Set myInDesign = CreateObject("InDesign.Application.CS2") myInDesign.Activate Set myDialog = myInDesign.Dialogs.Add myDialog.CanCancel = True myDialog.Name = "User Interface Example Script" Rem Create a dialog column. Set myDialogColumn = myDialog.DialogColumns.Add Rem Create a border panel. Set myBorderPanel = myDialogColumn.BorderPanels.Add Rem Create a dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myStaticText = myTempDialogColumn.StaticTexts.Add myStaticText.StaticLabel = "Message:" Rem Create another dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myTextEditField = myTempDialogColumn.TextEditboxes.Add myTextEditField.EditContents = "Hello World!" myTextEditField.MinWidth = 180 Rem Create another border panel. Set myBorderPanel = myDialogColumn.BorderPanels.Add Rem Create a dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myStaticText = myTempDialogColumn.StaticTexts.Add myStaticText.StaticLabel = "Point Size:" Rem Create another dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myPointSizeField = myTempDialogColumn.RealEditboxes.Add myPointSizeField.EditValue = 72 Rem Create another border panel. Set myBorderPanel = myDialogColumn.BorderPanels.Add Rem Create a dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myStaticText = myTempDialogColumn.StaticTexts.Add myStaticText.StaticLabel = "Vertical Justification:" Rem Create another dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myVerticalJustificationMenu = myTempDialogColumn.Dropdowns.Add myVerticalJustificationMenu.StringList = Array("Top", "Center", "Bottom") myVerticalJustificationMenu.SelectedIndex = 0 Rem Create another border panel. Set myBorderPanel = myDialogColumn.BorderPanels.Add Rem Create a dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myStaticText = myTempDialogColumn.StaticTexts.Add myStaticText.StaticLabel = "Paragraph Alignment:" Rem Create another dialog column inside the border panel. Set myTempDialogColumn = myBorderPanel.DialogColumns.Add Set myRadioButtonGroup = myTempDialogColumn.RadiobuttonGroups.Add Set myLeftRadioButton = myRadioButtonGroup.RadiobuttonControls.Add myLeftRadioButton.StaticLabel = "Left" myLeftRadioButton.CheckedState = True Set myCenterRadioButton = myRadioButtonGroup.RadiobuttonControls.Add myCenterRadioButton.StaticLabel = "Center" Set myRightRadioButton = myRadioButtonGroup.RadiobuttonControls.Add myRightRadioButton.StaticLabel = "Right" Rem If the user clicked OK, then create the example document. If myDialog.Show = True Then Rem Get the values from the dialog box controls. myString = myTextEditField.EditContents myPointSize = myPointSizeField.EditValue 36 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts Rem Créer un document. Set myDocument = myInDesign.Documents.Add Set myTextFrame = myDocument.Pages.Item(1).TextFrames.Add Rem Resize the text frame to the "live" area of the page (using the function "myGetBounds"). myBounds = myGetBounds(myDocument, myDocument.Pages.Item(1)) myTextFrame.GeometricBounds = myBounds Rem Enter the text from the dialog box in the text frame. myTextFrame.Contents = myString Rem Set the size of the text to the size you entered in the dialog box. myTextFrame.Texts.Item(1).PointSize = myPointSize Rem Set the vertical justification of the text frame to the dialog menu choice. Select Case myVerticalJustificationMenu.SelectedIndex Case 0 myTextFrame.TextFramePreferences.VerticalJustification = idVerticalJustification. idTopAlign Case 1 myTextFrame.TextFramePreferences.VerticalJustification = ¬ idVerticalJustification.idCenterAlign Case Else myTextFrame.TextFramePreferences.VerticalJustification = idTopAlign.idBottomAlign End Select Rem set the paragraph alignment of the text to the dialog radio button choice. Select Case myRadioButtonGroup.SelectedButton Case 0 myTextFrame.Texts.Item(1).Justification = idJustification.idLeftAlign Case 1 myTextFrame.Texts.Item(1).Justification = idJustification.idCenterAlign Case Else myTextFrame.Texts.Item(1).Justification = idJustification.idRightAlign End Select Rem Supprimer la boîte de dialogue de la mémoire. myDialog.Destroy End If Rem Function for getting the bounds of the "live area" Function myGetBounds(myDocument, myPage) myPageHeight = myDocument.DocumentPreferences.PageHeight myPageWidth = myDocument.DocumentPreferences.PageWidth myTop = myPage.MarginPreferences.Top myLeft = myPage.MarginPreferences.Left myRight = myPage.MarginPreferences.Right myBottom = myPage.MarginPreferences.Bottom myRight = myPageWidth - myRight myBottom = myPageHeight - myBottom myGetBounds = Array(myTop, myLeft, myBottom, myRight) End Function 2. Enregistrez le texte dans un fichier de texte brut avec l’extension .vbs dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. JavaScript 1. Entrez le JavaScript ci-dessous dans un traitement de texte. //Exemple d’interface utilisateur complexe //Create a dialog. var myDialog = app.dialogs.add({name:"User Interface Example Script", canCancel:true}); with(myDialog){ //Add a dialog column. with(dialogColumns.add()){ //Create a border panel. with(borderPanels.add()){ with(dialogColumns.add()){ //The following line shows how to set a property as you create an object. staticTexts.add({staticLabel:"Message:"}); } with(dialogColumns.add()){ //The following line shows how to set multiple properties as you create an object. var myTextEditField = textEditboxes.add({editContents:"Hello World!", Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 37 minWidth:180}); } } //Create another border panel. with(borderPanels.add()){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"Point Size:"}); } with(dialogColumns.add()){ //Create a number entry field. Note that this field uses editValue //rather than editText (as a textEditBox would). var myPointSizeField = realEditboxes.add({editValue:72}); } } //Create another border panel. with(borderPanels.add()){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"Vertical Justification:"}); } with(dialogColumns.add()){ //Create a pop-up menu ("dropdown") control. var myVerticalJustificationMenu = dropdowns.add({stringList:["Top", "Center", "Bottom"], selectedIndex:0}); } } //Create another border panel. with(borderPanels.add()){ staticTexts.add({staticLabel:"Paragraph Alignment:"}); var myRadioButtonGroup = radiobuttonGroups.add(); with(myRadioButtonGroup){ var myLeftRadioButton = radiobuttonControls.add({staticLabel:"Left", checkedState: true}); var myCenterRadioButton = radiobuttonControls.add({staticLabel:"Center"}); var myRightRadioButton = radiobuttonControls.add({staticLabel:"Right"}); } } } } //Display the dialog box. if(myDialog.show() == true){ var myParagraphAlignment, myString, myPointSize, myVerticalJustification; //If the user didn’t click the Cancel button, //then get the values back from the dialog box. //Get the example text from the text edit field. myString = myTextEditField.editContents //Get the point size from the point size field. myPointSize = myPointSizeField.editValue; //Get the vertical justification setting from the pop-up menu. if(myVerticalJustificationMenu.selectedIndex == 0){ myVerticalJustification = VerticalJustification.topAlign; } else if(myVerticalJustificationMenu.selectedIndex == 1){ myVerticalJustification = VerticalJustification.centerAlign; } else{ myVerticalJustification = VerticalJustification.bottomAlign; } //Get the paragraph alignment setting from the radiobutton group. if(myRadioButtonGroup.selectedButton == 0){ myParagraphAlignment = Justification.leftAlign; } else if(myRadioButtonGroup.selectedButton == 1){ myParagraphAlignment = Justification.centerAlign; } else{ myParagraphAlignment = Justification.rightAlign; } myDialog.destroy(); //Now create the document and apply the properties to the text. var myDocument = app.documents.add(); with(myDocument){ 38 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts var myPage = pages[0]; with(myPage){ //Create a text frame. var myTextFrame = pages.item(0).textFrames.add(); with(myTextFrame){ //Set the geometric bounds of the frame using the "myGetBounds" function. geometricBounds = myGetBounds(myDocument, myPage); //Set the contents of the frame to the string you entered in the dialog box. contents = myString; //Set the alignment of the paragraph. texts.item(0).justification = myParagraphAlignment; //Set the point size of the text. texts.item(0).pointSize = myPointSize; //Set the vertical justification of the text frame. textFramePreferences.verticalJustification = myVerticalJustification; } } } } else{ myDialog.destroy() } //Utility function for getting the bounds of the "live area" of a page. function myGetBounds(myDocument, myPage){ with(myDocument.documentPreferences){ var myPageHeight = pageHeight; var myPageWidth = pageWidth; } with(myPage.marginPreferences){ var myTop = top; var myLeft = left; var myRight = right; var myBottom = bottom; } myRight = myPageWidth - myRight; myBottom = myPageHeight- myBottom; return [myTop, myLeft, myBottom, myRight]; } 2. Enregistrez le texte dans un fichier de texte brut avec l’extension .jsx dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. 3. Pour tester le script, cliquez deux fois sur son nom dans la palette Scripts d’InDesign. Gestion des erreurs Supposons l’exemple suivant : vous avez écrit un script de mise en forme pour tout texte sélectionné. Que doit faire le script si la sélection active n’est pas une sélection de texte mais celle d’un rectangle, d’un ovale ou d’un polygone ? La gestion des erreurs permet au script de répondre aux situations inattendues. Si vous avez le contrôle total du contexte dans lequel votre script s’exécute, la gestion des erreurs ne vous concerne pas. Dans le cas contraire, en revanche, vous devez ajouter ces fonctions à votre script. Les exemples ci-après montrent comment interrompre l’exécution d’un script lorsque aucun objet n’est sélectionné dans InDesign. AppleScript tell application "Adobe InDesign CS2" --First, check to see whether any InDesign documents are open. --If no documents are open, display an error message. if (count documents) is not equal to 0 then set mySelection to selection if (count mySelection) is not equal to 0 then --Something is selected. If this were a real script, you would --now do something with the object or objects in the selection. display dialog "You have " & (count mySelection) & " items selected." else Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 39 --No objects were selected, so display an error message. display dialog "No InDesign objects are selected. Please select an object and try again." end if else --No documents were open, so display an error message. display dialog "No InDesign documents are open. Please open a document and try again." end if end tell VBScript Set myInDesign = CreateObject("InDesign.Application.CS2") Rem First, check to see whether any InDesign documents are open. Rem If no documents are open, display an error message. If myInDesign.Documents.Count <> 0 Then If myInDesign.Selection.Count > 0 Then Rem Something is selected. If this were a real script, you would Rem now do something with the object or objects in the selection. MsgBox "You have " & CStr(myInDesign.Selection.Count) & " items selected." Else Rem Nothing is selected, so display an error message. MsgBox "No InDesign objects are selected. Please select an object and try again." End If Else Rem No documents are open, so display an error message. MsgBox "No InDesign documents are open. Please open a file and try again." End If JavaScript //First, check to see whether any InDesign documents are open. //If no documents are open, display an error message. if (app.documents.length > 0){ if (app.selection.length > 0) { //Something is selected. If this were a real script, you would //now do something with the object or objects in the selection. alert("You have " + app.selection.length + " items selected.") } else { //Nothing is selected, so display an error message. alert("Nothing is selected. Please select an object and try again.") } } else { //No documents are open, so display an error message. alert("No InDesign documents are open. Please open a document and try again.") } Vous pouvez également utiliser l’instruction JavaScript « try…catch » pour la gestion des erreurs, comme illustré ci-dessous. //Display the type of the first item in the selection. try { myObjectType = app.selection[0].constructor.name; alert("The first selected item is a " + myObjectType + " object."); } catch (e){ if (app.documents.length == 0){ //No documents are open, so display an error message. alert("No InDesign documents are open. Please open a document and try again."); } else { if (app.selection.length == 0){ //Nothing is selected, so display an error message. alert("Nothing is selected. Please select an object and try again."); } else{ alert("An error occurred, but I’m not sure what it was."); } } } 40 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts Utilisation des palettes pour gérer des scripts Utilisation de la palette Scripts La palette Scripts d’InDesign représente le meilleur moyen pour exécuter la plupart des scripts InDesign. Pour afficher la palette Scripts, choisissez Fenêtre > Automatisation > Scripts (si cette palette n’est pas déjà affichée). Si la palette Scripts n’est pas disponible, le module externe n’a sans doute pas été installé ou a été désactivé. Utilisez le gestionnaire de modules externes pour activer le module correspondant ou réinstallez la palette Scripts. Pour exécuter un JavaScript dans InDesign, vous devez avoir installé la palette Scripts. Voici quelques actions courantes de la palette Scripts : Pour ajouter un script à la palette Scripts, placez-le dans le dossier Scripts du dossier Paramètres prédéfinis, dans votre dossier InDesign. A partir de la palette Scripts, vous pouvez exécuter des AppleScripts, JavaScripts (.jsx), VBScripts (.vbs) compilés ou non, ou des programmes exécutables. Vous pouvez également placer dans le dossier correspondant des alias de fichiers (Mac OS) ou des raccourcis (Windows) de fichiers ou de dossiers. Lorsque vous reviendrez à InDesign, les noms des fichiers (ou dossiers) de scripts seront affichés dans la palette Scripts. Pour activer un script à partir de la palette Scripts, cliquez deux fois sur son nom dans la palette. Les scripts activés à partir de la palette Scripts sont exécutés plus rapidement que ceux activés à partir du Finder (Mac OS) ou de l’Explorateur (Windows). Lorsqu’un script est exécuté à partir de la palette Scripts, InDesign supprime le rafraîchissement de l’écran jusqu’à ce que ce script soit terminé. Pour afficher les opérations du script à mesure qu’elles s’exécutent, dans le menu de la palette Scripts, choisissez Activer la réactualisation. Pour modifier un script affiché dans la palette Scripts, maintenez la touche Option (Mac OS) ou Alt (Windows) enfoncée tout en cliquant deux fois sur le nom du script. Le script sera ouvert dans l’éditeur défini pour son type de fichier. Pour ouvrir le dossier contenant un script affiché dans la palette Scripts, maintenez la touche Commande (Mac OS) ou Ctrl (Windows) enfoncée tout en cliquant deux fois sur le nom du script. Vous pouvez également choisir Faire apparaître dans le Finder (Mac OS) ou Faire apparaître dans l’Explorateur (Windows) dans le menu de la palette Scripts. Le dossier contenant le script s’ouvre dans le Finder (Mac OS) ou l’Explorateur (Windows). Pour ouvrir un JavaScript dans le débogueur Outils ExtendScript, maintenez la touche Maj enfoncée et cliquez deux fois sur le nom du script dans la palette Scripts. Pour plus de détails, reportez-vous au chapitre 4, « Utilisation des fonctions et outils ExtendScript ». Pour ajouter un raccourci clavier à un script, choisissez Edition > Raccourcis clavier. Dans le menu Ensemble, sélectionnez un ensemble de raccourcis modifiable, puis sélectionnez Scripts dans le menu Zone du produit. Une liste de scripts apparaît dans la palette Scripts. Sélectionnez un script et affectezlui un raccourci clavier comme vous le feriez pour n’importe quelle autre fonction d’InDesign. Adobe InDesign CS2 Guide des scripts Initiation aux scripts InDesign 41 Utilisation de la palette Intitulé de script De nombreux objets du modèle d’objet InDesign possèdent une propriété d’intitulé. Il s’agit d’une propriété pouvant être attribuée à toute chaîne d’un maximum de 32 Ko de texte. Cette propriété permet principalement d’identifier les objets afin que les scripts puissent agir sur eux. Pour assigner un intitulé à un objet, vous pouvez utiliser la palette Intitulé de script (choisissez Fenêtre > Automatisation > Intitulé de script). Si la palette Intitulé de script n’est pas disponible, le module externe n’a sans doute pas été installé ou a été désactivé. Utilisez le gestionnaire de modules externes pour activer le module correspondant ou réinstallez la palette. Pour accéder au gestionnaire de modules externes, sélectionnez Aide > Configuration des modules externes (Windows) ou InDesign > Configuration des modules externes (Mac OS). Les exemples ci-dessous illustrent comment obtenir une référence à un élément de page comportant un intitulé spécifique. AppleScript --Given a reference to a page "myPage" containing a text frame with the label "myTargetFrame" tell myPage set myTextFrame to text frame "myTargetFrame" end if VBScript Rem Given a reference to a page "myPage" containing a text frame with the label "myTargetFrame" Set myTextFrame = myPage.TextFrames.Item("myTargetFrame") JavaScript // Assuming that the first page of the active document contains // a text frame with the label "myTargetFrame" with(app.documents.item(0).pages.item(0)){ myTargetFrame = textFrames.item("myTargetFrame"); } Tests et dépannage Les environnements de programmation fournissent des outils de contrôle de l’exécution de vos scripts, ce qui facilite l’identification des problèmes rencontrés ou causés par ces derniers. Débogage d’un AppleScript L’éditeur de scripts Apple n’est pas équipé d’outils de débogage avancés. Vous pouvez toutefois utiliser la session d’état. Pour observer votre script pendant qu’il envoie des commandes à InDesign et en reçoit des informations : 1. Choisissez Commandes > Ouvrir la session d’état. L’éditeur de scripts affiche la fenêtre de session d’état. 2. Activez les options d’affichage des événements et des résultats. 42 Initiation aux scripts InDesign Adobe InDesign CS2 Guide des scripts 3. Lancez le script. Pendant l’exécution du script, vous pouvez visualiser les commandes envoyées à InDesign ainsi que les réponses renvoyées. De plus, la fenêtre de résultat (choisissez Commandes > Afficher le résultat) affiche la valeur renvoyée par l’instruction de script la plus récente. Les éditeurs AppleScript tiers comme Script Debugger (de Late Night Software : www.latenightsw.com) présentent des fonctions de débogage beaucoup plus avancées que l’éditeur AppleScript. Si vous avez l’intention d’écrire des scripts avancés, il est fortement recommandé d’utiliser un éditeur de scripts doté de fonctions de débogage avancées. Débogage d’un VBScript Vous pouvez déboguer un VBScript à l’aide du débogueur de Visual Basic. En Visual Basic, vous pouvez arrêter un script à tout moment et l’exécuter ligne par ligne. Vous pouvez également observer les valeurs des variables définies dans un script en utilisant les fenêtres Espions et Variables locales, deux outils inestimables pour le débogage de scripts. Pour afficher une variable dans la fenêtre Espions : 1. Sélectionnez la variable, puis choisissez Débogage > Espion express. Visual Basic affiche la boîte de dialogue Espion express. 2. Cliquez sur Ajouter. Visual Basic affiche la fenêtre Espions. 3. Pour arrêter le script sur une ligne particulière (afin d’examiner la fenêtre Espions), sélectionnez-la, puis choisissez Débogage > Basculer le point d’arrêt. Pendant l’exécution du script, Visual Basic s’arrête au niveau du point d’arrêt défini, ce qui vous permet d’examiner les valeurs des variables. Notez que si vous avez masqué la fenêtre Espions, vous pouvez l’afficher à nouveau en choisissant Affichage > Fenêtre Espions. 4. Choisissez l’une des options suivantes : Pour exécuter la ligne de script suivante, choisissez Débogage > Pas à pas détaillé (ou appuyez sur F8 dans Visual Basic 6 ou sur F11 dans Visual Basic.NET). Pour poursuivre l’exécution normale du script, choisissez Exécution > Exécuter (touche F5) dans Visual Basic 6 ou Débogage > Exécuter (touche F5) dans Visual Basic.NET. Débogage d’un JavaScript Le débogage d’un JavaScript est présenté dans le chapitre 4, « Utilisation des fonctions et outils ExtendScript ». Adobe InDesign CS2 Guide des scripts 4 Utilisation des fonctions et outils ExtendScript 43 Utilisation des fonctions et outils ExtendScript ExtendScript est l’implémentation étendue de JavaScript d’Adobe. Elle peut être utilisée par toutes les applications Adobe Creative Suite 2 disposant d’une interface de programmation de scripts. Outre l’implémentation du langage JavaScript selon les spécifications du W3C, ExtendScript offre des fonctions et utilitaires supplémentaires. Pour le développement, le débogage et le test de scripts, ExtendScript comprend : Outils ExtendScript : environnement de développement et de test interactif pour ExtendScript. Un objet de débogage global, l’objet Dollar ($). Un utilitaire de rapports pour les éléments ExtendScript, l’interface Reflection d’ExtendScript. ExtendScript offre également les fonctions et outils suivants : Un utilitaire de localisation fournissant des valeurs de chaîne d’interface utilisateur dans différentes langues. Reportez-vous à la section Localisation de chaînes ExtendScript. Des fonctions globales pour afficher des messages courts dans des boîtes de dialogue. Reportezvous à la section Fonctions d’assistance de notification utilisateur. Un type d’objet permettant de spécifier des valeurs de mesure ainsi que leurs unités. Reportezvous à la section Spécification de valeurs de mesure. Des outils permettant de combiner des scripts, tels que la directive #include et les instructions import et export. Reportez-vous à la section Prise en charge de la programmation modulaire. Une prise en charge de l’extension ou du remplacement du comportement d’opérateurs logiques et mathématiques par classe. Reportez-vous à la section Surcharge d’opérateurs. ExtendScript offre un environnement de programmation pour toutes les applications Adobe Creative Suite 2 et autorise la communication entre applications via les scripts. Pour identifier des applications Adobe Creative Suite 2 spécifiques, les scripts doivent utiliser des indicateurs d’application et d’espace de noms. Les applications peuvent exécuter automatiquement des scripts au lancement. Reportez-vous à la section Emplacements des scripts et vérification de l’installation de l’application. Pour plus de détails sur la communication entre applications, reportez-vous au Guide de référence JavaScript Bridge, disponible avec Adobe Creative Suite 2. Outils ExtendScript Il s’agit de l’environnement de développement et de test interactif pour ExtendScript dans toutes les applications Adobe Creative Suite 2. Il comprend un éditeur complet, compatible Unicode, avec mise en surbrillance de la syntaxe et prise en charge annuler/rétablir, et vous permet : d’exécuter pas à pas des JavaScripts dans une application CS2 ; 44 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts d’inspecter toutes les données d’un script en cours d’exécution ; de définir et d’exécuter des points d’arrêt. Cet environnement est l’éditeur par défaut pour les fichiers ExtendScript avec l’extension .jsx. Vous pouvez l’utiliser pour modifier ou déboguer des scripts dans des fichiers JS ou JSX. Lorsque vous cliquez deux fois sur un fichier JSX dans l’environnement de fenêtrage de la plate-forme, le script s’exécute dans l’environnement Outils ExtendScript, sauf si une application cible est spécifiée à l’aide de la directive #target. Pour plus de détails, reportez-vous aux sections « Sélection d’une cible de débogage » et « Directives de prétraitement ». Configuration de la fenêtre Outils ExtendScript L’environnement Outils ExtendScript apparaît à l’origine selon la présentation des volets par défaut, avec une configuration d’onglets par défaut. Vous pouvez ajuster la taille des volets en faisant glisser les séparateurs vers le haut, le bas, la droite ou la gauche. Vous pouvez également regrouper les onglets. Pour déplacer un onglet, faites glisser son libellé d’un volet à l’autre. Faites glisser un onglet dans un nouveau volet Le volet de destination est en surbrillance, et le nouvel onglet est ajouté à la pile d’onglets Si vous faites glisser un onglet de sorte que l’ensemble du volet de destination soit en surbrillance, l’onglet s’intègre aux autres onglets de ce volet. Si vous faites glisser un onglet dans la partie supérieure ou inférieure d’un volet (de sorte que seule la barre supérieure ou inférieure du volet de destination soit en surbrillance), le volet se scinde et affiche les onglets en mosaïque. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Sélectionnez l’application cible 45 Faites apparaître les menus contextuels d’onglets Le volet scindé affiche les onglets du navigateur et de l’éditeur Chaque onglet est pourvu d’un menu déroulant accessible depuis l’icône fléchée, dans l’angle supérieur droit. Ce menu est également accessible sous la forme d’un menu contextuel. Pour le faire apparaître, cliquez sur l’onglet avec le bouton droit de la souris. Une commandepermettant de masquer le voletest toujours disponible dans ce menu. Utilisez le menu Fenêtre pour afficher un volet masqué ou pour le faire apparaître au premier plan. L’éditeur, qui comprend un onglet pour chaque script, comprend un menu contextuel supplémentaire pour le débogage. Pour faire apparaître ce menu, cliquez avec le bouton droit de la souris dans la zone des lignes numérotées. L’environnement Outils ExtendScript enregistre la présentation en cours lorsque vous le quittez, et la restaure lorsque vous le redémarrez. Il enregistre et restaure également les documents ouverts, leur emplacement, ainsi que les points d’arrêt éventuels. Si vous ne souhaitez pas que les paramètres soit restaurés au démarrage, maintenez la touche Maj enfoncée pendant le chargement de l’environnement Outils ExtendScript. Vous restaurerez ainsi les paramètres par défaut. Cela permet de reconnecter la dernière application et le dernier moteur sélectionnés. Si vous souhaitez restaurer les paramètres de présentation au démarrage, sans charger les documents précédemment ouverts, choisissez Commencer avec un espace de travail vide dans la boîte de dialogue Préférences. Sélection d’une cible de débogage L’environnement Outils ExtendScript permet de déboguer plusieurs applications en même temps. Si plusieurs applications Adobe Creative Suite 2 sont installées, sélectionnez l’application cible dans la liste déroulante située dans la partie supérieure gauche, sous la barre de menus. Toutes les applications installées et utilisant ExtendScript sont répertoriées dans cette liste. Si vous sélectionnez une application qui n’est pas en cours d’exécution, vous êtes invité à autoriser l’environnement Outils ExtendScript à l’exécuter. Tous les moteurs disponibles dans l’application cible sélectionnée sont répertoriés dans une liste déroulante à droite de la liste des applications. Une icône indiquant l’état de débogage s’affiche en regard de chaque moteur. Une application cible peut avoir plusieurs moteurs ExtendScript ; plusieurs peuvent être actifs, bien qu’un seul soit en cours. Un moteur actif est un moteur qui exécute du code, qui est arrêté à point d’arrêt ou qui, après avoir exécuté tous les scripts, attend de recevoir des événements. Une icône 46 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts en regard du nom de chaque moteur indique si le moteur est en cours d’exécution, arrêté ou en attente d’entrée. en cours d’exécution arrêté en attente Le moteur en cours est celui dont les données et l’état s’affichent dans les volets de l’environnement Outils ExtendScript. Si une application ne possède qu’un moteur, son moteur devient « en cours » lorsque vous la choisissez comme cible. Si l’application cible possède plusieurs moteurs, sélectionnez-en un dans la liste pour qu’il devienne « en cours ». Lorsque vous ouvrez l’environnement Outils ExtendScript, il tente de se reconnecter à la même cible et au même moteur que ceux définis lors de sa dernière utilisation. Si cette application cible n’est pas en cours d’exécution, vous êtes invité à autoriser l’environnement Outils ExtendScript à l’exécuter. Si vous n’accordez pas l’autorisation, l’environnement Outils ExtendScript devient l’application cible. Si l’application cible que vous sélectionnez n’est pas en cours d’exécution, vous êtes invité à autoriser l’environnement Outils ExtendScript à lancer l’application, puis l’environnement ouvre celle-ci. De même, si vous exécutez un script spécifiant une application cible qui n’est pas en cours d’exécution (via la directive #target), vous êtes invité à autoriser l’environnement Outils ExtendScript à lancer l’application. Si l’application est en cours d’exécution mais qu’elle n’est pas sélectionnée comme la cible en cours, un message de l’environnement Outils ExtendScript vous invite à basculer vers cette application. Si vous sélectionnez une application qui ne peut pas être déboguée dans l’environnement Outils ExtendScript (Adobe Help, par exemple), un message d’erreur vous informe que l’environnement ne peut pas se connecter à l’application sélectionnée. L’environnement Outils ExtendScript est l’éditeur par défaut des fichiers JSX. Lorsque vous cliquez deux fois sur un fichier JSX dans un explorateur de fichiers, cet environnement recherche une directive #target dans le fichier et lance l’application afin d’exécuter le script. Il recherche auparavant les erreurs éventuelles de syntaxe présentes dans le script, puis, le cas échéant, les affiche dans une boîte de message. L’environnement se ferme au lieu de lancer l’application cible. Par exemple : Sélection des scripts L’onglet Scripts affiche la liste des scripts pouvant être débogués pour l’application cible. Il peut s’agir de fichiers JS ou JSX ou (pour certaines applications) de fichiers HTML contenant des scripts intégrés. Sélectionnez un script dans cet onglet pour le charger et en afficher le contenu dans le volet de l’éditeur, depuis lequel vous pouvez modifier, enregistrer ou exécuter le script dans l’application cible. Adobe InDesign CS2 Guide des scripts Utilisation des fonctions et outils ExtendScript 47 Suivi des données L’onglet Explorateur de données est votre interface avec le moteur JavaScript. Il affiche toutes les données actives définies dans le contexte en cours sous forme de liste de variables accompagnées de leurs valeurs actuelles. Si l’exécution est interrompue au niveau d’un point d’arrêt, il affiche les variables définies à l’aide de var dans la fonction en cours, ainsi que les arguments de la fonction. Pour afficher les variables définies dans l’étendue globale ou d’appel, utilisez la Pile des appels pour changer de contexte (reportezvous à la section « Pile d’appels »). Vous pouvez utiliser l’Explorateur de données pour consulter et définir des valeurs de variable. Cliquez sur le nom d’une variable pour en consulter la valeur actuelle dans le champ d’entrée, dans la partie supérieure de l’onglet. Pour modifier la valeur, spécifiez une nouvelle valeur et appuyez sur la touche Entrée. Lorsqu’une variable est en lecture seule, le champ d’entrée est désactivé. Affichez ou modifiez la valeur de la variable sélectionnée L'objet s'ouvre pour afficher les propriétés Le menu déroulant de cet onglet vous permet de contrôler la quantité de données à afficher : Afficher les fonctions globales affiche/masque les définitions de fonctions globales. Afficher les méthodes objet affiche/masque les fonctions associées à des objets. Le plus souvent, les données les plus intéressantes d’un objet sont les méthodes pouvant être appelées. Afficher les éléments du langage JavaScript affiche/masque toutes les données qui appartiennent à la norme du langage JavaScript, telles que le constructeur Array ou l’objet Math. _ _ proto _ _ est une propriété intéressante, car elle indique la chaîne du prototype de l’objet JavaScript. Chaque variable est accompagnée d’une petite icône représentative du type de données. Un objet incorrect fait référence à un objet qui a été supprimé. Lorsqu’une variable n’est pas définie, aucune icône ne s’affiche. null Booléen Nombre Chaîne Objet Objet incorrect Vous pouvez consulter le contenu d’un objet en cliquant sur son icône. La liste se développe et affiche les propriétés de l’objet (et ses méthodes, si l’option Afficher les méthodes objet est activée), le triangle pointe vers le bas pour indiquer que l’objet est ouvert. 48 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Remarque : dans Photoshop® CS2, le volet Explorateur de données contient des données uniquement pendant le débogage d’un programme JavaScript dans Photoshop. Console JavaScript La console JavaScript est une interface de commande et une fenêtre de résultat pour le moteur JavaScript sélectionné. Elle vous permet de vous connecter à l’espace de noms global de ce moteur. Ligne de commande JavaScript Sortie JavaScript Le champ d’entrée de la ligne de commande, qui accepte tout code JavaScript, peut servir à évaluer des expressions ou à appeler des fonctions. Saisissez une instruction JavaScript sur la ligne de commande, puis appuyez sur Entrée pour l’exécuter. L’instruction s’exécute dans l’étendue de pile de la ligne en surbrillance dans l’onglet Pile d’appels, et le résultat s’affiche dans le champ de résultat. Le champ d’entrée de la ligne de commande conserve un historique des commandes de 32 lignes. Utilisez les touches fléchées Haut et Bas pour faire défiler les entrées précédentes. Les commandes entrées dans ce champ s’exécutent en une seconde. Si l’exécution d’une commande dure plus d’une seconde, l’environnement Outils ExtendScript génère une erreur de temporisation et met fin à la tentative. Le champ de résultat est une sortie standard pour l’exécution d’instructions JavaScript. Lorsqu’un script génère une erreur de syntaxe, l’erreur, le nom du fichier et le numéro de ligne s’affichent ici. L’environnement Outils ExtendScript affiche les erreurs à cet endroit au cours de sa propre phase de démarrage. Le menu déroulant de l’onglet vous permet d’effacer le contenu du champ de résultat et de modifier le corps des caractères utilisé pour les résultats. Pile d’appels L’onglet Pile d’appels est actif lors du débogage d’un programme. Lorsqu’un programme en cours d’exécution s’arrête en raison d’un point d’arrêt ou à la suite d’une erreur d’exécution, l’onglet affiche la séquence des appels de fonction qui a mené au point d’exécution actuel. L’onglet Pile d’appels affiche les noms des fonctions actives, ainsi que les arguments réels transmis à ces fonctions. Par exemple, le volet de pile ci-dessous affiche un arrêt se produisant à un point d’arrêt dans une fonction dayOfWeek. La fonction qui contient le point d’arrêt est mise en surbrillance dans l’onglet Pile d’appels et le volet de l’éditeur. Pour inspecter une fonction, cliquez dessus dans la hiérarchie des appels. Dans l’éditeur, la ligne contenant l’appel de fonction qui a mené à ce point d’exécution est surlignée en vert. Dans l’exemple, lorsque vous sélectionnez la ligne [Top Level] dans la pile d’appels, l’éditeur met en surbrillance la ligne dans laquelle la fonction dayOfWeek a été appelée. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts 49 Basculer d’une fonction à une autre dans la hiérarchie des appels vous permet de comprendre comment la fonction en cours a été appelée. Les onglets Console et Explorateur de données sont coordonnés avec le volet Pile d’appels. Lorsque vous sélectionnez une fonction dans la pile d’appels : Le volet Console bascule son étendue pour afficher le contexte d’exécution de la fonction sélectionnée. Vous pouvez ainsi inspecter et modifier ses variables locales. Le programme JavaScript en cours d’exécution ne pourrait par ailleurs pas y avoir accès depuis une fonction appelée. Le volet Explorateur de données affiche toutes les données définies dans le contexte sélectionné. Editeur de scripts Vous pouvez ouvrir plusieurs onglets d’éditeur de scripts. Chacun affiche un document de code source Unicode. L’éditeur prend en charge la mise en surbrillance de la syntaxe JavaScript, la vérification de la syntaxe JavaScript, plusieurs opérations Annuler/Rétablir et une fonction Rechercher/Remplacer avancée. Pour déplacer le point d’insertion ou pour sélectionner du texte dans l’éditeur, utilisez le pointeur de la souris ou des raccourcis clavier spéciaux. Navigation et sélection à l’aide de la souris Pour déplacer le signe d’insertion, cliquez sur le bouton gauche de la souris dans l’éditeur. Pour sélectionner du texte à l’aide de la souris, cliquez dans du texte non sélectionné, puis faites glisser le pointeur de la souris sur le texte à sélectionner. Si vous faites glisser le pointeur au-dessus ou en dessous du texte affiché, la sélection s’effectue à mesure que le texte défile. Pour sélectionner un mot, cliquez deux fois sur le mot à sélectionner. Pour sélectionner une ligne, cliquez trois fois sur la ligne à sélectionner. Pour effectuer un glisser-déposer, cliquez sur le texte sélectionné, puis faites-le glisser vers l’emplacement souhaité. Vous pouvez faire glisser du texte d’un volet de l’éditeur à un autre. Vous pouvez également faire glisser du texte de l’environnement Outils ExtendScript vers une autre application acceptant cette fonctionnalité, et inversement. Vous pouvez déposer des fichiers de l’Explorateur ou du Finder vers l’environnement Outils ExtendScript pour les ouvrir dans un éditeur. Navigation et sélection à l’aide du clavier Outre la saisie au clavier classique, l’éditeur accepte les touches de navigation ci-après. Vous pouvez également sélectionner du texte à l’aide d’une touche de navigation, tout en maintenant la touche Maj enfoncée. Entrée Insère un caractère de saut de ligne. Retour arrière Supprime un caractère vers la gauche. Suppr Supprime un caractère vers la droite. Flèche Gauche Déplace le point d’insertion d’un caractère vers la gauche. 50 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Flèche Droite Déplace le point d’insertion d’un caractère vers la droite. Flèche Haut Déplace le point d’insertion d’une ligne vers le haut. Reste dans la colonne si possible. Flèche Bas Déplace le point d’insertion d’une ligne vers le bas. Reste dans la colonne si possible. Pg. préc Déplace le point d’insertion vers la page précédente. Pg. suiv Déplace le point d’insertion vers la page suivante. Ctrl + flèche Haut Fait défiler l’affichage d’une ligne vers le haut, sans déplacer le point d’insertion. Ctrl + flèche Bas Fait défiler l’affichage d’une ligne vers le bas, sans déplacer le point d’insertion. Ctrl + Pg. préc Fait défiler l’affichage vers la page précédente sans déplacer le point d’insertion. Ctrl + Pg. suiv Fait défiler l’affichage vers la page suivante sans déplacer le point d’insertion. Ctrl + flèche Gauche Déplace le point d’insertion d’un mot vers la gauche. Ctrl + flèche Droite Déplace le point d’insertion d’un mot vers la droite. Orig Déplace le point d’insertion au début d’une ligne. Fin Déplace le point d’insertion à la fin d’une ligne. Ctrl + Orig Déplace le point d’insertion au début du texte. Ctrl + Fin Déplace le point d’insertion à la fin du texte. L’éditeur prend en charge la saisie avancée au clavier via IME (Windows) ou TMS (Mac OS). Cette caractéristique est très importante pour les caractères d’Extrême-Orient. Vérification de la syntaxe Avant d’exécuter le nouveau script ou d’enregistrer le texte en tant que fichier de script, vous pouvez vous assurer que le texte ne contient pas d’erreur de syntaxe JavaScript. Choisissez Vérifier la syntaxe dans le menu Edition ou dans le menu contextuel de l’éditeur, d’un clic sur le bouton droit de la souris. Lorsque la syntaxe du script est correcte, le message « Aucune erreur de syntaxe » s’affiche dans la ligne d’état. Si l’environnement Outils ExtendScript détecte des erreurs de syntaxe, telles qu’un guillemet manquant, le texte concerné est mis en surbrillance, un son est émis, et le message d’erreur s’affiche dans la ligne d’état pour que vous puissiez corriger l’erreur. Débogage dans l’environnement Outils ExtendScript Vous pouvez déboguer le code dans l’onglet de l’éditeur actif. Sélectionnez l’une des commandes de débogage. Vous avez la possibilité d’exécuter le programme dans son intégralité ou pas à pas. Lorsque vous exécutez du code dans l’éditeur, celui-ci s’exécute dans le moteur JavaScript sélectionné de l’application cible en cours. L’environnement Outils ExtendScript exécute un moteur JavaScript indépendant pour que vous puissiez modifier et exécuter rapidement un script sans avoir à vous connecter à une application cible. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts 51 Info-bulles avec évaluation Dans l’onglet de l’éditeur, lorsque vous placez le pointeur de la souris sur une variable ou une fonction, le résultat de l’évaluation de cette variable ou fonction s’affiche dans une info-bulle. Lorsque vous ne déboguez pas le programme, ces info-bulles ne sont utiles que si les variables et fonctions sont connues du moteur JavaScript. Lors du débogage, en revanche, les info-bulles permettent d’afficher la valeur en cours d’une variable, ainsi que son type de données en cours. Pour désactiver les info-bulles, utilisez les cases à cocher Afficher les variables JavaScript et Activer les info-bulles d’aide sur l’interface utilisateur, dans la page Options d’aide de la boîte de dialogue Préférences. Contrôle de l’exécution du code Les commandes de débogage sont disponibles dans le menu Débogage, depuis le menu contextuel de l’éditeur (par un clic sur le bouton droit de la souris), au moyen de raccourcis clavier et depuis les boutons de la barre d’outils. Lorsque le débogueur JavaScript est actif, utilisez ces boutons et commandes de menu pour contrôler l’exécution du code. Exécuter Continuer F5 (Windows) Ctrl + R (Mac OS) Lance ou reprend l’exécution d’un script. Point d’arrêt Ctrl + F5 (Windows) Cmde+. (Mac OS) Interrompt temporairement l’exécution du script et réactive le débogueur JavaScript. Désactivé lorsqu’un script est en cours d’exécution. Activé lorsqu’un script est en cours d’exécution. Arrêter Maj + F5 (Windows) Arrête l’exécution du script et génère une erreur d’exécution. Ctrl + K (Mac OS) Activé lorsqu’un script est en cours d’exécution. Pas à pas principal F10 (Windows) Ctrl + S (Mac OS) Interrompt le script après l’exécution d’une seule ligne JavaScript. Si l’instruction appelle une fonction JavaScript, InDesign exécute la fonction dans son intégralité avant de s’arrêter (il ne s’arrête pas dans la fonction). Pas à pas détaillé F11 (Windows) Ctrl + T (Mac OS) Interrompt le script après chaque exécution d’une ligne d’instruction JavaScript ou après l’exécution d’une instruction faisant partie d’une fonction JavaScript appelée par le script. Pas à pas sortant Maj + F11 (Windows) Lors d’une interruption temporaire de l’exécution du script Ctrl + U (Mac OS) dans le corps d’une fonction JavaScript, reprend l’exécution du script jusqu’à cette fonction. Lors d’une interruption temporaire de l’exécution du script à l’extérieur du corps d’une fonction, reprend l’exécution du script jusqu’à la fin du script. Indicateurs de l’état d’exécution Lorsque le moteur est en cours d’exécution, l’icône ExtendScript, indique que le script est actif. , dans l’angle supérieur droit de la fenêtre Outils Lorsque l’exécution du script est interrompue en raison d’un point d’arrêt ou lorsque la ligne suivante est atteinte (dans le cadre d’une exécution pas à pas), l’éditeur affiche le script en cours et surligne en jaune la ligne en cours. 52 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Lorsqu’une erreur d’exécution se produit, l’environnement Outils ExtendScript interrompt l’exécution du script, affiche le script en cours, surligne en rouge la ligne en cours, affiche un message d’erreur dans la ligne d’état et émet un son. Les scripts utilisent souvent une clause try/catch pour exécuter des codes susceptibles de générer des erreurs d’exécution. Les erreurs sont ainsi repérées par programme avant que le script ne se termine. Plutôt que de basculer dans le débogueur, vous pouvez autoriser un traitement standard de ces erreurs avec la clause catch . Pour définir ce comportement, choisissez Débogage > Ne pas arrêter sur les exceptions protégées. Certaines erreurs d’exécution telles que Mémoire insuffisante, provoquent systématiquement l’arrêt du script, sans tenir compte de ce paramètre. Définition de points d’arrêt Lors du débogage d’un script, il peut être très pratique que l’exécution du script s’arrête sur certaines lignes ; vous pouvez ainsi inspecter l’état de l’environnement, vérifiez que les appels de fonction sont correctement imbriqués ou que les variables contiennent les données souhaitées. Pour interrompre l’exécution d’un script sur une ligne donnée, définissez un point d’arrêt en cliquant à gauche du numéro de la ligne. Un point d’arrêt est signalé par un point plein. Pour désactiver temporairement un point d’arrêt, cliquez une deuxième fois. Le point plein se transforme en point évidé. Pour supprimer un point d’arrêt, cliquez une troisième fois. L’icône disparaît. Certains points d’arrêt doivent être conditionnels. Par exemple, si vous définissez un point d’arrêt dans une boucle exécutée des milliers de fois, il est fort probable que vous ne souhaitiez pas que le programme s’arrête à chaque boucle, mais uniquement toutes les 1 000 itérations. Vous pouvez associer une condition à un point d’arrêt, sous la forme d’une expression JavaScript. A chaque fois que le programme atteint le point d’arrêt, il exécute l’expression JavaScript. Si l’évaluation de l’expression est un nombre non nul ou true, l’exécution s’arrête. Pour définir un point d’arrêt conditionnel dans une boucle, par exemple, l’expression conditionnelle peut être la suivante : « i >= 1000 » ce qui signifie que l’exécution du programme s’arrête si la valeur de la variable d’itération i est égale ou supérieure à 1 000. Adobe InDesign CS2 Guide des scripts Utilisation des fonctions et outils ExtendScript Vous pouvez définir des points d’arrêt aux lignes qui ne contiennent pas de code, comme celles des commentaires. Lorsque l’environnement Outils ExtendScript exécute le programme, il déplace automatiquement le point d’arrêt à la ligne suivante contenant réellement du code. Icônes des points d’arrêt Chaque point d’arrêt est représenté par une icône, à gauche du numéro de ligne. Un losange représente un point d’arrêt conditionnel, un rond un point d’arrêt non soumis à une condition. Une icône évidée représente un point d’arrêt désactivé, une icône pleine un point d’arrêt activé. Point d’arrêt non soumis à une condition. L’exécution s’arrête ici. Point d’arrêt non soumis à une condition, désactivé. L’exécution ne s’arrête pas. Point d’arrêt conditionnel. L’exécution s’arrête si l’évaluation de l’expression JavaScript associée est true. Point d’arrêt conditionnel, désactivé. L’exécution ne s’arrête pas. Onglet Points d’arrêt L’onglet Points d’arrêt affiche tous les points d’arrêts définis dans l’onglet de l’éditeur actif. Vous pouvez utiliser le menu déroulant de l’onglet pour ajouter, modifier ou supprimer un point d’arrêt. Vous pouvez modifier un point d’arrêt en cliquant deux fois dessus ou en le sélectionnant et en choisissant Ajouter ou Modifier dans le menu contextuel. Une boîte de dialogue s’ouvre. Vous avez la possibilité de modifier le numéro de ligne, l’état du point d’arrêt, ainsi que l’instruction conditionnelle. Lorsque le programme atteint ce point d’arrêt, le débogueur évalue cette condition. Si l’évaluation de l’expression n’est pas true, le point d’arrêt est ignoré et l’exécution du programme se poursuit. Cela vous donne la possibilité d’arrêter le programme uniquement lorsque certaines conditions sont réunies, notamment lorsqu’une variable est égale à une valeur donnée. 53 54 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Profilage L’outil de profilage permet d’optimiser l’exécution des programmes Lorsque vous activez l’option de profilage, le moteur JavaScript collecte les informations relatives à un programme en cours d’exécution. Il compte le nombre de fois que le programme exécute une ligne ou une fonction, ou la durée d’exécution d’une ligne ou d’une fonction. Vous avez la possibilité de spécifier précisément les données de profilage à afficher. Dans la mesure où l’option de profilage ralentit considérablement la durée d’exécution du programme, le menu Profil offre les options de profilage suivantes : Désactivé Outil de profilage désactivé. Il s’agit du réglage par défaut. Fonctions Le profileur compte tous les appels de fonction. Une fois l’exécution terminée, il affiche le total à gauche du numéro de la ligne, à l’endroit où l’en-tête de la fonction est défini. Lignes Le profileur compte le nombre d’exécution de chaque ligne. Une fois l’exécution terminée, il affiche le total à gauche du numéro de la ligne. La durée d’exécution est plus longue, mais les informations résultantes sont plus détaillées. Afficher les informations de durée Au lieu de compter les fonctions ou les lignes, il enregistre la durée d’exécution de chaque fonction ou ligne. Une fois l’exécution terminée, il affiche en microsecondes la durée d’exécution d’une fonction ou d’une ligne, à gauche du numéro de la ligne. Il s’agit de la forme de profilage la moins rapide. Aucune donnée du profileur Lorsque cette option est sélectionnée, les données du profileur ne s’affichent pas. Afficher le nombre d’occurrences Lorsque cette option est sélectionnée, il affiche le nombre d’occurrences. Afficher la durée Lorsque cette option est sélectionnée, il affiche les données de durée. Effacer les données du profileur Efface toutes les données de profilage. Enregistrer les données sous Enregistre les données de profilage en tant que valeurs séparées par des virgules dans un fichier CSV pouvant être ouvert dans un tableur tel qu’Excel. Lorsque le programme s’arrête (à la fin du programme, à un point d’arrêt ou suite à une erreur d’exécution), l’environnement Outils ExtendScript affiche l’information dans l’éditeur, ligne par ligne. Les données de profilage sont organisées selon le code couleur suivant : Le vert représente le résultat le plus faible ou le temps d’exécution le plus rapide. Le rouge représente les problèmes (une ligne exécutée un trop grand nombre de fois, par exemple) ou la ligne dont l’exécution est la plus longue. Cet exemple affiche des informations de durée relatives au programme. La durée d’exécution de la ligne la plus rapide est de 4 microsecondes, et celle de la plus lente de 29 microsecondes. La durée peut ne pas être précise à la microseconde près. Tout dépend de la résolution et de la précision des chronomètres intégrés dans votre ordinateur. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts 55 Objet Dollar ($) Cet objet ExtendScript global offre un grand nombre d’options de débogage et de méthodes d’information. Les propriétés de l’objet $ vous permettent d’obtenir des informations globales, telles que l’erreur d’exécution la plus récente, et définissent des indicateurs chargés de contrôler le débogage et le comportement de la localisation. Les méthodes vous permettent d’exporter du texte vers la console JavaScript pendant l’exécution du script, de contrôler par programme l’exécution et d’autres comportements d’ExtendScript et d’établir des statistiques sur l’utilisation des objets. Propriétés de l’objet Dollar ($) build Nombre Numéro de version d’ExtendScript. Lecture seule. buildDate Date Date de la version d’ExtendScript. Lecture seule. error Chaîne d’erreur Informations sur l’erreur d’exécution la plus récente, contenue dans un objet Error JavaScript. Affecter un message d’erreur à cette propriété génère une erreur d’exécution. Le moyen le plus sûr de générer une erreur d’exécution consiste à rediriger un objet Error. flags Nombre Récupère ou définit des indicateurs de résultat de débogage. Un AND logique des valeurs d’indicateur de bits suivantes : 0x0002 (2) : affiche chaque ligne exécutée, accompagnée de son numéro de ligne. 0x0040 (64) : active un nettoyage excessif de la mémoire. En général, le nettoyage de la mémoire commence lorsque le nombre d’objets augmente d’un certain nombre depuis le dernier nettoyage. Avec cet indicateur, ExtendScript nettoie la mémoire après chaque instruction, ou presque. Cela diminue considérablement les performances, mais peut s’avérer très utile lorsque vous pressentez qu’un objet est libéré trop tôt. 0x0080 (128) : affiche tous les appels avec leurs arguments, ainsi que la valeur renvoyée. 0x0100 (256) : active la gestion d’erreur étendue (voir la propriété strict). 0x0200 (512) : active la fonction de localisation de la méthode toString. Similaire à la propriété localize. global Object Donne accès à l’objet global, contenant le nom d’espace global JavaScript. level Nombre Active ou désactive le débogueur JavaScript. Choisissez : locale Chaîne 0 : pas de débogage 1 : interruption en cas d’erreur d’exécution 2 : mode de débogage complet Récupère ou définit la langue en cours. La chaîne contient cinq caractères et se présente sous la forme LL _ RR, où LL est un indicateur de langue ISO 639 et RR un indicateur de région ISO 3166. A l’origine, il s’agit de la valeur que l’application ou la plate-forme renvoie pour l’utilisateur en cours. Vous pouvez la définir pour modifier temporairement la langue à des fins de test. Pour restaurer le paramètre de l’application ou de la plate-forme, définissez la valeur sur undefined, null ou sur la chaîne vide. 56 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts localize Booléen Active ou désactive les fonctions de localisation étendues de la méthode toString intégrée. Reportez-vous à la section « Localisation de chaînes ExtendScript ». memCache Nombre Récupère ou définit la taille en octets de la mémoire cache d’ExtendScript. objects Nombre Nombre total d’objets JavaScript définis à ce stade. Lecture seule. os Chaîne Version du système d’exploitation en cours. Lecture seule. screens Array (tableau de données) Tableau de données des objets contenant des informations sur les écrans associés à votre ordinateur. Chaque objet possède les propriétés left, top, right et bottom, qui contiennent les quatre angles de chaque écran sous la forme de coordonnées globales. Une propriété primary est true si cet objet décrit l’écran principal. strict Booléen Lorsqu’elle est true, toute tentative d’écriture dans une propriété en lecture seule génère une erreur d’exécution. Lorsque qu’elle est true, certains objets n’autorisent pas la création de nouvelles propriétés. version Chaîne Numéro de version du moteur ExtendScript. Il doit comprendre trois parties ainsi qu’une description. Par exemple : « 3.6.5 (debug) ». Lecture seule. Fonctions de l’objet Dollar ($) about $.about () Affiche la boîte de dialogue « A propos de » du composant ExtendScript et renvoie le texte de cette boîte de dialogue en tant que chaîne. bp Exécute un point d’arrêt à l’emplacement actuel. Renvoie undefined. $.bp ([condition]) Lorsque aucune condition n’est requise, il est recommandé d’utiliser l’instruction JavaScript debugger dans le script plutôt que de faire appel à cette méthode. condition Facultatif. Une chaîne contenant une instruction JavaScript à utiliser en tant que condition. Si l’évaluation de l’instruction est true ou non nulle lorsque ce point est atteint, l’exécution s’arrête. clearbp $.clearbp ([line]) line Supprime un point d’arrêt du script en cours. Renvoie undefined. Facultatif. Ligne dont le point d’arrêt est à supprimer. Si la valeur est 0 ou n’est pas spécifiée, le point d’arrêt est supprimé pour le numéro de ligne en cours. gc Lance le nettoyage de la mémoire. Renvoie undefined. getenv Renvoie la valeur de la variable d’environnement spécifiée ou null si cette variable n’est pas définie. $.gc () $.getenv (envname) envname list Nom de la variable d’environnement. $.list ([classname]) classname Collecte les informations sur les objets dans un tableau et renvoie ce tableau en tant que chaîne. Reportez-vous à la section ci-après « Statistiques des objets ». Facultatif. Type de l’objet sur lequel collecter des informations. S’il n’est pas spécifié, cette fonction collecte les informations relatives à tous les objets actuellement définis. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts setbp Définit un point d’arrêt dans le script en cours. Renvoie undefined. $.setbp ([line, condition]) Lorsque aucun argument n’est requis, il est recommandé d’utiliser l’instruction JavaScript debugger dans le script plutôt que de faire appel à cette méthode. line Facultatif. Ligne au niveau de laquelle l’exécution doit s’arrêter. Si la valeur est 0 ou n’est pas spécifiée, le point d’arrêt est défini au numéro de ligne en cours. condition Facultatif. Une chaîne contenant une instruction JavaScript à utiliser pour un point d’arrêt conditionnel. Si l’évaluation de l’instruction est true ou non nulle lorsque cette ligne est atteinte, l’exécution s’arrête. sleep Interrompt le lien appelant pendant le nombre de millisecondes donné. Renvoie undefined. $.sleep (milliseconds) Pendant une période de veille, cette fonction vérifie toutes les 100 millisecondes si elle doit mettre fin ou non à la période de veille. Cela peut se produire si une demande d’interruption (break) est passée ou si le délai d’exécution du script est arrivé à expiration. milliseconds Durée d’attente (en millisecondes). summary Collecte un résumé des totaux d’objets dans un tableau et renvoie ce tableau en tant que chaîne. Le tableau affiche le nombre d’objets pour chaque classe spécifiée. Par exemple : $.summary ([classname]) 3 Array 5 String classname Facultatif. Type d’objet à compter. S’il n’est pas spécifié, cette fonction compte tous les objets actuellement définis. write Ecrit le texte spécifié dans la console JavaScript. Renvoie undefined. text Une ou plusieurs chaînes à écrire, concaténées pour ne former qu’une seule chaîne. writeln Ecrit le texte spécifié dans la console JavaScript et ajoute une séquence de saut de ligne. Renvoie undefined. text Une ou plusieurs chaînes à écrire, concaténées pour ne former qu’une seule chaîne. $.write (text[, text...]...) $.writeln (text[, text...]...) Statistiques des objets Le résultat de $.list() est mis en forme comme dans l’exemple ci-dessous. Address L Refs Prop Class 0092196c 4 0 Function [toplevel] 00976c8c 2 1 Object Object 00991bc4 L 1 1 LOTest LOTest 0099142c L 2 2 Function LOTest 00991294 1 0 Object Object Name espace de travail 57 58 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Les colonnes affichent les informations d’objet suivantes : Address Adresse physique de l’objet en mémoire. L Cette colonne contient la lettre « L » si l’objet est un objet LiveObject (c.-à-d. un type de données interne). Refs Compte de référence de l’objet. Prop Compte de référence secondaire relatif au nombre de propriétés faisant référence à l’objet. Le programme de nettoyage de la mémoire utilise ce compte pour rompre les références circulaires. Si le compte de référence est différent du nombre de propriétés JavaScript qui lui font référence, l’objet est considéré comme pouvant être utilisé ailleurs et n’est pas nettoyé. Class Nom de classe de l’objet. Name Nom de l’objet. Ce nom ne correspond pas au nom de la propriété dans laquelle l’objet a été stocké. En général, le nom se rapporte aux objets Function, pour lesquels il est utilisé pour le nom de la fonction ou de la méthode. Les noms entre crochets sont des noms internes aux scripts. Si l’objet possède un ID, celui-ci s’affiche dans la dernière colonne. Interface Reflection d’ExtendScript ExtendScript offre une interface Reflection qui vous permet de tout savoir sur un objet. Vous pouvez notamment récupérer son nom, une description, le type de données attendu pour les propriétés, les arguments et la valeur de renvoi pour les méthodes, ainsi que les valeurs par défaut ou limites de valeurs d’entrée. Objet Reflection Chaque objet possède une propriété reflect qui renvoie un objet Reflection rapportant le contenu de l’objet. Ainsi, le code ci-dessous vous permet d’afficher les valeurs de toutes les propriétés d’un objet. var f= new File ("myfile"); var props = f.reflect.properties; for (var i = 0; i < props.length; i++) { $.writeln(‘this property ‘ + props[i].name + ‘ is ‘ + f[props[i].name]); } Propriétés des objets Reflection Toutes les propriétés sont en lecture seule. description Chaîne Texte court décrivant l’objet ou undefined si aucune description n’est disponible. help Chaîne Texte long décrivant l’objet de façon plus précise ou undefined si aucune description n’est disponible. methods Tableau de données d’objets ReflectionInfo Tableau de données d’objets ReflectionInfo contenant toutes les méthodes de l’objet, définies dans la classe ou dans l’instance spécifique. name Chaîne Nom de classe de l’objet. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts properties Tableau de données d’objets ReflectionInfo 59 Tableau de données d’objets ReflectionInfo contenant toutes les propriétés de l’objet, définies dans la classe ou dans l’instance spécifique. Pour les objets aux propriétés dynamiques (définies à l’exécution), la liste répertorie uniquement les propriétés dynamiques auxquelles le script a déjà accédé. Par exemple, dans un objet enveloppant une balise HTML, les noms des attributs HTML sont déterminés au moment de l’exécution. Fonctions des objets Reflection find reflectionObj.find (name) name Renvoie l’objet ReflectionInfo pour la propriété nommée de l’objet ou null si cette propriété n’existe pas. Utilisez cette méthode pour récupérer des informations sur les propriétés dynamiques auxquelles le script n’a pas encore accédé, mais dont l’existence est connue. Propriété pour laquelle vous souhaitez récupérer des informations. ➤ Exemples Le code ci-dessous détermine le nom de classe d’un objet. obj = new String ("hi"); obj.reflect.name; // => String Le code suivant permet d’obtenir la liste de toutes les méthodes : obj = new String ("hi"); obj.reflect.methods; //=> indexOf,slice,... obj.reflect.find ("indexOf"); // => the method info Le code ci-dessous permet d’obtenir une liste des propriétés. Math.reflect.properties; //=> PI,LOG10,... Le code ci-dessous permet d’obtenir le type de données d’une propriété. Math.reflect.find ("PI").type; // => number Objet ReflectionInfo Cet objet contient des informations sur une propriété, une méthode ou un argument de méthode. Vous pouvez accéder aux objets ReflectionInfo dans des tableaux de données des propriétés et des méthodes d’un objet Reflection, selon le nom ou l’index, comme suit : obj = new String ("hi"); obj.reflect.methods[0]; obj.reflect.methods[“indexOf”]; Vous pouvez accéder aux objets ReflectionInfo pour les arguments d’une méthode dans le tableau de données des arguments de l’objet ReflectionInfo pour la méthode, selon l’index, comme suit : obj.reflect.methods[“indexOf”].arguments[0]; Propriétés des objets ReflectionInfo arguments Tableau de données d’objets ReflectionInfo A une méthode donnée correspond un tableau de données d’objets ReflectionInfo décrivant chaque argument de méthode. 60 Utilisation des fonctions et outils ExtendScript dataType Chaîne Adobe InDesign CS2 Guide des scripts Type de données de l’élément. Choisissez : boolean number string Classname : nom de classe d’un objet. Remarque : les noms de classe commencent par une majuscule. Ainsi, la valeur string représente une chaîne JavaScript, alors que String est un objet String JavaScript. * : tout type. Il s’agit du réglage par défaut. null undefined : renvoie un type de données pour une fonction qui ne renvoie aucune valeur. unknown defaultValue Tout type Valeur par défaut d’un argument de méthode ou d’une propriété, ou undefined s’il n’existe pas de valeur par défaut, si la propriété n’est pas définie ou si l’élément est une méthode. description Chaîne Texte court décrivant l’objet ou undefined si aucune description n’est disponible. help Chaîne Texte long décrivant l’objet de façon plus précise ou undefined si aucune description n’est disponible. isCollection Booléen Lorsqu’elle est true, la méthode ou la propriété renvoie une collection. Dans le cas contraire, elle renvoie false. max Nombre Valeur numérique maximale pour l’élément ou undefined s’il n’y a pas de maximum ou si l’élément est une méthode. min Nombre Valeur numérique minimale pour l’élément ou undefined s’il n’y a pas de minimum ou si l’élément est une méthode. name Chaîne Nombre Nom de l’élément. Chaîne ou nombre pour un index de tableau de données. type Chaîne Type de l’élément. Choisissez : readonly : propriété en lecture seule. readwrite : propriété en lecture-écriture. createonly : propriété valide uniquement pendant la création d’un objet. method : méthode. Localisation de chaînes ExtendScript La localisation est le processus de traduction et de manipulation d’une interface de sorte qu’elle semble avoir été conçue à l’origine pour une langue donnée. Avec ExtendScript, vous avez la possibilité de localiser les chaînes de l’interface utilisateur de votre script. La langue est choisie par l’application, au lancement, selon la langue locale du système d’exploitation. Vous pouvez localiser le texte des parties de l’interface utilisateur qui s’affichent à l’écran. Vous pouvez localiser toute chaîne explicitement en utilisant la fonction Global localize, prenant comme argument un objet localisation contenant la version localisée d’une chaîne. Adobe InDesign CS2 Guide des scripts Utilisation des fonctions et outils ExtendScript 61 Un objet Localization est un littéral d’objet JavaScript dont les noms de propriété sont des noms de langue et dont les valeurs de propriété sont les chaînes de texte localisées. Le nom de langue est un code de langue standard comprenant éventuellement un identificateur de région. Pour obtenir des informations sur la syntaxe, reportez-vous à la section « Noms de langue ». Dans l’exemple suivant, un objet msg contient des chaînes de texte localisées pour deux langues. Cet objet contient le texte d’une boîte de dialogue d’avertissement. msg = { en: "Hello, world", de: "Hallo Welt" }; alert (msg); ExtendScript associe la langue et la plate-forme actives à l’une des propriétés de l’objet et utilise la chaîne associée. Pour un système allemand, par exemple, la propriété de: “Hallo Welt” est convertie en chaîne “Hallo Welt”. Valeurs des variables dans les chaînes localisées Certaines chaînes localisées doivent contenir des données supplémentaires dont l’emplacement et l’ordre peuvent varier selon la langue utilisée. Vous pouvez inclure des variables dans les valeurs de chaîne de l’objet Localization, sous la forme suivante %n. Les variables sont remplacées dans la chaîne renvoyée par les résultats des expressions JavaScript, fournies en tant qu’arguments supplémentaires de la fonction localize. La variable %1 correspond au premier argument supplémentaire, la variable %2 au deuxième, etc. Comme le remplacement se produit une fois la chaîne localisée choisie, les valeurs des variables sont insérées aux emplacements justes. Par exemple : today = { en: "Today is %1/%2.", de: "Heute ist der %2.%1." }; d = new Date(); alert (localize (today, d.getMonth()+1, d.getDate())); Activation de la localisation automatique ExtendScript comprend une fonction de localisation automatique. Lorsqu’elle est activée, vous pouvez définir un objet Localization directement en tant que valeur d’une propriété acceptant une chaîne localisable, sans faire appel à la fonction localize. Par exemple : msg = { en: "Yes", de: "Ja", fr: "Oui" }; alert (msg); Pour utiliser la traduction automatique des objets Localization, activez la localisation dans votre script avec l’instruction ci-dessous. $.localize = true; La fonction localize effectue toujours la traduction sans tenir compte du paramètre de la variable $.localize. Par exemple : msg = { en: "Yes", de: "Ja", fr: "Oui" }; //Only works if the $.localize=true alert (msg); //Always works, regardless of $.localize value alert ( localize (msg)); Si vous avez besoin d’inclure des variables dans les chaînes localisées, utilisez la fonction localize. 62 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Noms de langue Un nom de langue est une chaîne d’identification contenant un indicateur de langue ISO 639 et éventuellement un indicateur de région ISO 3166, séparé de l’indicateur de langue par un trait de soulignement. La norme ISO 639 définit un ensemble d’abréviations de langue en deux lettres, telles que en pour l’anglais et de pour l’allemand. La norme ISO 3166 définit un code de région, également identifié par deux lettres. Vous pouvez ajouter ce code à l’identificateur de langue en le faisant précéder d’un trait de soulignement. Ce code est facultatif. Par exemple, en _ US pour l’anglais des E.-U. et en _ GB pour l’anglais britannique. L’objet ci-dessous définit un message en anglais britannique, un autre en anglais (sans distinction de région) et enfin un dernier en allemand (sans distinction de région). message = { en_GB: "Please select a colour." en: "Please select a colour." de: "Bitte wählen Sie eine Farbe." }; Si vous avez besoin de spécifier des messages différents selon les plates-formes, vous pouvez ajouter un trait de soulignement supplémentaire suivi du nom de la plate-forme : Win, Mac ou Unix . Les objets cidessous, par exemple, définissent un message en anglais britannique pour Mac OS, un message en anglais (sans distinction de région) également pour Mac OS et enfin un message en anglais (sans distinction de région) à afficher quelle que soit la plate-forme utilisée. pressMsg = { en_GB_Mac: "Press Cmd-S to select a colour.", en_Mac: "Press Cmd-S to select a color.", en: "Press Ctrl-S to select a color." }; Tous les identificateurs sont sensibles à la casse. Par exemple, EN _ US est incorrect. ➤ Résolution des noms de langue 1. ExtendScript récupère la langue de l’application hôte, en _ US, par exemple. 2. Il ajoute l’identificateur de la plate-forme, en _ US _ Win, par exemple. 3. Il cherche ensuite une propriété associée. S’il en trouve une, il renvoie la chaîne de la valeur. 4. S’il n’en trouve pas, il supprime l’identificateur de la plate-forme (en _ US, par exemple) et effectue une nouvelle tentative. 5. S’il n’en trouve pas, il supprime l’identificateur de la région (en, par exemple) et effectue une nouvelle tentative. 6. S’il n’en trouve pas, il essaie uniquement avec l’identificateur en (la langue par défaut est l’anglais). 7. S’il n’en trouve pas, il renvoie l’ensemble de l’objet Localizer. Test de la localisation ExtendScript stocke la langue active dans la variable $.locale. Cette variable est mise à jour lorsque la langue de l’application hôte change. Pour tester les chaînes localisées, restaurez temporairement la langue. Pour restaurer le comportement d’origine, définissez la variable sur null, false, 0, ou sur la chaîne vide. Par exemple : $.locale = "ru"; // try your Russian messages $.locale = null; // restore to the locale of the app Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts 63 Fonction localize globale La fonction localize peut être utilisée pour fournir des chaînes localisées lorsqu’une valeur de texte affiché est spécifiée. localize localize (localization_obj[, args]) localize (ZString) localization_obj Renvoie la chaîne localisée pour la langue en cours. Littéral d’objet JavaScript dont les noms de propriété sont des noms de langue et dont les valeurs de propriété sont les chaînes de texte localisées. Le nom de langue est un identificateur conforme à la norme ISO 3166. Il s’agit d’une abréviation en deux lettres, telle que « en » pour l’anglais et « de » pour l’allemand. Par exemple : btnText = { en: "Yes", de: "Ja", fr: "Oui" }; b1 = w.add ("button", undefined, localize (btnText)); La valeur de chaîne de chaque propriété peut contenir des variables (sous la forme %1, %2, etc.) correspondant aux arguments supplémentaires. La variable est remplacée par le résultat de l’évaluation de l’argument correspondant dans la chaîne renvoyée. args Facultatif. Expressions JavaScript supplémentaires correspondant aux variables dans les valeurs de chaîne spécifiées dans l’objet Localization. Le premier argument correspond à la variable %1, le deuxième à la variable %2, et ainsi de suite. Chaque expression est évaluée, et le résultat inséré à l’emplacement de la variable dans la chaîne renvoyée. ➤ Exemple today = { en: "Today is %1/%2", de: "Heute ist der %2.%1." }; d = new Date(); alert (localize (today, d.getMonth()+1, d.getDate())); ZString Pour une utilisation interne uniquement. Le format ZString est un format Adobe interne pour les chaînes localisées. Il peut notamment être rencontré dans les scripts Adobe. Il se présente sous la forme d’une chaîne commençant par $$$ et contenant un chemin d’accès vers la chaîne localisée se trouvant dans un dictionnaire ZString installé. Par exemple : w = new Window ("dialog", localize ("$$$/UI/title1=Sample")); Fonctions d’assistance de notification utilisateur ExtendScript contient un ensemble de fonctions vous permettant d’afficher des messages courts pour l’utilisateur, via des boîtes de dialogue conformes au standard de la plate-forme utilisée. Les trois types de boîte de dialogue de message disponibles sont les suivants : Alert : permet d’afficher une boîte de dialogue contenant un message court et un bouton OK. Confirm : permet d’afficher une boîte de dialogue contenant un message court et deux boutons (Oui et Non) permettant à l’utilisateur d’accepter ou de refuser une action. 64 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Prompt : permet d’afficher une boîte de dialogue contenant un message court, un champ d’entrée de texte et les boutons OK et Annuler. Cette boîte de dialogue permet à l’utilisateur d’entrer une valeur pour le script. Ces boîtes de dialogues sont personnalisables dans une certaine limite. L’apparence des boîtes de dialogue est spécifique à la plate-forme utilisée. Fonction alert globale alert alert (message[, title, errorIcon]); Affiche une boîte de dialogue conforme au standard de la plate-forme, contenant un message court et un bouton OK. Renvoie undefined. message Chaîne pour le message affiché. title Facultatif. Chaîne qui apparaît comme titre de boîte de dialogue, si la plate-forme utilisée prend en charge les titres. Mac OS ne prend pas en charge les titres pour les boîtes de dialogue d’alerte. La chaîne de titre par défaut est « Alerte de script ». errorIcon Facultatif. Lorsqu’elle est true, l’icône d’alerte conforme au standard de la plate-forme est remplacée, dans la boîte de dialogue, par l’icône d’erreur de la plate-forme utilisée. La valeur par défaut est false. ➤ Exemples Les illustrations ci-dessous présentent des boîtes de dialogue d’alerte simples pour Windows et Mac OS. Les illustrations illustrations ci-dessous présentent des boîtes de dialogue d’alerte avec une icône d’erreur. Fonction confirm globale confirm confirm (message[,noAsDflt ,title ]); Affiche une boîte de dialogue conforme au standard de la plate-forme, contenant un message court et deux boutons (Oui et Non). Renvoie true si l’utilisateur clique sur Oui, false s’il clique sur Non. message Chaîne pour le message affiché. noAsDflt Facultatif. Lorsqu’elle est true, le bouton Non est le choix par défaut. Il est sélectionné si l’utilisateur appuie sur la touche Entrée. La valeur par défaut est false, ce qui signifie que Oui est le choix par défaut. Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts title 65 Facultatif. Chaîne qui apparaît comme titre de boîte de dialogue, si la plateforme utilisée prend en charge les titres. Mac OS ne prend pas en charge les titres pour les boîtes de dialogue de confirmation. La chaîne de titre par défaut est « Alerte de script ». ➤ Exemples Les illustrations ci-dessous présentent des boîtes de dialogue de confirmation simples pour Windows et Mac OS. Les illustrations ci-dessous présentent des boîtes de dialogue de confirmation avec le bouton Non défini par défaut. Fonction prompt globale prompt prompt (message, preset[, title ]); Affiche une boîte de dialogue conforme au standard de la plate-forme, contenant un message court, un champ d’entrée de texte et deux boutons (OK et Annuler). Renvoie la valeur du champ d’entrée de texte si l’utilisateur clique sur OK, et null s’il clique sur Annuler. message Chaîne pour le message affiché. preset Valeur initiale à afficher dans le champ d’entrée de texte. title Facultatif. Chaîne qui apparaît comme titre de boîte de dialogue. La chaîne Windows apparaît dans le cadre de la fenêtre alors que la chaîne Mac OS apparaît au-dessus du message. La chaîne de titre par défaut est « Invite de script ». ➤ Exemples Les illustrations ci-dessous présentent des boîtes de dialogue d’invite simples pour Windows et Mac OS. 66 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Les illustrations ci-dessous présentent des boîtes de dialogue d’invite avec une valeur title spécifiée. Spécification de valeurs de mesure Dans ExtendScript, l’objet UnitValue représente des valeurs de mesure. Les propriétés et méthodes de l’objet UnitValue simplifient la modification de la valeur, de l’unité, voire de la valeur et de l’unité, ou la conversion d’une unité en une autre. Objet UnitValue Il représente des valeurs de mesure qui contiennent une valeur numérique et une unité de mesure. Constructeur d’objet UnitValue Le constructeur UnitValue crée un nouvel objet UnitValue. Le mot-clé new est facultatif. myVal = new UnitValue (value, unit); myVal = new UnitValue ("value unit"); myVal = new UnitValue (value, "unit"); value est un nombre, et unit correspond à une chaîne abrégée, au singulier ou au pluriel, comme dans le tableau ci-dessous. Abréviation Singulier Pluriel Commentaires in inch inches 2,54 cm ft foot feet 30,48 cm yd yard yards 91,44 cm mi mile miles 1609,344 m mm millimeter millimeters cm centimeter centimeters m meter meters Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts km kilometer kilometers pt point points pouces / 72 pc pica picas points * 12 tpt traditional point traditional points pouces / 72,27 tpc traditional pica traditional picas 12 tpt ci cicero ciceros 12,7872 pt px pixel pixels sans base (voir ci-après) % percent (pourcentage) percent (pourcentage) sans base (voir ci-après) Lorsqu’un type d’unité inconnu est entré, le type est défini sur « ? », et l’objet UnitValue renvoie « UnitValue 0,00000 ». Dans ces exemples, tous les formats sont équivalents. myVal = new UnitValue (12, "cm"); myVal = new UnitValue ("12 cm"); myVal = UnitValue ("12 centimeters"); Propriétés des objets UnitValue baseUnit UnitValue Un objet UnitValue qui définit la taille d’un pixel, ou la taille totale devant servir de base pour les valeurs des pourcentages. Celui-ci est utilisé comme unité de conversion de base pour les pixels et les pourcentages ; reportezvous à la section « Conversion de valeurs en pixels et de pourcentages ». La valeur par défaut est 0,013889 pouce (1/72 pouce), l'unité de conversion de base pour les pixels à 72 ppp. Réglez sur null pour restaurer la valeur par défaut. type Chaîne Type d’unité (sous sa forme abrégée). Exemples : « cm » ou « in ». valeur Nombre La valeur de mesures numériques. Fonctions des objets UnitValue as unitValueObj.as (unit) Renvoie la valeur numérique de cet objet dans l’unité donnée. Si l’unité est inconnue ou ne peut pas être calculée, une erreur d’exécution est générée. unit Type d’unité (sous sa forme abrégée). Exemples : « cm » ou « in ». convert unitValueObj.convert (unit) unit Convertit cet objet dans l’unité donnée, redéfinissant le type et la valeur en conséquence. Renvoie true si la conversion réussit. Si l’unité est inconnue ou que l’objet ne peut pas être converti, une erreur d’exécution est générée et renvoie false. Type d’unité (sous sa forme abrégée). Exemples : « cm » ou « in ». 67 68 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Conversion de valeurs en pixels et de pourcentages La conversion de mesures d’unités différentes requiert une unité de base commune. Par exemple, le mètre est l’unité de base pour les longueurs. Toutes les unités de longueur peuvent être converties en mètres. Ainsi, toute unité de longueur peut être convertie en une autre unité de longueur. Les pixels et les pourcentages n’ont pas d’unité de base commune standard. Les mesures en pixels correspondent à une résolution d’affichage, et les mesures en pourcentage à une taille totale absolue. Pour convertir les pixels en unités de longueur, vous devez connaître la taille d’un pixel. La taille d’un pixel dépend de la résolution d’affichage. 72 ppp, une mesure de résolution classique, signifie qu’il y a 72 pixels par pouce. La base de conversion pour les pixels à 72 ppp est 0,013889 pouce (1/72 pouce). Les pourcentages correspondent à une mesure totale. Par exemple, 10 % de 100 pouces est égal à 10 pouces, et 10 % de 1 mètre est égal à 0,1 mètre. La base de conversion pour un pourcentage est la valeur d’unité correspondant à 100 %. La valeur baseUnit par défaut d’un objet unitValue est 0,013889 pouces (base pour les pixels à 72 ppp). Si l’objet unitValue est associé à des pixels à une autre résolution ou à un pourcentage, vous devez définir la valeur baseUnit en conséquence. La valeur baseUnit est un objet unitValue qui contient une valeur et une unité. Pour un système dont la résolution est différente, modifiez la valeur baseUnit dans la classe UnitValue. La valeur par défaut pour tous les nouveaux objets unitValue est alors modifiée. Par exemple, pour multiplier par deux la résolution des pixels : UnitValue.baseUnit = UnitValue (1/144, "in"); //144 ppp Pour restaurer la valeur par défaut, affectez null à la propriété de la classe : UnitValue.baseUnit = null; //restore default Vous pouvez remplacer la valeur par défaut pour tout objet unitValue donné, en définissant la propriété dans l’objet concerné. Par exemple, pour créer un objet unitValue pour des pixels de 96 ppp : pixels = UnitValue (10, "px"); myPixBase = UnitValue (1/96, "in"); pixels.baseUnit = myPixBase; Pour les pourcentages, définissez la propriété baseUnit à la valeur de mesure pour 100 %. Par exemple, pour créer un objet unitValue pour 40 % de 10 pieds : myPctVal = UnitValue (40, "%"); myBase = UnitValue (10, "ft") myPctVal.baseUnit = myBase; Utilisez la méthode as pour obtenir un pourcentage en tant que valeur d’unité : myFootVal = myPctVal.as ("ft"); // => 4 myInchVal = myPctVal.as ("in"); // => 36 Vous pouvez convertir un objet unitValue en mesure absolue en pixels ou en pourcentage de la même manière : myMeterVal = UnitValue (10, "m"); // 10 meters myBase = UnitValue (1, "km"); myMeterVal.baseUnit = myBase; //as a percentage of 1 kilometer pctOfKm = myMeterVal.as (‘%’); // => 1 myVal = UnitValue ("1 in"); // Define measurement in inches // convert to pixels using default base myVal.convert ("px"); // => value=72 type=px Calcul avec des valeurs d’unité Les objets UnitValue peuvent être utilisés dans des expressions de calcul JavaScript. Le type de l’opérateur détermine la façon selon laquelle la valeur est utilisée. Opérateurs unaires (~, !, +, -) Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts ~unitValue La valeur numérique est convertie en entier à 32 bits avec bits inversés. !unitValue Le résultat est true si la valeur numérique n’est pas nulle, et false dans le cas contraire. +unitValue Le résultat est la valeur numérique. -unitValue Le résultat est la valeur négative de la valeur numérique. 69 Opérateurs binaires (+, -, *, /, %) Si une opérande est l’objet unitValue et que l’autre est un nombre, l’opération s’applique au numéro et à la valeur numérique de l’objet. L’expression renvoie un nouvel objet unitValue avec pour valeur le résultat. Par exemple : val = new UnitValue (“10 cm”); res = val * 20; // res is a UnitValue (200, “cm”); Si les deux opérandes sont des objets unitValue, JavaScript convertit l’opérande de droite dans l’unité de l’opérande de gauche et applique l’opération aux valeurs qui en résultent. L’expression renvoie un nouvel objet unitValue avec l’unité de l’opérande de gauche et la valeur résultante. Par exemple : a = new UnitValue (“1 m”); b = new UnitValue (“10 cm”); a + b; // res is a UnitValue (1.1, “m”); b + a; // res is a UnitValue (110, “cm”); Comparaisons (=, ==, <, >, <=, >=) Si une opérande est un objet unitValue et que l’autre est un nombre, JavaScript compare le nombre à la valeur numérique de l’objet unitValue. Si les deux opérandes sont des objets unitValue, JavaScript convertit les deux objets dans la même unité, puis compare les valeurs numériques converties. Par exemple : a b a a a = new UnitValue (“98 cm”); = new UnitValue (“1 m”); < b; // => true < 1; // => false == 98; // => true Prise en charge de la programmation modulaire ExtendScript prend en charge une approche modulaire de la programmation. En effet, vous avez la possibilité d’inclure un script dans un autre en tant que ressource et d’autoriser un script à exporter des définitions pouvant être importées et utilisées dans un autre script. Directives de prétraitement ExtendScript fournit des directives de prétraitement permettant d’inclure des scripts externes, de nommer des scripts, de spécifier un moteur ExtendScript et de définir certains indicateurs. Vous pouvez définir ces directives des deux façons suivantes : Avec une instruction de style C, commençant par le caractère # : #include "file.jsxinc" Dans un commentaire dont le texte commence par le caractère @ : // @include “file.jsxinc” 70 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Lorsqu’une directive compte un ou plusieurs arguments et qu’un d’entre eux contient un caractère non alphanumérique, l’argument en question doit être mis entre guillemets simples ou doubles. C’est notamment le cas pour les chemins d’accès et noms de fichiers qui contiennent un grand nombre de points et de barres obliques. #engine name Identifie le moteur ExtendScript qui exécute ce script. Cela permet à d’autres moteurs de se référer aux scripts de ce moteur en important les fonctions et variables exportées. Reportez-vous à la section « Importation et exportation de scripts ». Pour le nom, utilisez la syntaxe d’identificateur JavaScript. Les guillemets sont facultatifs. Par exemple : #engine library #engine "$lib" #include file Inclut un fichier source JavaScript à partir d’un autre emplacement. Insère le contenu du fichier nommé dans ce fichier, à l’emplacement de cette instruction. L’argument file est une spécification de fichier portable Adobe. Reportez-vous à la section relative à la spécification des chemins d’accès. Utilisez l’extension de fichier .jsxinc pour les fichiers include JavaScript. Par exemple : #include "../include/lib.jsxinc" Pour définir un ou plusieurs chemins à analyser par l’instruction #include, utilisez la directive de prétraitement #includepath. Si le fichier à inclure est introuvable, ExtendScript génère une erreur d’exécution. Le code source inclus ne s’affiche pas dans le débogueur. Vous ne pouvez donc pas définir de point d’arrêt dans ce code. #includepath path Un ou plusieurs chemins que l’instruction #include doit utiliser pour localiser les fichiers à inclure. Le point-virgule (;) permet de séparer les différents noms de chemin. Si le nom d’un fichier #include commence par une barre oblique (/), il s’agit d’un nom de chemin absolu. Les chemins include sont alors ignorés. Sinon, ExtendScript tente de localiser le fichier en faisant précéder le nom du fichier de chaque chemin défini par l’instruction #includepath. Par exemple : #includepath "include;../include" #include "file.jsxinc" Il est possible d’utiliser plusieurs instructions #includepath. La liste des chemins change à mesure que les instructions #includepath sont exécutées. Par mesure de sécurité, ExtendScript utilise également le contenu de la variable d’environnement JSINCLUDE en tant que liste de chemins include. Certains moteurs peuvent comprendre un ensemble prédéfini de chemins include. Dans ce cas, le chemin spécifié par #includepath est testé avant les chemins prédéfinis. Si, par exemple, un chemin prédéfini du moteur est défini sur predef;predef/include, l’exemple précédent génère la séquence de recherche suivante : file.jsxinc : recherche littérale include/file.jsxinc : premier chemin #includepath ../include/file.jsxinc : second chemin #includepath predef/file.jsxinc : premier chemin de moteur prédéfini predef/include/file.jsxinc : second chemin de moteur prédéfini Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts #script name 71 Nomme un script. Les guillemets sont facultatifs, mais requis pour les noms qui contiennent des espaces ou des caractères spéciaux. Par exemple : #script SetupPalette #script "Load image file" La valeur name s’affiche dans l’onglet de l’éditeur de l’environnement Outils ExtendScript. Un nom unique généré à partir d’un nombre est affecté à chaque script sans nom. #strict on Active la recherche d’erreurs strictes. Reportez-vous à la propriété strict de l’objet Dollar ($). #target name Définit l’application cible de ce fichier JSX. La valeur name est un indicateur d’application ; reportez-vous à la section « Indicateurs d’application et d’espace de noms ». Les guillemets sont facultatifs. Si l’environnement Outils ExtendScript est enregistré comme gestionnaire pour les fichiers dont l’extension est .jsx (réglage par défaut), ouvrir le fichier a pour effet d’ouvrir l’application cible afin d’exécuter le script. Si cette directive est absente, l’environnement Outils ExtendScript charge et affiche le script. L’utilisateur doit cliquer deux fois sur le fichier à ouvrir dans un explorateur de fichiers. Le script, quant à lui, doit utiliser la méthode execute de l’Objet File pour ouvrir un fichier. Importation et exportation de scripts Le langage ExtendScript JavaScript a été étendu pour prendre en charge l’accès aux appels de fonction et aux variables via différents moteurs ExtendScript et modules de code source. Dans un script, l’instruction export permet de mettre les définitions de ce script à la disposition d’autres scripts faisant appel à l’instruction import pour accéder à ces définitions. Pour utiliser cette fonction, le moteur ExtendScript du script qui exporte doit être nommé par le biais de l’instruction de prétraitement #engine. Le nom doit respecter la syntaxe d’attribution de noms JavaScript. Il ne peut pas être une expression. Par exemple, le script ci-dessous peut servir de bibliothèque ou de fichier ressource. Il définit et exporte une constante et une fonction. #engine library export random, libVersion; const libVersion = "Library 1.0"; function random (max) { return Math.floor (Math.random() * max); } Un script exécuté dans un autre moteur peut importer les éléments exportés. L’instruction d’importation identifie le script de ressources à l’origine des variables exportées en utilisant le nom du moteur. import library.random, library.libVersion; print (random (100)); Pour importer tous les symboles exportés par une bibliothèque, utilisez le caractère générique (*). import library.* Les objets ne peuvent pas être transférés d’un moteur à un autre. Vous ne pouvez pas récupérer ou stocker des objets, ni appeler des fonctions avec des objets pour arguments. Vous pouvez toutefois utiliser la fonction Javascript toSource pour sérialiser des objets en chaînes avant de les transmettre. Utilisez ensuite la fonction JavaScript eval pour reconstruire l’objet à partir de la chaîne. 72 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts La fonction ci-dessous, par exemple, prend comme argument une chaîne sérialisée et reconstruit un objet à partir de cette chaîne. function myFn (serialized) { var obj = eval (serialized); // continue working… } En appelant la fonction, vous « déconstruisez » l’objet que vous souhaitez transmettre en chaîne sérialisée. myFn (myObject.toSource()); // pass a serialized object Surcharge d’opérateurs ExtendScript vous permet d’étendre ou de remplacer le comportement d’un opérateur mathématique ou booléen pour une classe spécifique en définissant une méthode dans cette classe portant le même nom que l’opérateur. Le code ci-dessous, par exemple, définit l’opérateur d’addition (+) pour la classe MyClass. Dans ce cas, l’opérateur d’addition ajoute simplement l’opérande à la valeur de la propriété. // define the constructor method function MyClass (initalValue) { this.value = initialValue; } // define the addition operator MyClass.prototype ["+"] = function (operand) { return this.value + operand; } Le code ci-dessous vous permet d’effectuer l’addition « + » avec n’importe quel objet de cette classe. var obj = new MyClass (5); Result: [object Object] obj + 10; Result: 15 Vous pouvez remplacer les opérateurs ci-dessous. Unaire +, ~ Binaire +, *, /, %, ^ <, <=, == <<, >>, >>> &, |, === Les opérateurs > et >= sont implémentés en exécutant l’opérateur NOT <= et l’opérateur NOT <. Les combinaisons d’opérateurs d’assignation telles que *= ne sont pas prises en charge. Toute implémentation de surcharge d’opérateurs doit renvoyer le résultat de l’opération. Pour effectuer l’opération par défaut, renvoyez undefined . Les fonctions des opérateurs unaires travaillent sur l’objet this, alors que celles des opérateurs binaires travaillent sur l’objet this ainsi que sur le premier argument. Les opérateurs + et - ont à la fois des implémentations unaires et binaires. Si le premier argument n’est pas défini, l’opérateur est unaire. S’il est fourni, l’opérateur est binaire. Pour les opérateurs binaires, un second argument indique l’ordre des opérandes. Pour les opérateurs non commutatifs, implémentez les deux variantes d’ordre dans votre fonction ou renvoyez undefined pour les combinaisons que vous ne prenez pas en charge. Par exemple : this ["/"] = function (operand, rev) { if (rev) { // do not resolve operand / this return; } else { // resolve this / operand return this.value / operand; } } Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts 73 Indicateurs d’application et d’espace de noms Toute forme de communication entre applications utilise des indicateurs d’application pour identifier les applications Adobe. Dans tous les scripts ExtendScript, la directive #target peut utiliser un indicateur pour identifier l’application chargée d’exécuter le script. Reportez-vous à la section « Directives de prétraitement ». Dans les messages entre applications, l’indicateur est utilisé comme valeur pour la propriété target de l’objet du message, afin d’identifier l’application cible devant recevoir le message. L’application Bridge (intégrée aux applications Adobe Creative Suite 2, CS2) utilise un indicateur d’application comme valeur de propriété document.owner, afin d’identifier une autre application CS2 à l’origine de la création ou de l’ouverture de la fenêtre de l’explorateur Bridge. Pour plus de détails, reportez-vous au Guide de référence JavaScript Bridge, disponible avec CS2. Lorsque le script d’une application appelle des fonctions exportées ou Cross-DOM, il identifie l’application à l’origine de l’exportation en utilisant des indicateurs d’espace de noms. Indicateurs d’application Les indicateurs d’application sont des chaînes qui codent le nom de l’application, un numéro de version et un code de langue. Ils se présentent comme suit : appname[-version[-locale]] appname Nom d’une application Adobe. Choisissez : acrobat aftereffects atmosphere audition bridge encore golive illustrator incopy indesign photoshop premiere version Facultatif. Nombre indiquant au moins une version principale. S’il n’est pas spécifié, le numéro de version le plus récent est pris en compte. Le numéro peut comprendre un numéro de version secondaire séparé du numéro de version principale par un point. Exemple : 1.5. locale Facultatif. Code de langue Adobe, constitué d’un code de langue ISO-639 à deux lettres et d’un code de région ISO 3166 à deux lettres (facultatif), séparé du code de langue par un trait de soulignement. La casse doit être respectée. Exemple : en _ US, en _ UK, ja _ JP, de _ DE, fr _ FR. S’il n’est pas fourni, ExtendScript utilise la langue de la plate-forme en cours. Ne spécifiez pas de langue dans le cas d’une application multilingue, telle que Bridge, qui possède toutes les langues au sein d’une installation unique. Les exemples ci-dessous sont des exemples d’indicateurs autorisés. photoshop bridge-1 bridge-1.0 illustrator-12,2 bridge-1-en_us golive-8-de_de 74 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Indicateurs d’espace de noms Lorsque vous appelez des fonctions exportées et cross-DOM à partir d’autres applications, un identificateur d’espace de noms qualifie l’appel de fonction en l’acheminant vers l’application appropriée. Les indicateurs d’espace de noms se composent d’un nom d’application, comme celui de l’identificateur d’application et d’un numéro de version principale. Placez-le en tant que préfixe de nom de fonction exportée, et faites-le suivre du point de syntaxe JavaScript. appname[majorVersion].functionName(args) Par exemple : Pour appeler la fonction cross-DOM quit dans Photoshop CS2, utilisez photoshop.quit(), et pour l’appeler dans GoLive CS2, utilisez golive.quit(). Pour appeler la fonction exportée place, définie pour Illustrator® CS version 12, appelez illustrator12.place(myFiles). Pour plus de détails sur les fonctions exportées et cross-DOM, reportez-vous au Guide de référence JavaScript Bridge, disponible avec Adobe Creative Suite 2. Emplacements des scripts et vérification de l’installation de l’application Au démarrage, les applications Adobe Creative Suite 2 exécutent tous les fichiers JSX qui se trouvent dans le dossier de démarrage de l’utilisateur : Le dossier de démarrage Windows est : %APPDATA%\Adobe\StartupScripts Le dossier de démarrage Mac OS est : ~/Library/Application Support/Adobe/StartupScripts/ Un script qui se trouve dans le dossier de démarrage est exécuté au démarrage par toutes les applications. Si vous placez un script dans ce dossier, il doit contenir un code chargé de vérifier s’il est exécuté par l’application appropriée. Pour ce faire, utilisez la propriété statique appName de la classe BridgeTalk. Par exemple : if( BridgeTalk.appName == "bridge" ) { //continue executing script } En outre, chaque application recherche des scripts spécifiques aux applications dans des sous-dossiers portant le nom de l’indicateur et le numéro de version de l’application. Le chemin se présente comme suit : %APPDATA%\Adobe\StartupScripts\appname\version ~/Library/Application Support/Adobe/StartupScripts/appname/version/ Le nom et le numéro de version dans ces noms de dossier sont spécifiés selon le format requis pour les indicateurs d’application. Par exemple, sous Windows, GoLive CS2 version 8.2 recherche des scripts dans le dossier : %APPDATA%\Adobe\StartupScripts\golive\8.2 La partie version du chemin d’accès au dossier spécifique Bridge est constituée d’un numéro de version exact. Par exemple, les scripts du dossier bridge/1.5 sont exécutés uniquement par Bridge version 1.5, etc. Adobe InDesign CS2 Guide des scripts Utilisation des fonctions et outils ExtendScript Pour qu’un script exécuté par une application communique avec une autre application ou pour qu’il ajoute une fonctionnalité dépendant d’une autre application, ce script doit tout d’abord vérifier que la version de l’application est installée. Pour ce faire, utilisez la fonction statique BridgeTalk. getSpecifier. Par exemple : if( BridgeTalk.appName == "bridge" ) { // Check that PS CS2 is installed if( BridgeTalk.getSpecifier("photoshop",9)){ // add PS automate menu to Bridge UI } } Pour plus de détails sur la communication entre applications, reportez-vous au Guide de référence JavaScript Bridge, disponible avec Adobe Creative Suite 2. 75 76 Utilisation des fonctions et outils ExtendScript Adobe InDesign CS2 Guide des scripts Adobe InDesign CS2 Guide des scripts 5 Utilisation de documents dans AppleScript Utilisation de documents dans AppleScript La plupart des tâches que vous effectuez dans InDesign concernent des documents : création, enregistrement, insertion d’éléments de page, de couleurs, de styles et de textes. Les documents sont également nécessaires au script InDesign, et presque chaque tâche associée à un document peut être automatisée par le biais d’un script. Dans ce chapitre, vous apprendrez à : Effectuer les tâches élémentaires de gestion de documents, parmi lesquelles Créer un document Ouvrir un document Fermer un document Enregistrer un document Effectuer les tâches élémentaires de mise en page, notamment : Définir le format de page et la longueur du document Définir le fond perdu et la ligne-bloc Déterminer les colonnes et les marges Changer l’aspect de la table de montage Utiliser les repères et les grilles Changer les unités de mesure et le point d’origine de la règle Déterminer et appliquer les paramètres prédéfinis de document Définir les pages types (les doubles pages types) Définir les paramètres de mise en forme de texte par défaut Ajouter des métadonnées XMP (informations sur un fichier) Créer un modèle de document Imprimer un document Exporter un document au format PDF Exporter des pages d’un document au format EPS Remarque : si ce n’est déjà fait, consultez le chapitre 3, « Initiation aux scripts InDesign » et apprenez à créer un script avant de continuer. 77 78 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts Notions de base de la gestion de documents Dans la plupart des situations, votre script doit soit ouvrir soit créer un document, l’enregistrer, puis le fermer. Création d’un document Si vous n’avez pas de document existant, vous devez en créer un. Pour créer un document : --MakeDocument.as --AppleScript InDesign CS2 --Crée un document. tell application "Adobe InDesign CS2" set myDocument to make document end tell Vous pouvez spécifier un paramètre prédéfini lorsque vous créez un document : --MakeDocumentWithPreset.as --AppleScript InDesign CS2 --Crée un document en utilisant le paramètre prédéfini du document en question. --Remplacez "myDocumentPreset" dans la ligne ci-dessous avec le nom --du paramètre prédéfini du document que vous souhaitez utiliser. tell application "Adobe InDesign CS2" set myDocument to make document with properties ¬ {document preset:"myDocumentPreset"} end tell Lorsque vous créez un document, vous pouvez l’ouvrir en mode masqué plutôt que de l’afficher dans une fenêtre : --MakeDocumentWithParameters.as --MakeDocumentWithParameters.as --AppleScript InDesign CS2 --Crée un document sans afficher sa fenêtre. --Le paramètre "showing window" permet de contrôler la visibilité du document. --Les documents masqués ne sont pas réduits, et ne s’affichent que lorsque --vous indiquez au document de créer une fenêtre. tell application "Adobe InDesign CS2" set myDocument to make document with properties {showing window:false} --Pour afficher la fenêtre : --tell myDocument --set myWindow to make window --end tell end tell Ouverture d’un document L’exemple de script ci-dessous indique comment ouvrir un document existant. Définissez le paramètre showing window sur false (la valeur par défaut est true) dans la commande Open pour masquer le document. Ceci peut vous permettre d’améliorer les performances d’un script. Pour afficher un document masqué, créez une fenêtre, comme indiqué dans le script suivant : --OpenFile.as --AppleScript InDesign CS2 --Ouvre le fichier spécifié. tell application "Adobe InDesign CS2" --Vous pouvez ouvrir des fichiers à l’aide du paramètre "showing window" --sans les afficher. Ceci peut accélérer le nombre d’opérations de script --et permettre à un script d’agir --sur un fichier en arrière-plan. Pour afficher un document que vous avez --ouvert de cette manière, indiquez au document de créer une fenêtre. --Vous devez spécifier le chemin de votre fichier. set myDocument to open "yukino:myTestDocument.indd" without showing window --A ce stade, votre script pourrait modifier ou extraire des informations --du document masqué. tell myDocument to make window end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 79 Fermeture d’un document La commande close permet de fermer un document : --CloseDocument.as --AppleScript InDesign CS2 --Ferme un document. tell application "Adobe InDesign CS2" close document 1 --document 1 fait toujours référence au document au premier plan. --Notez que vous pouvez également utiliser : --close active document end tell La commande Close peut accepter deux paramètres facultatifs : --CloseWithParameters.as --AppleScript InDesign CS2 --Utilisez les options SaveOptions.yes pour enregistrer le document, SaveOptions.no pour fermer le document --sans l’enregistrer ou SaveOptions.ask pour afficher une invite. Si vous utilisez --SaveOptions.yes, --vous devrez faire référence à un fichier vers lequel enregistrer dans le second --paramètre (saving in). tell application "Adobe InDesign CS2" --Si le fichier n’a jamais été enregistré (un fichier sans nom), affichez une invite. if saved of active document is not equal to true then close active document saving ask --Ou, pour enregistrer sous un nom de fichier particulier (vous devrez indiquer le chemin), entrez : --set myFile to "yukino:myTestDocument.indd" --close active document saving yes saving in myFile else --Si le fichier a déjà été enregistré dans un fichier, enregistrez-le. close active document saving yes end if end tell Cet exemple ferme tous les documents ouverts sans les enregistrer : --CloseAll.as --AppleScript InDesign CS2 --Ferme tous les documents sans les enregistrer. tell application "Adobe InDesign CS2" tell documents to close without saving end tell Enregistrement d’un document Dans l’interface utilisateur d’InDesign, la commande Enregistrer du menu Fichier permet d’enregistrer un fichier, l’option Enregistrer sous permet d’enregistrer un fichier sous un nom différent. Dans le script InDesign, la commande save permet d’effectuer les deux opérations : --SaveDocument.as --AppleScript InDesign CS2 --Enregistre le document actif. --Si le document actif a subi des modifications depuis le dernier enregistrement, enregistrezle. tell application "Adobe InDesign CS2" if modified of active document is true then tell active document to save end if end tell La commande save propose deux options : la première (to) détermine le fichier vers lequel le fichier actuel doit être enregistré ; la seconde (stationery) peut être définie sur true pour enregistrer le document en tant que modèle : --SaveDocumentAs.as --AppleScript InDesign CS2 --Si le document actif n’a pas encore été enregistré (s’il s’agit du premier enregistrement), 80 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts enregistrez-le. tell application "Adobe InDesign CS2" if saved of active document is false then --Si vous n’indiquez pas un nom de fichier, InDesign affichera la boîte de dialogue Enregistrer. tell active document to save saving in "yukino:myTestDocument.indd" end if end tell L’exemple suivant permet d’enregistrer un document en tant que modèle : --SaveAsTemplate.as --AppleScript InDesign CS2 --Enregistrer le document actif en tant que modèle. tell application "Adobe InDesign CS2" set myDocument to active document tell myDocument if saved is true then --Convertir le nom de fichier en une chaîne de caractères. set myFileName to full name set myFileName to my myReplace(myFileName, ".indd", ".indt") else --Si le document n’a pas été enregistré, indiquez un --nom/chemin par défaut. Vous devez indiquer le chemin du fichier. set myFileName to "yukino:myTestDocument.indt" end if save to myFileName with stationery end tell end tell on myReplace(myString, myFindString, myChangeString) set AppleScript’s text item delimiters to myFindString set myTextList to every text item of (myString as text) set AppleScript’s text item delimiters to myChangeString set myString to myTextList as string set AppleScript’s text item delimiters to "" return myString end myReplace Notions de base de la mise en page Chaque document comprend un format de page, un nombre de pages attribué, des zones de fond perdu et de ligne-bloc, des colonnes et des marges qui définissent la zone de placement des éléments. Définition du format de page et de la longueur du document Lorsque vous créez un document dans l’interface utilisateur d’InDesign, vous pouvez spécifier le format et l’orientation de la page, le nombre de pages et l’utilisation éventuelle de pages en vis-à-vis. Pour créer un document à l’aide d’un script InDesign, vous utilisez la commande make document, qui ne spécifie pas ces paramètres. Une fois le document créé, vous pouvez contrôler ces paramètres grâce à l’objet document preferences : --DocumentPreferences.as --AppleScript InDesign CS2 --Définit la hauteur, la largeur et l’orientation d’un document. tell application "Adobe InDesign CS2" set myDocument to make document tell document preferences of myDocument set page height to "800pt" set page width to "600pt" set page orientation to landscape set pages per document to 16 end tell end tell Remarque : l’objet application contient également un objet document preference. Vous pouvez déterminer les valeurs par défaut de l’application pour la hauteur et la largeur de page, ainsi que d’autres propriétés en modifiant les propriétés de cet objet. Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 81 Définition du fond perdu et de la ligne-bloc Dans InDesign, le fond perdu et la ligne-bloc sont des zones en-dehors des marges qui peuvent être imprimées ou comprises dans un document PDF exporté. De manière générale, ces zones sont utilisées pour les objets qui s’étendent au-delà des bords de page (fond perdu) et des informations sur le document/travail (ligne-bloc). Les deux zones peuvent être imprimées et exportées indépendamment l’une de l’autre. Par exemple, vous pouvez choisir d’ignorer les informations sur la ligne-bloc pour l’impression finale d’un document. Le script suivant détermine le fond perdu et la ligne-bloc pour un nouveau document : --BleedAndSlug.as --AppleScript InDesign CS2 Indique comment définir les zones de fond perdu et de ligne-bloc d’un document. tell application "Adobe InDesign CS2" --Créer un document. set myDocument to make document --Les propriétés de fond perdu et de ligne-bloc appartiennent à l’objet document preferences. tell document preferences of myDocument --Fond perdu set document bleed bottom offset to "3p" set document bleed top offset to "3p" set document bleed inside or left offset to "3p" set document bleed outside or right offset to "3p" --Ligne-bloc set slug bottom offset to "18p" set slug top offset to "3p" set slug inside or left offset to "3p" set slug right or outside offset to "3p" end tell end tell Si toutes les valeurs du fond perdu sont égales, comme dans l’exemple précédent, vous pouvez également utiliser la propriété document bleed uniform size : --UniformBleed.as --AppleScript InDesign CS2 --Indique comment utiliser les propriétés de taille uniforme du fond perdu du document. tell application "Adobe InDesign CS2" --Créer un document. set myDocument to make document --Les propriétés de fond perdu appartiennent à l’objet document preferences. tell document preferences of myDocument --Fond perdu set document bleed top offset to "3p" set document bleed uniform size to true end tell end tell Si toutes les valeurs de la ligne-bloc sont égales, vous pouvez utiliser la propriété document slug uniform size : --UniformSlug.as --AppleScript InDesign CS2 --Indique comment utiliser la propriété de taille uniforme de la ligne-bloc du document. --Créer un document. tell application "Adobe InDesign CS2" --Créer un document. set myDocument to make document --Les propriétés de fond perdu appartiennent à l’objet document preferences. tell document preferences of myDocument --Ligne-bloc set document slug uniform size to true set slug top offset to "3p" end tell end tell Vous pouvez non seulement déterminer la largeur et la hauteur des zones de fond perdu et de ligne-bloc, mais également la couleur des repères délimitant ces zones. Cette propriété ne se trouve pas dans l’objet document preferences, mais dans l’objet pasteboard preferences : --BleedSlugGuideColors.as 82 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts --AppleScript InDesign CS2 --Indique comment utiliser les couleurs pour afficher les zones de fond perdu et de ligne-bloc. tell application "Adobe InDesign CS2" --Suppose que vous disposez d’un document ouvert. tell pasteboard preferences of active document --Tous les repères InDesign peuvent utiliser les constantes de couleurs UI... set bleed guide color to cute teal set slug guide color to charcoal --...ou vous pouvez indiquer une liste de valeurs RVB (de 0 à 255). set bleed guide color to {0, 198, 192} set slug guide color to {192, 192, 192} end tell end tell Configuration des marges et des colonnes Dans un document, chaque page peut être configurée différemment en termes de marges et de colonnes. Avec le script InDesign, ces propriétés font partie de l’objet margin preferences pour chaque page. A titre d’exemple, ce script crée un document, puis définit les marges et les colonnes pour toutes les pages de la planche type : --PageMargins.as --AppleScript InDesign CS2 --Indique comment définir les marges d’un nouveau document. tell application "Adobe InDesign CS2" set myDocument to make document tell view preferences of myDocument set horizontal measurement units to points set vertical measurement units to points end tell tell master spread 1 of myDocument tell margin preferences of pages set top to 36 set left to 36 set bottom to 48 set right to 36 end tell end tell end tell Pour définir les marges d’une page individuelle, utilisez les préférences de marges pour cette page, comme indiqué dans l’exemple ci-dessous : --PageMarginsForOnePage.as --AppleScript InDesign CS2 --Indique comment définir les marges d’une seule page dans un nouveau document. tell application "Adobe InDesign CS2" set myDocument to make document tell view preferences of myDocument set horizontal measurement units to points set vertical measurement units to points end tell tell margin preferences of page 1 of myDocument set top to 36 set left to 36 set bottom to 48 set right to 36 end tell end tell InDesign vous permet de ne pas créer de page qui soit plus petite que la somme de ses marges. La largeur de la page doit être supérieure à la somme des marges gauche et droite, et la hauteur de page doit être supérieure à la somme des marges de haut et de bas de page. Si vous créez des pages très petites (pour un encart presse par exemple) dans l’interface utilisateur InDesign, entrez de nouvelles valeurs dans la zone de texte Marges de la boîte de dialogue Nouveau document pour définir des marges correctes lors de la création du document. Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 83 Toutefois, la solution est moins évidente avec un script. Lorsque vous créez un document, le script utilise les préférences de marge par défaut de l’application. Ces marges sont appliquées à toutes les pages du document, y compris aux gabarits. Les préférences de marges du document, une fois définies, ne s’appliquent qu’aux nouvelles pages et n’ont pas d’incidence sur les pages existantes. Si vous essayez de définir la hauteur et la largeur de page avec des valeurs inférieures à la somme des marges correspondantes sur l’une des pages existantes, InDesign ne modifie pas le format de page. Deux solutions s’offrent à vous. La première consiste à définir les marges des pages existantes avant de modifier le format de page : --PageMarginsForSmallPages.as --AppleScript InDesign CS2 --Indique comment définir les marges d’un nouveau document pour créer un format de page très petit. --Si vous ne définissez pas les marges en premier, InDesign affiche un message d’erreur lorsque --vous essayez de créer un format de page d’une hauteur inférieure à la somme --des marges du haut et du bas, ou d’une largeur inférieure à la somme --des marges intérieure et extérieure. tell application "Adobe InDesign CS2" set myDocument to make document tell margin preferences of page 1 of myDocument set top to 0 set left to 0 set bottom to 0 set right to 0 end tell tell master spread 1 of myDocument tell margin preferences of pages set top to 0 set left to 0 set bottom to 0 set right to 0 end tell end tell --A ce stade, vous pouvez définir des valeurs minimes pour la largeur et la hauteur de la page. --(minimum 1 x 1 pica) set page height of document preferences of myDocument to "1p" set page width of document preferences of myDocument to "6p" end tell Vous pouvez également modifier les préférences de marges par défaut de l’application avant de créer le document : --ApplicationPageMargins.as --AppleScript InDesign CS2 --Indique comment définir les marges d’un nouveau document pour créer un format de page très petit. --Si vous ne définissez pas les marges en premier, InDesign affiche un message d’erreur lorsque --vous essayez de créer un format de page d’une hauteur inférieure à la somme --des marges du haut et du bas, ou d’une largeur inférieure à la somme --des marges intérieure et extérieure. tell application "Adobe InDesign CS2" tell margin preferences --Enregistrer les préférences de marges par défaut actuelles de l’application. set myY1 to top set myX1 to left set myY2 to bottom set myX2 to right --Définir les préférences de marges par défaut de l’application. set top to 0 set left to 0 set bottom to 0 set right to 0 end tell --A ce stade, vous pouvez créer un document. set myDocument to make document --A ce stade, vous pouvez définir des valeurs minimes pour la largeur et la hauteur de la page. --(minimum 1 x 1 pica) set page height of document preferences of myDocument to "1p" 84 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set page width of document preferences of myDocument to "1p" --Rétablir les préférences de marges par défaut de l’application à leur état antérieur. tell margin preferences set top to myY1 set left to myX1 set bottom to myY2 set right to myX2 end tell end tell Modification de l’aspect de la table de montage La table de montage est une zone qui encadre les pages InDesign. Vous pouvez y stocker temporairement des éléments de la page. Il est possible de modifier la taille et la couleur de la table de montage à l’aide d’un script. La propriété pasteboard color permet de contrôler la couleur de la table de montage en mode Normal ; la propriété preview background color définit la couleur de la table de montage en mode Aperçu : --PasteboardPreferences.as --AppleScript InDesign CS2 --Créer un document et modifier la taille de la table de montage. tell application "Adobe InDesign CS2" set myDocument to make document tell pasteboard preferences of myDocument --Vous pouvez utiliser soit un nombre soit des mesures pour définir --l’espace au-dessus/en dessous. set minimum space above and below to "12p" --Il est possible d’attribuer à la table de montage l’une des constantes de couleurs UI prédéfinies... set pasteboard color to white set preview background color to gray --...ou un ensemble de valeurs RVB (de 0 à 255). --set pasteboard Color to {0, 0, 0} --set preview Background Color to {192, 192, 192} end tell end tell Utilisation des repères et des grilles Les repères et les grilles facilitent le positionnement des objets sur les pages de votre document. Définition des repères InDesign propose des repères pour vous aider à positionner les objets sur les pages de votre document. Exemple d’utilisation des repères : --Guides.as --AppleScript InDesign CS2 --Crée une série de repères à titre d’exemple. tell application "Adobe InDesign CS2" set myDocument to make document set myPageWidth to page width of document preferences of myDocument set myPageHeight to page height of document preferences of myDocument tell page 1 of myDocument set myMarginPreferences to margin preferences --Placer des repères sur les marges de la page. make guide with properties {orientation:vertical, ¬ location:left of myMarginPreferences} make guide with properties {orientation:vertical, ¬ location:(myPageWidth - (right of myMarginPreferences))} make guide with properties {orientation:horizontal, ¬ location:top of myMarginPreferences} make guide with properties {orientation:horizontal, ¬ location:(myPageHeight - (bottom of myMarginPreferences))} --Placer un repère vertical au centre de la page. make guide with properties {orientation:vertical, location:(myPageWidth / 2)} Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 85 --Placer un repère horizontal au centre de la page. make guide with properties {orientation:horizontal, location:(myPageHeight / 2)} end tell end tell Les repères horizontaux peuvent se limiter à une page donnée, ou s’étendre sur toutes les pages d’une planche. A l’aide d’un script InDesign, vous pouvez contrôler cette possibilité grâce à la propriété fit to page (les repères verticaux ignorent cette propriété). Vous pouvez utiliser un script pour modifier le calque, la couleur et la visibilité des repères, tout comme vous pouvez le faire à partir de l’interface utilisateur : --GuideOptions.as --AppleScript InDesign CS2 --Indique comment définir les options de repères. tell application "Adobe InDesign CS2" set myDocument to make document tell myDocument --Créer un calque nommé "guide layer". set myLayer to make layer with properties {name:"guide layer"} --Ajouter une série de repères à la page 1. tell page 1 --Créer un repère sur le calque créé précédemment. make guide with properties {orientation:horizontal, location:"12p", ¬ item layer:myLayer} make guide with properties {item layer:myLayer, ¬ orientation:horizontal, location:"14p"} --Créer un repère verrouillé. make guide with properties {locked:true, ¬ orientation:horizontal, location:"16p"} --Définir le seuil d’affichage d’un repère. make guide with properties {view threshold:100, ¬ orientation:horizontal, location:"18p"} --Déterminer la couleur d’un repère à l’aide d’une constante de couleurs UI. make guide with properties {guide color:gray, ¬ orientation:horizontal, location:"20p"} --Déterminer la couleur d’un repère à l’aide d’un ensemble de valeurs RVB. make guide with properties {guide color:{192, 192, 192}, ¬ orientation:horizontal, location:"22p"} end tell end tell end tell Il est également possible de créer des repères à l’aide de la commande create guides des planches et des planches types : --CreateGuidesCommand.as --AppleScript InDesign CS2 --Ajouter une série de repères à l’aide de la commande de création de repères. tell application "Adobe InDesign CS2" set myDocument to make document tell spread 1 of myDocument --Paramètres (tous facultatifs) : row count, column count, row gutter, column gutter (compte de ligne, compte de colonne, gouttière de ligne, gouttière de colonne), --guide color, fit margins, remove existing, layer (couleur de repère, marges ajustées, suppression, calque). --Notez que cette méthode de création de repères n’accepte pas de valeurs RVB --pour le paramètre de couleur de repère. create guides number of rows 4 number of columns 4 row gutter "1p" ¬ column gutter "1p" guide color gray with fit margins and remove existing end tell end tell Configuration des préférences de grille Pour contrôler les propriétés du document et de la grille de ligne de base, définissez les propriétés de l’objet grid preferences comme dans le script ci-dessous : --DocumentAndBaselineGrid.as --AppleScript InDesign CS2 86 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts --Définit les préférences de la grille de document et de la grille de ligne de base dans un nouveau document. tell application "Adobe InDesign CS2" set myDocument to make document set horizontal measurement units of view preferences of myDocument to points set vertical measurement units of view preferences of myDocument to points tell grid preferences of myDocument set baseline start to 56 set baseline division to 14 set baseline grid shown to true set horizontal gridline division to 14 set horizontal grid subdivision to 5 set vertical gridline division to 14 set vertical grid subdivision to 5 set document grid shown to true end tell end tell Magnétisme des repères et des grilles La totalité des paramètres de magnétisme des grilles et des repères d’un document se trouve dans les propriétés des objets guide preferences et grid preferences. Voici un exemple : --GuideGridPreferences.js --AppleScript InDesign CS2 --Active les paramètres de magnétisme (snap) d’un document. --Suppose que vous disposez d’un document ouvert. tell application "Adobe InDesign CS2" set myDocument to active document tell guide preferences of myDocument set guides in back to true set guides locked to false set guides shown to true set guides snapto to true end tell tell grid preferences of myDocument set document grid shown to false set document grid snapto to true --Magnétisme de la grille de ligne de base actif pour les objets lorsque guidePreferences. guideSnapTo --est défini sur true. set baseline grid shown to true end tell end tell Modification des unités de mesure et de la règle Les exemples de scripts donnés jusqu’à présent faisaient appel à des chaînes de mesures, c’est à dire des chaînes forçant InDesign à utiliser une unité de mesure spécifique, « 8,5 p » par exemple, pour 8,5 pouces. Vous pourriez en effet utiliser un système de mesure différent lors de l’exécution du script. Pour déterminer l’unité de mesure d’un script, utilisez l’objet view preferences du document : --ViewPreferences.as --AppleScript InDesign CS2 --Définit les unités de mesure en points. --Suppose que vous disposez d’un document ouvert. tell application "Adobe InDesign CS2" set myDocument to active document tell view preferences of myDocument --Les différentes unités de mesure possibles sont les suivantes : --picas, points, pouces, pouces décimaux, millimètres, centimètres ou cicéros. --Définir les unités de mesure verticales et horizontales en points. set horizontal measurement units to points set vertical measurement units to points end tell end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 87 Si vous écrivez un script qui requiert un système de mesure particulier, vous pouvez modifier les unités de mesure au début du script, puis rétablir celles d’origine à la fin de celui-ci, comme dans l’exemple cidessous : --ResetMeasurementUnits.as --AppleScript InDesign CS2 --Définit les unités de mesure, exécute certaines actions, puis --rétablit les unités de mesure d’origine. --Suppose que vous disposez d’un document ouvert. tell application "Adobe InDesign CS2" set myDocument to active document tell view preferences of myDocument set myOldXUnits to horizontal measurement units set myOldYUnits to vertical measurement units set horizontal measurement units to points set vertical measurement units to points end tell --A ce stade, vous pouvez exécuter une série quelconque d’actions de script dépendant des --unités de mesure que vous avez définies. A la fin du script, rétablissez --les unités de mesure à leur état d’origine. tell view preferences of myDocument set horizontal measurement units to myOldXUnits set vertical measurement units to myOldYUnits end tell end tell Définition et application des paramètres prédéfinis de document Les paramètres prédéfinis de documents InDesign vous permettent de stocker et d’appliquer des paramètres de configuration de document que vous utilisez souvent (format de page, marges, colonnes, et zones de fond perdu et de ligne-bloc). Lorsque vous créez un document, vous pouvez baser celui-ci sur un paramètre prédéfini de document. Création d’un paramètre prédéfini par copie de valeurs Pour créer un paramètre prédéfini de document à partir des paramètres d’un document existant, ouvrez le document dont vous souhaitez copier les propriétés de configuration pour votre paramètre prédéfini, puis exécutez le script suivant : --DocumentPresetByExample.as --AppleScript InDesign CS2 --Crée un paramètre prédéfini de document d’après la configuration du document actif. tell application "Adobe InDesign CS2" if (count documents) > 0 then set myDocument to active document --Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. try set myDocumentPreset to document preset "myDocumentPreset" on error set myDocumentPreset to make document preset with ¬ properties {name:"myDocumentPreset"} end try --Compléter les propriétés du paramètre prédéfini de document avec --les propriétés correspondantes du document actif. tell myDocumentPreset --Notez que le script suivant applique les préférences de marges --du document ; pour appliquer les préférences de marges de la page active, --remplacez "myDocument" par "active page of active window" dans la --ligne suivante (en supposant que la fenêtre active est une fenêtre de mise en page) : set myMarginPreferences to margin preferences of myDocument set left to left of myMarginPreferences set right to right of myMarginPreferences set top to top of myMarginPreferences set bottom to bottom of myMarginPreferences set column count to column count of myMarginPreferences set column gutter to column gutter of myMarginPreferences 88 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set document bleed bottom offset to document bleed bottom offset ¬ of document preferences of myDocument set document bleed top offset to document bleed top offset ¬ of document preferences of myDocument set document bleed inside or left offset to document bleed inside ¬ or left offset of document preferences of myDocument set document bleed outside or right offset to document bleed outside ¬ or right offset of document preferences of myDocument set facing pages to facing pages of document preferences of myDocument set page height to page height of document preferences of myDocument set page width to page width of document preferences of myDocument set page orientation to page orientation of document preferences ¬ of myDocument set pages per document to pages per document of document preferences ¬ of myDocument set slug bottom offset to slug bottom offset of document preferences ¬ of myDocument set slug top offset to slug top offset of document preferences of myDocument set slug inside or left offset to slug inside or left offset ¬ of document preferences of myDocument set slug right or outside offset to slug right or outside offset ¬ of document preferences of myDocument end tell end if end tell Création d’un paramètre prédéfini à partir de nouvelles valeurs Pour créer un paramètre prédéfini de document avec des valeurs particulières, exécutez le script suivant : --DocumentPreset.as --AppleScript InDesign CS2 --Crée un paramètre prédéfini de document. tell application "Adobe InDesign CS2" --Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. try set myDocumentPreset to document preset "myDocumentPreset" on error set myDocumentPreset to make document preset ¬ with properties {name:"myDocumentPreset"} end try --Compléter les propriétés du paramètre prédéfini de document. tell myDocumentPreset set page height to "9i" set page width to "7i" set left to "4p" set right to "6p" set top to "4p" set bottom to "9p" set column count to 1 set document bleed bottom offset to "3p" set document bleed top offset to "3p" set document bleed inside or left offset to "3p" set document bleed outside or right offset to "3p" set facing pages to true set page orientation to portrait set pages per document to 1 set slug bottom offset to "18p" set slug top offset to "3p" set slug inside or left offset to "3p" set slug right or outside offset to "3p" end tell end tell Utilisation d’un paramètre prédéfini Pour créer un document à l’aide d’un paramètre prédéfini de document, utilisez le paramètre document preset comme indiqué précédemment à la section « Création d’un nouveau document ». Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript Configuration des planches types Après avoir défini le format de page, le fond perdu et la ligne-bloc du document de base, configurez les planches types du document : --MasterSpread.as --AppleScript InDesign CS2 --Configurer la première planche type dans un nouveau document. tell application "Adobe InDesign CS2" set myDocument to make document --Configurer le document. tell document preferences of myDocument set page height to "11i" set page width to "8.5i" set facing pages to true set page orientation to portrait end tell --Définir le point d’origine de la règle sur la page d’origine. Ceci est très important ;---il est autrement plus difficile de placer --correctement les objets sur la page. set ruler origin of view preferences of myDocument to page origin tell master spread 1 of myDocument --Configurer la page gauche (verso). tell margin preferences of page 1 set column count to 3 set column gutter to "1p" set bottom to "6p" --« left » (gauche) signifie intérieure, « right » (droite) extérieure. set left to "6p" set right to "4p" set top to "4p" end tell --Ajouter un simple pied de page avec un numéro de section et un numéro de page. tell page 1 set myTextFrame to make text frame ¬ with properties {geometric bounds:{"61p", "4p", "62p", "45p"}} tell myTextFrame set contents of insertion point 1 to section marker set contents of insertion point 1 to Em space set contents of insertion point 1 to auto page number set justification of paragraph 1 to left align end tell end tell --Configurer la page droite (recto). tell margin preferences of page 2 set column count to 3 set column gutter to "1p" set bottom to "6p" --« left » (gauche) signifie intérieure, « right » (droite) extérieure. set left to "6p" set right to "4p" set top to "4p" end tell --Ajouter un simple pied de page avec un numéro de section et un numéro de page. tell page 2 set myTextFrame to make text frame ¬ with properties {geometric bounds:{"61p", "6p", "62p", "47p"}} tell myTextFrame set contents of insertion point 1 to auto page number set contents of insertion point 1 to Em space set contents of insertion point 1 to section marker set justification of paragraph 1 to right align end tell end tell end tell end tell Pour appliquer une planche type à une page de document, utilisez la propriété applied master de la page du document : --ApplyMaster.as --AppleScript InDesign CS2 89 90 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts --Applique une planche type à une page. --Suppose que le document actif utilise un gabarit nommé B-Master --et au moins trois pages. tell application "Adobe InDesign CS2" tell active document set applied master of page 2 to master spread "B-Master" end tell end tell Utilisez la même propriété pour appliquer une planche type à une page de planche type : --ApplyMasterToMaster.as --AppleScript InDesign CS2 --Applique une planche type à un gabarit. --Suppose que le document actif utilise une planche type nommée B-Master --différente de la première planche type du document. tell application "Adobe InDesign CS2" tell active document set applied master of page 2 of master spread 1 to master spread "B-Master" end tell end tell Définition des paramètres par défaut de mise en forme de texte Vous pouvez définir les attributs par défaut de mise en forme de texte pour votre application ou pour les documents individuels. Si vous définissez les paramètres par défaut de mise en forme de texte pour l’application, ceux-ci s’appliquent à tous les nouveaux documents ; les documents existants ne changent pas. Si vous définissez les paramètres par défaut de mise en forme de texte pour un document, ceux-ci s’appliquent à tout nouveau texte que vous insérez dans le document ; le texte existant ne change pas. Définition des paramètres de texte par défaut de l’application Pour définir les paramètres de mise en forme de texte par défaut pour votre application : --ApplicationTextDefaults.as --AppleScript InDesign CS2 --Détermine les paramètres de texte par défaut de l’application, qui s’appliquent à tous --les nouveaux documents. Les documents existants ne changent pas. Notez que toutes --ces propriétés pourraient être définies à l’aide d’une seule instruction "with properties", mais --elles sont présentées ici dans des instructions séparées par souci de clarté. tell application "Adobe InDesign CS2" set myBlackSwatch to color "Black" set myNoneSwatch to swatch "None" tell text defaults set align to baseline to true try set applied font to font "Minion Pro" end try try set font style to "Regular" end try try set applied language to "English: USA" end try set auto leading to 100 set balance ragged lines to false set baseline shift to 0 set capitalization to normal set composer to "Adobe Paragraph Composer" set desired glyph scaling to 100 set desired letter spacing to 0 set desired word spacing to 100 set drop cap characters to 0 if drop cap characters is not equal to 0 then set drop cap lines to 3 --Suppose que l’application utilise un style de caractère par défaut --nommé "myDropCap" Adobe InDesign CS2 Guide des scripts set drop cap style to character style "myDropCap" end if set fill color to myBlackSwatch set fill tint to 100 set first line indent to "14pt" set gradient fill angle to 0 set gradient fill length to 0 set grid align first line only to false set horizontal scale to 100 set hyphenation to true set hyphenate after first to 3 set hyphenate before last to 4 set hyphenate capitalized words to false set hyphenate ladder limit to 1 set hyphenate words longer than to 5 set hyphenation zone to "3p" set hyphen weight to 9 set justification to left align set keep all lines together to false set keep lines together to true set keep first lines to 2 set keep last lines to 2 set keep with next to 0 set kerning method to "Optical" set leading to 14 set left indent to 0 set ligatures to true set maximum glyph scaling to 100 set maximum letter spacing to 0 set maximum word spacing to 160 set minimum glyph scaling to 100 set minimum letter spacing to 0 set minimum word spacing to 80 set no break to false set OTF contextual alternate to true set OTF discretionary ligature to true set OTF figure style to proportional oldstyle set OTF fraction to true set OTF ordinal to false set OTF slashed zero to false set OTF swash to false set OTF titling to false set overprint fill to false set overprint stroke to false set point size to 11 set position to normal set right indent to 0 set rule above to false if rule above is true then set rule above color to myBlackSwatch set rule above gap color to myNoneSwatch set rule above gap overprint to false set rule above gap tint to 100 set rule above left indent to 0 set rule above line weight to 0,25 set rule above offset to 14 set rule above overprint to false set rule above right indent to 0 set rule above tint to 100 set rule above type to stroke style "Solid" set rule above width to column width end if set rule below to false if rule below is true then set rule below color to color myBlackSwatch set rule below gap color to myNoneSwatch set rule below gap overPrint to false set rule below gap tint to 100 set rule below left indent to 0 set rule below line weight to 0,25 set rule below offset to 14 set rule below overPrint to false set rule below right indent to 0 Utilisation de documents dans AppleScript 91 92 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set rule below tint to 100 set rule below type to stroke style "Solid" set rule below width to column width end if set single word justification to left align set skew to 0 set space after to 0 set space before to 0 set start paragraph to anywhere set strike thru to false if strike thru is true then set strike through color to color myBlackSwatch set strike through gap color to myNoneSwatch set strike through gap overprint to false set strike through gap tint to 100 set strike through offset to 3 set strike through overprint to false set strike through tint to 100 set strike through type to stroke style "Solid" set strike through weight to 0,25 end if set stroke color to myNoneSwatch set stroke tint to 100 set stroke weight to 0 set tracking to 0 set underline to false if underline is true then set underline color to color myBlackSwatch set underline gap color to myNoneSwatch set underline gap overprint to false set underline gap tint to 100 set underline offset to 3 set underline overprint to false set underline tint to 100 set underline type to stroke style "Solid" set underline weight to 0,25 end if set vertical scale to 100 end tell end tell Configuration des paramètres par défaut du document actif Pour définir les paramètres de texte par défaut pour le document actif, remplacez la ligne suivante dans l’exemple donné précédemment : tell text defaults par : tell text defaults of active document Utilisation des paramètres de texte par défaut Pour appliquer un style de caractère ou de paragraphe par défaut à du texte dans un document, utilisez le script suivant : --SetTextDefaultToStyle.as --AppleScript InDesign CS2 Définit le style de paragraphe par défaut pour le texte de tous les nouveaux documents. --Suppose l’existence d’un style de paragraphe par défaut nommé "BodyText" dans l’application. tell application "Adobe InDesign CS2" tell text defaults set applied paragraph style to paragraph style "BodyText" end tell end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 93 Ajout de métadonnées XMP Les métadonnées sont des informations qui permettent de décrire le contenu, l’origine ainsi que d’autres attributs d’un fichier. Dans l’interface utilisateur d’InDesign, vous pouvez saisir, modifier ou afficher des métadonnées grâce à la boîte de dialogue Informations (Fichier > Informations). Ces métadonnées comprennent l’auteur, l’état du copyright et les dates de création et de modification du document, ainsi que d’autres informations. Toutes ces données sont stockées au format XMP (Adobe Extensible Metadata Platform), une norme ouverte qui permet d’incorporer des métadonnées dans un document. Pour plus de détails sur le format XMP, consultez les spécifications XMP, à l’adresse suivante : http://partners.adobe.com/asn/developer/pdf/MetadataFramework.pdf. Vous pouvez également ajouter des informations XMP à un document en utilisant un script InDesign. Toutes les propriétés XMP d’un document se trouvent dans l’objet metadataPreferences (préférences des métadonnées) du document. L’exemple de script suivant permet de compléter les données XMP d’un document : Cet exemple montre également que les informations XMP sont extensibles. Si vous devez joindre des métadonnées à un document mais que celles-ci ne rentrent pas dans l’une des catégories de l’objet préférences des métadonnées, vous pouvez créer votre propre conteneur de métadonnées (un e-mail, dans cet exemple) : --MetadataExample.as --AppleScript InDesign CS2 --Crée un document exemple et y ajoute des métadonnées. tell application "Adobe InDesign CS2" set myDocument to make document tell metadata preferences of myDocument set author to "Olav Martin Kvern" set copyright info URL to "http://www.adobe.com" set copyright notice to "This document is copyrighted." set copyright status to yes set description to "Example of xmp metadata scripting in InDesign CS" set document title to "XMP Example" set job name to "XMP_Example_2004" set keywords to {"animal", "mineral", "vegetable"} --L’objet préférences des métadonnées comprend également les informations relatives à la lecture seule --au créateur, au format, aux dates de création et de modification, ainsi qu’aux propriétés serverURL, --entrées et conservées automatiquement par InDesign. --Créer un conteneur XMP personnalisé, "email" set myNewContainer to create container item ¬ namespace "http://ns.adobe.com/xap/1.0/" path "email" set property namespace "http://ns.adobe.com/xap/1.0/" ¬ path "email/*[1]" value "[email protected]" end tell end tell Création d’un modèle de document L’exemple suivant permet de créer un document, de déterminer les zones de fond perdu et de ligne-bloc, d’ajouter des informations aux métadonnées XMP du document, de configurer des gabarits, d’insérer des pieds de pages ainsi que des informations sur le travail dans un tableau à l’intérieur de la zone de lignebloc : --DocumentTemplate.as --AppleScript InDesign CS2 --Crée un modèle de document, comprenant des gabarits, des calques, une couleur, des styles de paragraphe et de caractère, des repères et des informations XMP. tell application "Adobe InDesign CS2" --Créer un document. set myDocument to make document tell myDocument tell document preferences set page width to "7i" set page height to "9i" 94 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set page orientation to portrait end tell tell margin preferences set top to ((14 * 4) & "pt") as string set left to ((14 * 4) & "pt") as string set bottom to "74pt" set right to ((14 * 5) & "pt") as string end tell --Configurer les zones de fond perdu et de ligne-bloc. tell document preferences --Fond perdu set document bleed bottom offset to "3p" set document bleed top offset to "3p" set document bleed inside or left offset to "3p" set document bleed outside or right offset to "3p" --Ligne-bloc set slug bottom offset to "18p" set slug top offset to "3p" set slug inside or left offset to "3p" set slug right or outside offset to "3p" end tell --Créer une couleur. try set myColor to color "PageNumberRed" on error set myColor to make color with properties {name:"PageNumberRed", ¬ model:process, color value:{20, 100, 80, 10}} end try --Indiquer ensuite des styles par défaut. --Créer un style de caractère pour les numéros de pages. try set myCharacterStyle to character style "page_number" on error set myCharacterStyle to make character style ¬ with properties {name:"page_number"} end try set fill color of myCharacterStyle to color "PageNumberRed" --Créer une paire de styles de paragraphe pour le texte de pied de page. --Ces styles appliquent une mise en page élémentaire. try set myParagraphStyle to paragraph style "footer_left" on error set myParagraphStyle to make paragraph style ¬ with properties {name:"footer_left"} end try --Créer une paire de styles de paragraphe pour le texte de pied de page. try set myParagraphStyle to paragraph style "footer_right" on error set myParagraphStyle to make paragraph style ¬ with properties {name:"footer_right", ¬ based on:paragraph style "footer_left", justification:right align} end try --Créer un calque pour les repères. try set myLayer to layer "GuideLayer" on error set myLayer to make layer with properties {name:"GuideLayer"} end try --Créer un calque pour les éléments de pied de page. try set myLayer to layer "Footer" on error set myLayer to make layer with properties {name:"Footer"} end try --Créer un calque pour les éléments de ligne-bloc. try set myLayer to layer "Slug" on error set myLayer to make layer with properties {name:"Slug"} end try --Créer un calque pour le corps de texte. Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript try set myLayer to layer "BodyText" on error set myLayer to make layer with properties {name:"BodyText"} end try tell view preferences set ruler origin to page origin set horizontal measurement units to points set vertical measurement units to points end tell --Grille de ligne de base du document et grille du document tell grid preferences set baseline start to 56 set baseline division to 14 set baseline grid shown to false set horizontal gridline division to 14 set horizontal grid subdivision to 5 set vertical gridline division to 14 set vertical grid subdivision to 5 set document grid shown to false end tell --Informations XMP du document. tell metadata preferences set author to "Olav Martin Kvern" set copyright info URL to "http:--www.adobe.com" set copyright notice to "This document is not copyrighted." set copyright status to no set description to "Example 7 x 9 book layout" set document title to "Example" set job name to "7 x 9 book layout template" set keywords to {"7 x 9", "book", "template"} set myNewContainer to create container item ¬ namespace "http://ns.adobe.com/xap/1.0/" path "email" set property namespace "http://ns.adobe.com/xap/1.0/" ¬ path "email/*[1]" value "[email protected]" end tell --Configurer la planche type. tell master spread 1 tell page 1 set myMarginPreferences to margin preferences set myBottomMargin to (page height of document preferences of myDocument ¬ - (bottom of myMarginPreferences) set myLeftMargin to right of myMarginPreferences set myRightMargin to (page width of document preferences of myDocument) ¬ - (left of myMarginPreferences) make guide with properties {orientation:vertical, location:myRightMargin, ¬ item layer:layer "GuideLayer" of myDocument} make guide with properties {orientation:vertical, location:myLeftMargin, ¬ item layer:layer "GuideLayer" of myDocument} make guide with properties {orientation:horizontal, ¬ location:top of myMarginPreferences, ¬ item layer:layer "GuideLayer" of myDocument, fit to page:false} make guide with properties {orientation:horizontal, ¬ location:myBottomMargin, ¬ item layer:layer "GuideLayer" of myDocument, fit to page:false} make guide with properties {orientation:horizontal, ¬ location:myBottomMargin + 14, ¬ item layer:layer "GuideLayer" of myDocument, fit to page:false} make guide with properties {orientation:horizontal, ¬ location:myBottomMargin + 28, ¬ item layer:layer "GuideLayer" of myDocument, fit to page:false} set myLeftFooter to make text frame with properties ¬ {item layer:layer "Footer" of myDocument, ¬ geometric bounds:{myBottomMargin + 14, right of myMarginPreferences, ¬ myBottomMargin + 28, myRightMargin}} set contents of insertion point 1 of parent story of myLeftFooter ¬ to section marker set contents of insertion point 1 of parent story of myLeftFooter ¬ to Em space set contents of insertion point 1 of parent story of myLeftFooter ¬ to auto page number set applied character style of character 1 of parent story of ¬ myLeftFooter to character style "page_number" of myDocument 95 96 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set applied paragraph style of paragraph 1 of parent story of ¬ myLeftFooter to paragraph style "footer_left" of myDocument --Informations sur la ligne-bloc. tell metadata preferences of myDocument set myEmail to get property ¬ namespace "http://ns.adobe.com/xap/1.0/" path "email/*[1]" set myDate to current date set myString to "Author:" & tab & author & tab & "Description:" ¬ & tab & description & return & "Creation Date:" & tab & myDate ¬ & tab & "Email Contact" & tab & myEmail end tell set myLeftSlug to make text frame with properties ¬ {item layer:layer "Slug" of myDocument, ¬ geometric bounds:{(page height of document preferences of myDocument) ¬ + 36, right of myMarginPreferences, ¬ (page height of document preferences of myDocument) + 144, ¬ myRightMargin}, contents:myString} tell parent story of myLeftSlug convert to table text 1 end tell --Bloc de texte type du corps de texte. set myLeftFrame to make text frame with properties ¬ {item layer:layer "BodyText" of myDocument, ¬ geometric bounds:{top of myMarginPreferences, ¬ right of myMarginPreferences, myBottomMargin, myRightMargin}} end tell tell page 2 set myMarginPreferences to margin preferences set myLeftMargin to left of myMarginPreferences set myRightMargin to (page width of document preferences of myDocument) ¬ - (right of myMarginPreferences) make guide with properties {orientation:vertical, location:myLeftMargin, ¬ item layer:layer "GuideLayer" of myDocument} make guide with properties {orientation:vertical, location:myRightMargin,¬ item layer:layer "GuideLayer" of myDocument} set myRightFooter to make text frame with properties ¬ {item layer:layer "Footer" of myDocument, ¬ geometric bounds:{myBottomMargin + 14, left of myMarginPreferences, ¬ myBottomMargin + 28, myRightMargin}} set contents of insertion point 1 of parent story of myRightFooter ¬ to auto page number set contents of insertion point 1 of parent story of myRightFooter ¬ to Em space set contents of insertion point 1 of parent story of myRightFooter ¬ to section marker set applied character style of character -1 of parent story of ¬ myRightFooter to character style "page_number" of myDocument set applied paragraph style of paragraph 1 of parent story of ¬ myRightFooter to paragraph style "footer_right" of myDocument --Informations sur la ligne-bloc. set myRightSlug to make text frame with properties ¬ {item layer:layer "Slug" of myDocument, ¬ geometric bounds:{(page height of document preferences of myDocument) ¬ + 36, left of myMarginPreferences, ¬ (page height of document preferences of myDocument) + 144, ¬ myRightMargin}, contents:myString} tell parent story of myRightSlug convert to table text 1 end tell --Bloc de texte type du corps de texte. set myRightFrame to make text frame with properties ¬ {item layer:layer "BodyText" of myDocument, ¬ geometric bounds:{top of myMarginPreferences, ¬ left of myMarginPreferences, myBottomMargin, myRightMargin}} end tell end tell --Insérer un texte de marque de section ; celui-ci apparaîtra dans le pied de page. set marker of section 1 of myDocument to "Section 1" --Lorsque vous liez les blocs de texte du gabarit, l’un d’entre eux --est parfois sélectionné. Désélectionnez-le. select nothing end tell end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 97 Impression d’un document Le script suivant permet d’imprimer le document actif à l’aide des préférences d’impression actuelles : --PrintDocument.as --AppleScript InDesign CS2 --Imprime le document actif à l’aide des paramètres d’impression actuels. tell application "Adobe InDesign CS2" print active document end tell Impression à l’aide de groupes de pages Pour spécifier un groupe de pages à imprimer, définissez la propriété page range de l’objet print preferences du document avant d’imprimer : --PrintPageRange.as --AppleScript InDesign CS2 --Imprime un groupe de pages à partir du document actif. --Le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages. --Un numéro de page dans le groupe de pages doit correspondre à un --nom de page dans le document (et non à l’indice de page, par exemple). Si le nom de page n’est --pas trouvé, InDesign affiche un message d’erreur. tell application "Adobe InDesign CS2" --Configurer un document exemple. set myDocument to make document tell myDocument set pages per document of document preferences to 10 set facing pages of document preferences to false set myPageHeight to page height of document preferences set myPageWidth to page width of document preferences --Créer une planche type d’une seule page. tell master spread 1 repeat while count pages > 1 delete page -1 end repeat tell page 1 set myTextFrame to make text frame with properties ¬ {geometric bounds:{0, 0, myPageHeight, myPageWidth}, ¬ contents:auto page number} end tell set vertical justification of text frame preferences of myTextFrame ¬ to center align set justification of paragraph 1 of myTextFrame to center align set point size of character 1 of myTextFrame to 72 end tell --Fin du document exemple. set page range of print preferences to "1-3, 10" print end tell end tell Configuration des préférences d’impression L’objet print preferences comprend des propriétés correspondant aux options des volets de la boîte de dialogue d’impression. Cet exemple de script indique comment définir les préférences d’impression à l’aide d’un script : --PrintPreferences.as --AppleScript InDesign CS2 --Définit les préférences d’impression du document actif. tell application "Adobe InDesign CS2" --Récupérer les valeurs du fond perdu du document et les augmenter. tell document preferences of active document set myX1Offset to document bleed inside or left offset + 3 set myY1Offset to document bleed top offset + 3 set myX2Offset to document bleed outside or right offset + 3 set myY2Offset to document bleed bottom offset + 3 98 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts end tell tell print preferences of active document --Propriétés correspondant aux commandes du volet Général --de la boîte de dialogue d’impression. --activePrinterPreset est ignoré dans cet exemple ; spécifiez vos --préférences d’impression. --L’imprimante peut être soit une chaîne (le nom de l’imprimante) soit --un fichier Postscript. set printer to postscript file --Voici un exemple de configuration d’imprimante pour une imprimante spécifique. --Configurer l’imprimante « AGFA-SelectSet 5000SF v2013.108 ». --Si la propriété de l’imprimante correspondent au nom d’une imprimante, alors la propriété ppd --est verrouillée (entraînant un message d’erreur si vous essayez de la configurer). try set PPD to "AGFA SelectSet 7000-X" end try --Si la propriété de l’imprimante indique un fichier Postscript, la propriété --la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. --set copies to 1 --Si la propriété de l’imprimante indique un fichier Printer.postscript, ou si --l’imprimante sélectionnée ne prend pas en charge l’assemblage, alors --la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. --set collating to false set reverse order to false --La configuration de la sortie en couleurs détermine les options disponibles --dans presque toutes les autres propriétés des préférences d’impression. try set color output to separations end try --pageRange peut avoir comme attribut PageRange.allPages ou une chaîne de groupe de pages. set page range to all pages set print spreads to false set print master pages to false --Si la propriété de l’imprimante indique un fichier PostScript, alors --la propriété du fichier d’impression comprend le chemin du fichier de sortie. --set printFile to "yukino:test.ps" set sequence to all --Si le recouvrement est activé, la configuration des propriétés suivantes entraînera une erreur : try if trapping is off then set print blank pages to false set print guides grids to false set print nonprinting to false end if end try ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Format de --la boîte de dialogue d’impression. -------------------------------------------------------------------------------set paper size to custom --La largeur et la hauteur de page sont ignorées si le format du papier n’est pas personnalisé. --set paper height to 1200 --set paper width to 1200 set print page orientation to portrait set page position to centered set paper gap to 0 set paper offset to 0 set paper transverse to false set scale height to 100 set scale width to 100 set scale mode to scale width height set scale proportional to true --Si le recouvrement est activé (intégré à l’application ou Adobe inRip), --une erreur se produira si vous essayez de configurer les propriétés suivantes : if trapping is off then set thumbnails to false --Les propriétés suivantes ne sont pas nécessaires car la valeur false est attribuée aux vignettes. Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 99 --set thumbnails per page to 4 set tile to false --Les propriétés suivantes ne sont pas nécessaires car la valeur false est attribuée à la mosaïque. --set tiling overlap to 12 --set tiling type to auto end if ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Repères et fonds perdus --de la boîte de dialogue d’impression. ---------------------------------------------------------------------------------Attribuer la valeur true aux propriétés suivantes pour imprimer tous les repères d’impression. --set all Printer Marks to true; set use document bleed to print to false --Si l’utilisation du fond perdu pour l’impression est activée, alors la configuration de l’une des -- propriétés de fond perdu --entraînera une erreur. set bleed bottom to myY2Offset set bleed top to myY1Offset set bleed inside to myX1Offset set bleed outside to myX2Offset --Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. if bleed bottom is equal to 0 and bleed top is equal to 0 and bleed inside ¬ is equal to 0 and bleed outside is equal to 0 then set bleed marks to true else set bleed marks to false end if set color bars to true set crop marks to true set include slug to print to false set mark line weight to p125pt set mark offset to 6 --set mark Type to default set page information marks to true set registration marks to true ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Sortie --de la boîte de dialogue d’impression. -------------------------------------------------------------------------------set negative to true set color output to separations --Remarquez le « i » minuscule dans « Builtin » set trapping to application builtin set screening to "175 lpi/2400 dpi" set flip to none --Si le recouvrement est activé, --une erreur se produira si vous essayez de configurer les propriétés suivantes. if trapping is off then set print black to true set print cyan to true set print magenta to true set print yellow to true end if --Ne modifiez que l’angle de projection de l’encre et la fréquence si vous souhaitez remplacer --le tramage par celui spécifié par la propriété de tramage. --set black angle to 45 --set black frequency to 175 --set cyan angle to 15 --set cyan frequency to 175 --set magenta angle to 75 --set magenta frequency to 175 --set yellow angle to 0 --set yellow frequency to 175 --Les propriétés suivantes ne sont pas nécessaires (car la sortie en couleurs --est définie sur séparations). --set composite angle to 45 --set composite frequency to 175 --désactiver la simulation de la surimpression (false) 100 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Graphiques --de la boîte de dialogue d’impression. -------------------------------------------------------------------------------set send image data to all image data set font downloading to complete try set download PPD fonts to true end try try set data format to binary end try try set PostScript level to level 3 end try ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Gestion des couleurs --de la boîte de dialogue d’impression. ---------------------------------------------------------------------------------Si la valeur false est attribuée aux propriétés d’utilisation de gestion des couleurs dans les options de couleur, --une erreur se produit si vous essayez de configurer les propriétés suivantes : try set source space to use document set intent to use color settings set CRD to use document set profile to PostScript CMS end try ---------------------------------------------------------------------------------Propriétés correspondant aux commandes du volet Avancé --de la boîte de dialogue d’impression. -------------------------------------------------------------------------------set OPI image replacement to false set omit bitmaps to false set omit EPS to false set omit PDF to false --L’instruction suivante suppose l’existence d’un aplatissement prédéfini --nommé "high quality flattener". try set flattener preset name to "high quality flattener" end try set ignore spread overrides to false end tell end tell Utilisation des impressions prédéfinies Pour imprimer un document à l’aide d’une impression prédéfinie, insérez celle-ci dans la commande print : --PrintDocumentWithPreset.as --AppleScript InDesign CS2 --Imprime le document actif à l’aide du paramètre prédéfini indiqué. tell application "Adobe InDesign CS2" --L’instruction suivante suppose l’existence d’une impression prédéfinie --nommée "myPrintPreset". print active document using "myPrintPreset" end tell Création d’impressions prédéfinies à partir des préférences d’impression Pour créer une impression prédéfinie à partir des préférences d’impression d’un document : --CreatePrinterPreset.js --AppleScript InDesign CS2 --Si le paramètre prédéfini n’existe pas, créez-le à partir. --des préférences d’impression de myDocument --sinon, renseignez les propriétés du paramètre prédéfini existant. tell application "Adobe InDesign CS2" try set myPreset to printer preset "myPreset" on error set myPreset to make printer preset with properties {name:"myPreset"} Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript end try set myDocument to active document tell myPreset --Le nombre de propriétés d’impression découlant d’autres propriétés d’impression, --chaque ligne relative à la configuration d’une propriété est encadrée des instructions try...end try, --de manière à faciliter l’appréhension de la configuration des impressions prédéfinies. try set printer to printer of print preferences of myDocument end try try set PPD to PPD of print preferences of myDocument end try try set copies to copies of print preferences of myDocument end try try set collating to collating of print preferences of myDocument end try try set reverse order to reverse order of print preferences of myDocument end try try set print spreads to print spreads of print preferences of myDocument end try try set print master pages to print master pages of ¬ print preferences of myDocument end try try set print file to printFile of print preferences of myDocument end try try set sequence to sequence of print preferences of myDocument end try try set print blank pages to print blank pages of print preferences of myDocument end try try set print guides grids to print guides grids of ¬ print preferences of myDocument end try try set print nonprinting to print nonprinting of print preferences of myDocument end try try set paper size to paper size of print preferences of myDocument end try try set paper height of myPreset to paper height of ¬ print preferences of myDocument end try try set paper width of myPreset to paper width of print preferences of myDocument end try try set print page orientation of myPreset to print page orientation of ¬ print preferences of myDocument end try try set page position of myPreset to page position of ¬ print preferences of myDocument end try try set paper gap of myPreset to paper gap of print preferences of myDocument end try try set paper offset of myPreset to paper offset of ¬ print preferences of myDocument end try try set paper transverse of myPreset to paper transverse of ¬ print preferences of myDocument 101 102 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts end try try set scale height of myPreset to scale height of ¬ print preferences of myDocument end try try set scale width of myPreset to scale width of print preferences of myDocument end try try set scale mode of myPreset to scale mode of print preferences of myDocument end try try set scale proportional of myPreset to scale proportional of ¬ print preferences of myDocument end try try set text as black of myPreset to text as black of ¬ print preferences of myDocument end try try set thumbnails of myPreset to thumbnails of print preferences of myDocument end try try set thumbnails per page of myPreset to thumbnails per page of ¬ print preferences of myDocument end try try set tile of myPreset to tile of print preferences of myDocument end try try set tiling type of myPreset to tiling type of print preferences of myDocument end try try set tiling overlap of myPreset to tiling overlap of ¬ print preferences of myDocument end try try set all printer marks of myPreset to all printer marks of ¬ print preferences of myDocument end try try set use document bleed to print of myPreset to use document bleed to ¬ print of print preferences of myDocument end try try set bleed bottom of myPreset to bleed bottom of ¬ print preferences of myDocument end try try set bleed top of myPreset to bleed top of print preferences of myDocument end try try set bleed inside of myPreset to bleed inside of ¬ print preferences of myDocument end try try set bleed outside of myPreset to bleed outside of ¬ print preferences of myDocument end try try set bleed marks of myPreset to bleed marks of print preferences of myDocument end try try set color bars of myPreset to color bars of print preferences of myDocument end try try set crop marks of myPreset to crop marks of print preferences of myDocument end try try set include slug to print of myPreset to include slug to print of ¬ print preferences of myDocument end try try Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript set mark line weight of myPreset to mark line weight of ¬ print preferences of myDocument end try try set mark offset of myPreset to mark offset of print preferences of myDocument end try try set mark type of myPreset to mark type of print preferences of myDocument end try try set page information marks of myPreset to page information marks of ¬ print preferences of myDocument end try try set registration marks of myPreset to registration marks of ¬ print preferences of myDocument end try try set negative of myPreset to negative of print preferences of myDocument end try try set color output of myPreset to color output of ¬ print preferences of myDocument end try try set trapping of myPreset to trapping of print preferences of myDocument end try try set screening of myPreset to screening of print preferences of myDocument end try try set flip of myPreset to flip of print preferences of myDocument end try try set print black of myPreset to print black of print preferences of myDocument end try try set print cyan of myPreset to print cyan of print preferences of myDocument end try try set print magenta of myPreset to print magenta of ¬ print preferences of myDocument end try try set print yellow of myPreset to print yellow of ¬ print preferences of myDocument end try try set black angle of myPreset to black angle of print preferences of myDocument end try try set black frequency of myPreset to black frequency of ¬ print preferences of myDocument end try try set cyan angle of myPreset to cyan angle of print preferences of myDocument end try try set cyan frequency of myPreset to cyan frequency of ¬ print preferences of myDocument end try try set magenta angle of myPreset to magenta angle of ¬ print preferences of myDocument end try try set magenta frequency of myPreset to magenta frequency of ¬ print preferences of myDocument end try try set yellow angle of myPreset to yellow angle of ¬ print preferences of myDocument end try 103 104 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts try set yellow frequency of myPreset to yellow frequency of ¬ print preferences of myDocument end try try set composite angle of myPreset to composite angle of ¬ print preferences of myDocument end try try set composite frequency of myPreset to composite frequency of ¬ print preferences of myDocument end try try set simulate overprint of myPreset to simulate overprint of ¬ print preferences of myDocument end try try set send image data of myPreset to send image data of ¬ print preferences of myDocument end try try set font downloading of myPreset to font downloading of ¬ print preferences of myDocument end try try set download PPD fonts of myPreset to download PPD fonts of ¬ print preferences of myDocument end try try set data format of myPreset to data format of print preferences of myDocument end try try set PostScript level of myPreset to PostScript level of ¬ print preferences of myDocument end try try set source space of myPreset to source space of ¬ print preferences of myDocument end try try set intent of myPreset to intent of print preferences of myDocument end try try set CRD of myPreset to CRD of print preferences of myDocument end try try set profile of myPreset to profile of print preferences of myDocument end try try set OPI image replacement of myPreset to OPI image replacement of ¬ print preferences of myDocument end try try set omit bitmaps of myPreset to omit bitmaps of ¬ print preferences of myDocument end try try set omit EPS of myPreset to omit EPS of print preferences of myDocument end try try set omit PDF of myPreset to omit PDF of print preferences of myDocument end try try set flattener preset name of myPreset to flattener preset name of ¬ print preferences of myDocument end try try set ignore spread overrides of myPreset to ignore spread overrides of ¬ print preferences of myDocument end try display dialog ("Done!") end tell end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 105 Exportation d’un document au format PDF Le script InDesign permet de gérer entièrement la création de fichiers PDF depuis vos documents de mise en page. Utilisation des options d’exportation PDF actuelles Le script suivant permet d’exporter le document actif au format PDF à l’aide d’un paramètre prédéfini d’exportation PDF : --ExportPDF.as --AppleScript InDesign CS2 --Suppose que vous disposez d’un document ouvert. --Les paramètres de commande d’exportation sont les suivants : --format de fichier (format as) - utilisez l’énumération du type pdf ou la chaîne Adobe PDF ; --chaîne de destination (to) - indiquez un chemin de fichier complet ; --options d’affichage booléennes - la valeur true permet l’affichage de --la boîte de dialogue d’exportation PDF. --Utiliser comme paramètre prédéfini d’exportation PDF (ou une chaîne correspondant au nom d’un paramètre prédéfini d’exportation PDF) tell application "Adobe InDesign CS2" tell active document export format PDF type to "yukino:test.pdf" using "myTestPreset" without ¬ showing options end tell end tell Configuration des options d’exportation PDF L’exemple suivant permet de configurer les options d’exportation PDF avant l’exportation : --ExportPDFWithOptions.as --AppleScript InDesign CS2 --Définit les préférences d’exportation PDF. tell application "Adobe InDesign CS2" --Extraire les valeurs du fond perdu du document. tell document preferences of active document set myX1Offset to document bleed inside or left offset set myY1Offset to document bleed top offset set myX2Offset to document bleed outside or right offset set myY2Offset to document bleed bottom offset end tell tell PDF export preferences --Options de sortie PDF standard. set page range to all pages set acrobat compatibility to acrobat 6 set export guides and grids to false set export layers to false set export nonprinting objects to false set export reader spreads to false set generate thumbnails to false try set ignore spread overrides to false end try set include bookmarks to true set include hyperlinks to true try set include ICC profiles to true end try set include slug with PDF to false set include structure to false set interactive elements to false --Attribuer la valeur zéro à l’option jeu partiel des polices au-dessous de désactive le jeu partiel des polices. --Attribuez une autre valeur pour utiliser le jeu partiel des polices. set subset fonts below to 0 --Options de qualité/échantillonnage/compression Bitmap. set color bitmap compression to zip 106 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts set color bitmap quality to eight bit set color bitmap sampling to none --Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs dans le présent exemple. --Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap couleurs lorsque celui-ci --n’est pas activé (none). set grayscale bitmap compression to zip set grayscale bitmap quality to eight bit set grayscale bitmap sampling to none --Il n’est pas nécessaire d’indiquer un seuil de compression des niveaux de gris dans cet exemple. --Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap en niveaux de gris lorsque celui-ci --n’est pas activé (none). set monochrome bitmap compression to zip set monochrome bitmap sampling to none --Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs monochromes dans le présent exemple. --Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap monochromes lorsque celui-ci --n’est pas activé (none). --Autres options de compression. set compression type to Compress None set compress text and line art to true set content to embed to Embed All set crop images to frames to true set optimize PDF to true --Options de prépresse et repères d’impression. set bleed bottom to myY2Offset set bleed top to myY1Offset set bleed inside to myX1Offset set bleed outside to myX2Offset --Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. if bleed bottom is 0 and bleed top is 0 and bleed inside is 0 and ¬ bleed outside is 0 then set bleed marks to true else set bleed marks to false end if set color bars to true ----La taille des carreaux en couleurs et en niveaux de gris n’est pas utilisée, --à moins que la méthode de compression choisie soit JPEG2000. --set color tile size to 256 --set Gray tile size to 256 set crop marks to true set omit bitmaps to false set omit EPS to false set omit PDF to false set page information marks to true set page marks offset to "12 pt" set PDF color space to unchanged color space set PDF mark type to default set printer mark weight to p125pt set registration marks to true --La simulation de la surimpression n’est disponible que lorsque la norme d’exportation --est PDF/X-1a ou PDF/X-3 --désactiver la simulation de la surimpression (false) set use document bleed with PDF to true --Attribuer à viewPDF la valeur true pour ouvrir le PDF dans Acrobat ou Adobe Reader. set view PDF to false end tell --Exportez maintenant le document. tell active document export format PDF type to "yukino:test.pdf" without showing options end tell end tell Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 107 Exportation d’un groupe de pages L’exemple suivant indique comment exporter un groupe de pages spécifique au format PDF : --ExportPageRangeAsPDF.js --AppleScript InDesign CS2 --Exporte un groupe de pages au format PDF. --Suppose que vous disposez d’un document ouvert, et qu’il comprend au minimum 12 pages. tell application "Adobe InDesign CS2" tell PDF export preferences --le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages --(comme vous l’indiqueriez dans les boîtes de dialogue d’impression ou d’exportation PDF). set page range to "1, 3-6, 7, 9-11, 12" end tell tell active document export format PDF type to "yukino:test.pdf" using ¬ PDF export preset "myTestPreset" without showing options end tell end tell Exportation de pages individuelles L’exemple suivant permet d’exporter chaque page d’un document en fichier PDF individuel : --ExportEachPageAsPDF.as --AppleScript InDesign CS2. --Exporte chaque page d’un document InDesign CS en tant que fichier PDF individuel dans un --dossier sélectionné, à l’aide des paramètres d’exportation PDF actuels. --Afficher une boîte de dialogue "choose folder". tell application "Adobe InDesign CS2" if (count documents) is not equal to 0 then my myChooseFolder() else display dialog "Please open a document and try again." end if end tell on myChooseFolder() set myFolder to choose folder with prompt "Choose a Folder" --Extraire le nom du dossier (il sera renvoyé sous forme de chaîne Unicode). set myFolder to myFolder as string --Méthode tierce pour remplacer le nom du dossier en Unicode par une chaîne de texte brut. set myFolder to «class ktxt» of (myFolder as record) if myFolder is not equal to "" then my myExportPages(myFolder) end if end myChooseFolder on myExportPages(myFolder) tell application "Adobe InDesign CS2" set myDocument to active document set myDocumentName to name of myDocument set myDialog to make dialog with properties {name:"File Naming Options"} tell myDialog tell (make dialog column) tell (make dialog row) make static text with properties {static label:"Base name:"} set myBaseNameField to make text editbox ¬ with properties {edit contents:myDocumentName, min width:160} end tell end tell end tell set myResult to show myDialog if myResult is true then --Le nom des fichiers exportés est composé du nom de base + la valeur --du compteur + « .pdf ». set myBaseName to edit contents of myBaseNameField --Supprimer la boîte de dialogue de la mémoire. destroy myDialog repeat with myCounter from 1 to (count pages in myDocument) set myPageName to name of page myCounter of myDocument set page range of PDF export preferences to name of page myCounter ¬ 108 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts of myDocument --Générer un chemin de fichier à partir du nom de dossier, du nom du document de base --et du nom de la page. --Remplacer toute occurrence du caractère deux-points dans le nom de la page (par exemple, « Sec1:1 ») de sorte --qu’il n’entraîne pas --de conflit de dénomination du fichier. set myPageName to my myReplace(myPageName, ":", "_") set myFilePath to myFolder & myBaseName & "_" & myPageName & ".pdf" tell myDocument --La commande d’exportation échouera si vous indiquez un chemin de fichier --en texte Unicode ; c’est pour cette raison que vous avez dû convertir le nom du dossier --en texte brut. export format PDF type to myFilePath end tell end repeat else destroy myDialog end if end tell end myExportPages on myReplace(myString, myFindString, myChangeString) set AppleScript’s text item delimiters to myFindString set myTextList to every text item of (myString as text) set AppleScript’s text item delimiters to myChangeString set myString to myTextList as string set AppleScript’s text item delimiters to "" return myString end myReplace Exportation de pages au format EPS Lorsque vous exportez un document au format EPS, InDesign enregistre chaque page du fichier en tant que graphique EPS individuel (par définition, un fichier EPS ne peut comprendre qu’une seule page). Si vous exportez plusieurs pages, InDesign ajoute l’indice de la page au nom de fichier. L’indice de la page dans le document n’est pas nécessairement le nom de la page (tel qu’il est défini par les options de section pour la section comprenant la page en question). Exportation de toutes les pages Le script suivant permet d’exporter les pages du document actif dans un ou plusieurs fichiers EPS : --ExportAsEPS.as --AppleScript InDesign CS2 --Exporte toutes les pages du document actif dans une série de fichiers EPS --(par définition, un fichier EPS ne peut comprendre qu’une seule page). tell application "Adobe InDesign CS2" set page range of EPS export preferences to all pages tell active document --Spécifiez le nom de votre fichier. Les fichiers seront nommés --« myFile_01.eps », « myFile_02.eps », etc. set myFileName to "yukino:myFile.eps" export format EPS type to myFileName without showing options end tell end tell Exportation d’un groupe de pages Pour contrôler les pages à exporter en EPS, attribuez à la propriété page range des préférences d’exportation EPS une chaîne de groupe de pages comprenant les pages que vous souhaitez exporter avant l’exportation : --ExportPageRangeAsEPS.as --AppleScript InDesign CS2 --Exporte un groupe de pages au format EPS. Adobe InDesign CS2 Guide des scripts Utilisation de documents dans AppleScript 109 --Suppose que vous disposez d’un document ouvert, et que celui-ci --comprend au minimum 12 pages. tell application "Adobe InDesign CS2" tell EPS export preferences --le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages --(comme vous l’indiqueriez dans les boîtes de dialogue d’impression ou d’exportation EPS). set page range to "1, 3-6, 7, 9-11, 12" end tell tell active document export format EPS type to "yukino:test.eps" without showing options end tell end tell Exportation avec dénomination de fichier L’exemple suivant permet d’exporter chaque page au format EPS, mais offre un contrôle accru de la dénomination de fichier, comparé à l’exemple précédent : --ExportEachPageAsEPS.as --AppleScript InDesign CS2 --Exporte chaque page d’un document en EPS vers un dossier spécifique. --Afficher une boîte de dialogue "choose folder". tell application "Adobe InDesign CS2" if (count documents) is not equal to 0 then my myChooseFolder() else display dialog "Please open a document and try again." end if end tell on myChooseFolder() set myFolder to choose folder with prompt "Choose a Folder" --Extraire le nom du dossier (il sera renvoyé sous forme de chaîne Unicode). set myFolder to myFolder as string --Méthode tierce pour remplacer le nom du dossier en Unicode par une chaîne de texte brut. set myFolder to «class ktxt» of (myFolder as record) if myFolder is not equal to "" then my myExportPages(myFolder) end if end myChooseFolder on myExportPages(myFolder) tell application "Adobe InDesign CS2" set myDocument to active document set myDocumentName to name of myDocument set myDialog to make dialog with properties {name:"ExportPages"} tell myDialog tell (make dialog column) tell (make dialog row) make static text with properties {static label:"Base Name:"} set myBaseNameField to make text editbox ¬ with properties {edit contents:myDocumentName, min width:160} end tell end tell end tell set myResult to show myDialog if myResult is true then --Le nom des fichiers exportés est composé du nom de base + la --valeur du compteur + « .pdf ». set myBaseName to edit contents of myBaseNameField --Supprimer la boîte de dialogue de la mémoire. destroy myDialog repeat with myCounter from 1 to (count pages in myDocument) --Extraire le nom de la page et l’attribuer à la variable "myPageName" set myPageName to name of page myCounter of myDocument --Attribuer au groupe de pages le nom de la page donnée. set page range of EPS export preferences to myPageName --Générer un chemin de fichier à partir du nom de dossier, du nom du document de base --et du nom de la page. --Remplacer toute occurrence du caractère deux-points dans le nom de la page (par exemple, « Sec1:1 ») de sorte --qu’il n’entraîne pas 110 Utilisation de documents dans AppleScript Adobe InDesign CS2 Guide des scripts --de conflit de dénomination du fichier. set myPageName to my myReplace(myPageName, ":", "_") set myFilePath to myFolder & myBaseName & "_" & myPageName & ".eps" tell myDocument export format EPS type to myFilePath without showing options end tell end repeat else destroy myDialog end if end tell end myExportPages on myReplace(myString, myFindString, myChangeString) set AppleScript’s text item delimiters to myFindString set myTextList to every text item of (myString as text) set AppleScript’s text item delimiters to myChangeString set myString to myTextList as string set AppleScript’s text item delimiters to "" return myString end myReplace Adobe InDesign CS2 Guide des scripts 6 Utilisation de documents dans JavaScript Utilisation de documents dans JavaScript La plupart des tâches que vous effectuez dans InDesign concernent des documents : création, enregistrement, insertion d’éléments de page, de couleurs, de styles et de textes. Les documents sont également nécessaires au script InDesign, et presque chaque tâche associée à un document peut être automatisée par le biais d’un script. Dans ce chapitre, vous apprendrez à : Effectuer les tâches élémentaires de gestion de documents, parmi lesquelles Créer un document Ouvrir un document Fermer un document Enregistrer un document Effectuer les tâches élémentaires de mise en page, notamment : Définir le format de page et la longueur du document Définir le fond perdu et la ligne-bloc Déterminer les colonnes et les marges Changer l’aspect de la table de montage Utiliser les repères et les grilles Changer les unités de mesure et le point d’origine de la règle Déterminer et appliquer les paramètres prédéfinis de document Définir les pages types (les doubles pages types) Définir les paramètres de mise en forme de texte par défaut Ajouter des métadonnées XMP (informations sur un fichier) Créer un modèle de document Imprimer un document Exporter un document au format PDF Exporter des pages d’un document au format EPS Remarque : si ce n’est déjà fait, consultez le chapitre 3, « Initiation aux scripts InDesign » et apprenez à créer un script avant de continuer. 111 112 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts Notions de base de la gestion de documents Dans la plupart des situations, votre script doit soit ouvrir soit créer un document, l’enregistrer, puis le fermer. Création d’un document Si vous n’avez pas de document existant, vous devez en créer un. Pour créer un document : //MakeDocument.jsx //JavaScript InDesign CS2 //Crée un document. var myDocument = app.documents.add(); La méthode document.add peut s’agrémenter de deux paramètres facultatifs, comme l’indique le script suivant : //MakeDocumentWithParameters.jsx //JavaScript InDesign CS2 //Indique comment utiliser les paramètres de la méthode d’ouverture de document. //Le premier paramètre (showingWindow) permet de contrôler la visibilité du //document. Les documents masqués ne sont pas réduits, et ne s’affichent que lorsque //vous ajoutez une nouvelle fenêre au document. Le second paramètre (documentPreset) //précise quel paramètre prédéfini de document utiliser. L’instruction suivante suppose //l’existence sur votre système d’un paramètre prédéfini de document nommé "Flyer". var myDocument = app.documents.add(true, app.documentPresets.item("Flyer")); Ouverture d’un document L’exemple de script ci-dessous indique comment ouvrir un document existant : //OpenDocument.jsx //JavaScript InDesign CS2 //Ouvre un document existant. Spécifiez le chemin de votre fichier. app.open(File("/c/myTestDocument.indd")); Définissez le paramètre showingWindow sur false (la valeur par défaut est true) dans la méthode Open pour ne pas afficher le document (le masquer). Ceci peut vous permettre d’améliorer les performances d’un script. Pour afficher un document masqué, créez une fenêtre, comme indiqué dans le script suivant : //OpenDocumentInBackground.jsx //JavaScript InDesign CS2 //Ouvre un document existant en arrière-plan, puis affiche ce document. //Spécifiez le chemin de votre fichier. var myDocument = app.open(File("/c/myTestDocument.indd"), false); //A ce stade, vous pouvez travailler sur le document sans afficher la //fenêtre du document. Dans certains cas, les scripts s’exécutent plus vite si la fenêtre du document //n’est pas visible. //Lorsque vous souhaitez afficher le document masqué, créez une fenêtre. var myLayoutWindow = myDocument.windows.add(); Fermeture d’un document La méthode Close permet de fermer un document : //CloseDocument.jsx //JavaScript InDesign CS2 //Ferme le document actif. app.activeDocument.close(); //Notez que vous pouvez également utiliser : //app.documents.item(0).close(); Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript La méthode Close peut accepter deux paramètres facultatifs : //CloseWithParameters.jsx //JavaScript InDesign CS2 //Utiliser SaveOptions.yes pour enregistrer le document, SaveOptions.no pour fermer le //document sans l’enregistrer ou SaveOptions.ask pour afficher une invite. Si vous utilisez //SaveOptions.yes, vous devrez faire référence à un fichier vers lequel //enregistrer dans le second paramètre (SavingIn). //Notez que le chemin de fichier est fourni à l’aide du formulaire JavaScript URI //plutôt que du formulaire spécifique à la plate-forme. // //Si le fichier n’a pas été enregistré, affichez une invite. if(app.activeDocument.saved != true){ app.activeDocument.close(SaveOptions.ask); //Ou, pour enregistrer sous un nom de fichier particulier, entrez : //var myFile = File("/c/myTestDocument.indd"); //app.activeDocument.close(SaveOptions.yes, myFile); } else{ //Si le fichier a déjà été enregistré, enregistrez-le. app.activeDocument.close(SaveOptions.yes); } Cet exemple ferme tous les documents ouverts sans les enregistrer : //CloseAll.jsx //JavaScript InDesign CS2 //Ferme tous les documents ouverts sans les enregistrer. for(myCounter = app.documents.length; myCounter > 0; myCounter--){ app.documents.item(myCounter-1).close(SaveOptions.no); } Enregistrement d’un document Dans l’interface utilisateur d’InDesign, la commande Enregistrer du menu Fichier permet d’enregistrer un fichier, l’option Enregistrer sous permet d’enregistrer un fichier sous un nom différent. Dans le script InDesign, la méthode save permet d’effectuer les deux opérations : //SaveDocument.jsx //JavaScript InDesign CS2 //Si le document actif a subi des modifications depuis le dernier enregistrement, enregistrezle. if(app.activeDocument.modified == true){ app.activeDocument.save(); } La méthode saver propose deux options : la première (to) détermine le fichier vers lequel le fichier actuel doit être enregistré ; la seconde (stationery) peut être définie sur true pour enregistrer le document en tant que modèle : //SaveDocumentAs.jsx //JavaScript InDesign CS2 //Si le document actif n’a pas encore été enregistré (s’il s’agit du premier enregistrement), enregistrez-le. if(app.activeDocument.saved == false){ //Si vous n’attribuez pas de nom de fichier, InDesign affichera la boîte de dialogue Enregistrer. app.activeDocument.save(new File("/c/myTestDocument.indd")); } L’exemple suivant permet d’enregistrer un document en tant que modèle : //SaveAsTemplate.jsx //JavaScript InDesign CS2 //Enregistrer le document actif en tant que modèle. var myFileName; if(app.activeDocument.saved == true){ //Convertir le nom de fichier en une chaîne de caractères. myFileName = app.activeDocument.fullName + ""; 113 114 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts //Si le nom du fichier comprend l’extension « .indd », remplacez-la par « .indt ». if(myFileName.indexOf(".indd")!=-1){ var myRegularExpression = /.indd/gi myFileName = myFileName.replace(myRegularExpression, ".indt"); } } //Si le document n’a pas été enregistré, indiquez un nom/chemin par défaut. else{ myFileName = "/c/myTestDocument.indt"; } app.activeDocument.save(File(myFileName), true); Notions de base de la mise en page Chaque document comprend un format de page, un nombre de pages attribué, des zones de fond perdu et de ligne-bloc, des colonnes et des marges qui définissent la zone de placement des éléments. Définition du format de page et de la longueur du document Lorsque vous créez un document dans l’interface utilisateur d’InDesign, vous pouvez spécifier le format et l’orientation de la page, le nombre de pages et l’utilisation éventuelle de pages en vis-à-vis. Pour créer un document à l’aide d’un script InDesign, vous utilisez la méthode documents.add, qui ne permet pas de définir ces paramètres. Une fois le document créé, vous pouvez contrôler ces paramètres grâce à l’objet documentPreferences : //DocumentPreferences.jsx //JavaScript InDesign CS2 //Utiliser l’objet préférences du document pour modifier les //dimensions et l’orientation du document. var myDocument = app.documents.add(); with(myDocument.documentPreferences){ pageHeight = "800pt"; pageWidth = "600pt"; pageOrientation = PageOrientation.landscape; pagesPerDocument = 16; } Remarque : l’objet application contient également un objet document preference. Vous pouvez déterminer les valeurs par défaut de l’application pour la hauteur et la largeur de page, ainsi que d’autres propriétés en modifiant les propriétés de cet objet. Définition du fond perdu et de la ligne-bloc Dans InDesign, le fond perdu et la ligne-bloc sont des zones en-dehors des marges qui peuvent être imprimées ou comprises dans un document PDF exporté. De manière générale, ces zones sont utilisées pour les objets qui s’étendent au-delà des bords de page (fond perdu) et des informations sur le document/travail (ligne-bloc). Les deux zones peuvent être imprimées et exportées indépendamment l’une de l’autre. Par exemple, vous pouvez choisir d’ignorer les informations sur la ligne-bloc pour l’impression finale d’un document. Le script suivant détermine le fond perdu et la ligne-bloc pour un nouveau document : //BleedAndSlug.jsx //JavaScript InDesign CS2 //Créer un document. myDocument = app.documents.add(); //Les propriétés de fond perdu et de ligne-bloc appartiennent à l’objet documentPreferences. with(myDocument.documentPreferences){ //Fond perdu documentBleedBottomOffset = "3p"; documentBleedTopOffset = "3p"; documentBleedInsideOrLeftOffset = "3p"; documentBleedOutsideOrRightOffset = "3p"; Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 115 //Ligne-bloc slugBottomOffset = "18p"; slugTopOffset = "3p"; slugInsideOrLeftOffset = "3p"; slugRightOrOutsideOffset = "3p"; } Si toutes les valeurs du fond perdu sont égales, comme dans l’exemple précédent, vous pouvez également utiliser la propriété documentBleedUniformSize : //UniformBleed.jsx //JavaScript InDesign CS2 //Créer un document. myDocument = app.documents.add(); //Les propriétés de fond perdu appartiennent à l’objet documentPreferences. with(myDocument.documentPreferences){ //Fond perdu documentBleedUniformSize = true; documentBleedTopOffset = "3p"; } Si toutes les valeurs de la ligne-bloc sont égales, vous pouvez utiliser la propriété DocumentSlugUnifor mSize : //UniformSlug.jsx //JavaScript InDesign CS2 //Créer un document. myDocument = app.documents.add(); //La propriété de ligne-bloc appartient à l’objet documentPreferences. with(myDocument.documentPreferences){ //Ligne-bloc : documentSlugUniformSize = true; slugTopOffset = "3p"; } Vous pouvez non seulement déterminer la largeur et la hauteur des zones de fond perdu et de ligne-bloc, mais également la couleur des repères délimitant ces zones. Cette propriété ne se trouve pas dans l’objet document preferences, mais dans l’objet pasteboardPreferences : //BleedSlugGuideColors.jsx //JavaScript InDesign CS2 //Configurer les couleurs pour afficher les repères de fond perdu et de ligne-bloc. with(app.activeDocument.pasteboardPreferences){ //Tous les repères InDesign peuvent utiliser les constantes de couleurs UI... bleedGuideColor = UIColors.cuteTeal; slugGuideColor = UIColors.charcoal; //...ou un ensemble de valeurs RVB (de 0 à 255) //bleedGuideColor = [0, 198, 192]; //slugGuideColor = [192, 192, 192]; } Configuration des marges et des colonnes Dans un document, chaque page peut être configurée différemment en termes de marges et de colonnes. Avec le script InDesign, ces propriétés font partie de l’objet marginPreferences pour chaque page. A titre d’exemple, ce script crée un document, puis définit les marges et les colonnes pour toutes les pages de la planche type : //MarginsAndColumns.jsx //JavaScript InDesign CS2 //Définit les marges et les colonnes de la première page du document exemple. myDocument = app.documents.add(); with (myDocument.pages.item(0).marginPreferences){ columnCount = 3; //columnGutter peut être soit un nombre, soit des mesures. columnGutter = "1p"; bottom = "6p" //Lorsque document.documentPreference s.facingPages == true, //« left » (gauche) signifie intérieur, « right » (droite) extérieur. 116 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts left = "6p" right = "4p" top = "4p" } InDesign vous permet de ne pas créer de page qui soit plus petite que la somme de ses marges. La largeur de la page doit être supérieure à la somme des marges gauche et droite, et la hauteur de page doit être supérieure à la somme des marges de haut et de bas de page. Si vous créez des pages très petites (pour un encart presse par exemple) dans l’interface utilisateur InDesign, entrez de nouvelles valeurs dans la zone de texte Marges de la boîte de dialogue Nouveau document pour définir des marges correctes lors de la création du document. Toutefois, la solution est moins évidente avec un script. Lorsque vous créez un document, le script utilise les préférences de marge par défaut de l’application. Ces marges sont appliquées à toutes les pages du document, y compris aux gabarits. Les préférences de marges du document, une fois définies, ne s’appliquent qu’aux nouvelles pages et n’ont pas d’incidence sur les pages existantes. Si vous essayez de définir la hauteur et la largeur de page avec des valeurs inférieures à la somme des marges correspondantes sur l’une des pages existantes, InDesign ne modifie pas le format de page. Deux solutions s’offrent à vous. La première consiste à définir les marges des pages existantes avant de modifier le format de page : //PageMargins.jsx //JavaScript InDesign CS2 //Crée un document et détermine ses marges. var myDocument = app.documents.add(); myDocument.marginPreferences.top = 0; myDocument.marginPreferences.left = 0; myDocument.marginPreferences.bottom = 0; myDocument.marginPreferences.right = 0; //L’instruction suivante suppose que votre document par défaut comprend une seule page. myDocument.pages.item(0).marginPreferences.top = 0; myDocument.pages.item(0).marginPreferences.left = 0; myDocument.pages.item(0).marginPreferences.bottom = 0; myDocument.pages.item(0).marginPreferences.right = 0; //L’instruction suivante suppose que votre planche type par défaut comprend deux pages. myDocument.masterSpreads.item(0).pages.item(0).marginPreferences.top = 0; myDocument.masterSpreads.item(0).pages.item(0).marginPreferences.left = 0; myDocument.masterSpreads.item(0).pages.item(0).marginPreferences.bottom = 0; myDocument.masterSpreads.item(0).pages.item(0).marginPreferences.right = 0; myDocument.masterSpreads.item(0).pages.item(1).marginPreferences.top = 0; myDocument.masterSpreads.item(0).pages.item(1).marginPreferences.left = 0; myDocument.masterSpreads.item(0).pages.item(1).marginPreferences.bottom = 0; myDocument.masterSpreads.item(0).pages.item(1).marginPreferences.right = 0; myDocument.documentPreferences.pageHeight = "1p"; myDocument.documentPreferences.pageWidth = "6p"; Vous pouvez également modifier les préférences de marges par défaut de l’application avant de créer le document : //ApplicationPageMargins.jsx //JavaScript InDesign CS2 //Définit les marges de pages par défaut de l’application. Ces paramètres s’appliquent à //tous les nouveaux documents ; les documents existants restent intacts. with (app.marginPreferences){ //Enregistrer les préférences de marges par défaut actuelles de l’application. var myY1 = top; var myX1 = left; var myY2 = bottom; var myX2 = right; //Définir les préférences de marges par défaut de l’application. top = 0; left = 0; bottom = 0; right = 0; } //Créer un document exemple pour mettre en évidence les modifications. var myDocument = app.documents.add(); myDocument.documentPreferences.pageHeight = "1p"; myDocument.documentPreferences.pageWidth = "6p"; Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 117 //Rétablir les préférences de marges par défaut de l’application à leur état antérieur. with (app.marginPreferences){ top = myY1; left = myX1 ; bottom = myY2; right = myX2; } Modification de l’aspect de la table de montage La table de montage est une zone qui encadre les pages InDesign. Vous pouvez y stocker temporairement des éléments de la page. Il est possible de modifier la taille et la couleur de la table de montage à l’aide d’un script. La propriété pasteboardColor permet d’en contrôler la couleur en mode Normal ; la propriété de previewBackgroundColor définit la couleur de la table de montage en mode Aperçu : //PasteboardPreferences.jsx //JavaScript InDesign CS2 //Créer un document et modifier la taille de la table de montage. myDocument = app.documents.add(); with(myDocument.pasteboardPreferences){ //Vous pouvez utiliser soit un nombre, soit des mesures //pour définir l’espace au-dessus/en dessous. minimumSpaceAboveAndBelow = "12p"; //Il est possible d’attribuer à la table de montage l’une des //constantes de couleurs UI prédéfinies... pasteboardColor = UIColors.white; previewBackgroundColor = UIColors.gray; //...ou un ensemble de valeurs RVB //(de 0 à 255) //pasteboardColor = [0, 0, 0]; //previewBackgroundColor = [192, 192, 192]; } Utilisation des repères et des grilles Les repères et les grilles facilitent le positionnement des objets sur les pages de votre document. Définition des repères InDesign propose des repères pour vous aider à positionner les objets sur les pages de votre document. Exemple d’utilisation des repères : //Guides.jsx //JavaScript InDesign CS2 //Créer un document, insérer des repères et définir les propriétés des repères. var myDocument = app.documents.add(); var myPageWidth = myDocument.documentPreferences.pageWidth; var myPageHeight = myDocument.documentPreferences.pageHeight; with(myDocument.pages.item(0)){ //Placer des repères sur les marges de la page. guides.add(undefined, {orientation:HorizontalOrVertical.vertical, location:marginPreferences. left}); guides.add(undefined, {orientation:HorizontalOrVertical.vertical, location:(myPageWidth marginPreferences.right)}); guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location: marginPreferences.top}); guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location:(myPageHeight marginPreferences.bottom)}); //Placer un repère vertical au centre de la page. guides.add(undefined, {orientation:HorizontalOrVertical.vertical, location:(myPageWidth/2)}); //Placer un repère horizontal au centre de la page. guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location:(myPageHeight/2)} ); } 118 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts Les repères horizontaux peuvent se limiter à une page donnée, ou s’étendre sur toutes les pages d’une planche. A l’aide d’un script InDesign, vous pouvez contrôler cette possibilité grâce à la propriété fitToPage. (les repères verticaux ignorent cette propriété). //SpreadAndPageGuides.jsx //JavaScript InDesign CS2 //Mettre en évidence la différence entre les repères de planche et les repères de page. var myDocument = app.documents.add(); myDocument.documentPreferences.facingPages = true; myDocument.documentPreferences.pagesPerDocument = 3; with(myDocument.spreads.item(1)){ //Notez la différence entre ces deux repères sur les pages 2 et 3. guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location:"6p", fitToPage: true}); guides.add(undefined, {orientation:HorizontalOrVertical.horizontal, location:"9p", fitToPage: false}); } Vous pouvez utiliser un script pour modifier le calque, la couleur et la visibilité des repères, tout comme vous pouvez le faire à partir de l’interface utilisateur : //GuideOptions.jsx //JavaScript InDesign CS2 //Indique comment définir les options de repères. var myGuide; var myDocument = app.documents.add(); //Créer un calque nommé "guide layer". var myLayer = myDocument.layers.add({name:"guide layer"}); //Ajouter une série de repères à la page 1. with(myDocument.pages.item(0)){ //Créer un repère sur le calque créé précédemment myGuide = guides.add(myLayer, {orientation:HorizontalOrVertical.horizontal, location:"12p"}); //Méthode alternative pour créer un repère sur un calque spécifique. myGuide = guides.add(undefined, {itemLayer:myLayer, orientation:HorizontalOrVertical. horizontal, location:"14p"}); //Créer un repère verrouillé. myGuide = guides.add(myLayer,{locked:true, orientation:HorizontalOrVertical.horizontal, location:"16p"}); //Définir le seuil d’affichage d’un repère. myGuide = guides.add(myLayer,{viewThreshold:100, orientation:HorizontalOrVertical.horizontal, location:"18p"}); //Déterminer la couleur d’un repère à l’aide d’une constante UIColors. myGuide = guides.add(myLayer,{guideColor:UIColors.gray, orientation:HorizontalOrVertical. horizontal, location:"20p"}); //Déterminer la couleur d’un repère à l’aide d’un ensemble de valeurs RVB. myGuide = guides.add(myLayer,{guideColor:[192, 192, 192], orientation:HorizontalOrVertical. horizontal, location:"22p"}); } Il est également possible de créer des repères à l’aide de la méthode createGuides des planches et des planches types : //CreateGuides.jsx //JavaScript InDesign CS2 //Ajouter une série de repères à l’aide de la méthode de création de repères. var myDocument = app.documents.add(); with (myDocument.spreads.item(0)){ //Paramètres (tous facultatifs) : row count, column count, row gutter (compte de ligne, compte de colonne, gouttière de ligne), //column gutter,guide color, fit margins, remove existing, layer (gouttière de colonne, couleur de repère, marges ajustées, suppression, calque). //Notez que cette méthode de création de repères n’accepte pas de valeurs RVB //pour le paramètre de couleur de repère. createGuides(4, 4, "1p", "1p", UIColors.gray, true, true, myDocument.layers.item(0)); } Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript Configuration des préférences de grille Pour contrôler les propriétés du document et de la grille de ligne de base, définissez les propriétés de l’objet gridPreferences comme dans le script ci-dessous : //DocumentAndBaselineGrids.jsx //JavaScript InDesign CS2 //Crée un document, puis définit les préférences de la //grille de document et de la grille de ligne de base. var myDocument = app.documents.add(); //Définir les unités de mesure du document en points. myDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points; myDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points; //Configurer les préférences de grille. with(myDocument.gridPreferences){ baselineStart = 56; baselineDivision = 14; baselineShown = true; horizontalGridlineDivision = 14; horizontalGridSubdivision = 5 verticalGridlineDivision = 14; verticalGridSubdivision = 5 documentGridShown = true; } Magnétisme des repères et des grilles La totalité des paramètres de magnétisme des grilles et des repères d’un document se trouve dans les propriétés des objets guidePreferences et gridPreferences. Voici un exemple : //GuideAndGridPreferences.jsx //JavaScript InDesign CS2 //Définit les préférences des repères et des grilles //Suppose que vous disposez d’un document ouvert. var myDocument = app.activeDocument; with(myDocument.guidePreferences){ guidesInBack = true; guidesLocked = false; guidesShown = true; guidesSnapTo = true; } with(myDocument.gridPreferences){ documentGridShown = false; documentGridSnapTo = true; //Magnétisme de la grille de ligne de base actif pour les objets lorsque //guidePreferences.guideSnapTo est défini sur true. baselineGridShown = true; } Modification des unités de mesure et de la règle Les exemples de scripts donnés jusqu’à présent faisaient appel à des chaînes de mesures, c’est à dire des chaînes forçant InDesign à utiliser une unité de mesure spécifique, « 8,5 p » par exemple, pour 8,5 pouces. Vous pourriez en effet utiliser un système de mesure différent lors de l’exécution du script. Pour déterminer le système de mesures d’un script, utilisez l’objet viewPreferences : //ViewPreferences.jsx //JavaScript InDesign CS2 //Modifie les unités de mesure du document actif. //Suppose que vous disposez d’un document ouvert. var myDocument = app.activeDocument; with(myDocument.viewPreferences){ //Les différentes unités de mesure possibles sont les suivantes : //* MeasurementUnits.picas //* MeasurementUnits.points //* MeasurementUnits.inches 119 120 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts //* MeasurementUnits.inchesDecimal //* MeasurementUnits.millimeters //* MeasurementUnits.centimeters //* MeasurementUnits.ciceros // //Définir les unités de mesure verticales et horizontales en points. horizontalMeasurementUnits = MeasurementUnits.points; verticalMeasurementUnits = MeasurementUnits.points; } Si vous écrivez un script qui requiert un système de mesure particulier, vous pouvez modifier les unités de mesure au début du script, puis rétablir celles d’origine à la fin de celui-ci, comme dans l’exemple cidessous : //ResetMeasurementUnits.jsx //JavaScript InDesign CS2 //Modifie, puis rétablit les unités de mesure du document actif. //Suppose que vous disposez d’un document ouvert. var myDocument = app.activeDocument with (myDocument.viewPreferences){ var myOldXUnits = horizontalMeasurementUnits; var myOldYUnits = verticalMeasurementUnits; horizontalMeasurementUnits = MeasurementUnits.points; verticalMeasurementUnits = MeasurementUnits.points; } //A ce stade, vous pouvez exécuter une série quelconque d’actions de script dépendant des //unités de mesure que vous avez définies. A la fin du //script, rétablissez les unités de mesure à leur état d’origine. with (myDocument.viewPreferences){ try{ horizontalMeasurementUnits = myOldXUnits; verticalMeasurementUnits = myOldYUnits; } catch(myError){ alert("Could not reset custom measurement units."); } } Définition et application des paramètres prédéfinis de document Les paramètres prédéfinis de documents InDesign vous permettent de stocker et d’appliquer des paramètres de configuration de document que vous utilisez souvent (format de page, marges, colonnes, et zones de fond perdu et de ligne-bloc). Lorsque vous créez un document, vous pouvez baser celui-ci sur un paramètre prédéfini de document. Création d’un paramètre prédéfini par copie de valeurs Pour créer un paramètre prédéfini de document à partir des paramètres d’un document existant, ouvrez le document dont vous souhaitez copier les propriétés de configuration pour votre paramètre prédéfini, puis exécutez le script suivant : //DocumentPresetByExample.jsx //JavaScript InDesign CS2 //Crée un paramètre prédéfini de document d’après la configuration du document actif. //Suppose que vous disposez d’un document ouvert. var myDocumentPreset; if(app.documents.length > 0){ var myDocument = app.activeDocument; //Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. myDocumentPreset = app.documentPresets.item("myDocumentPreset"); try { var myPresetName = myDocumentPreset.name; } catch (myError){ myDocumentPreset = app.documentPresets.add({name:"myDocumentPreset"}); } Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 121 //Configurer les unités de mesure par défaut de l’application de manière à ce qu’elles correspondent //à celles du document. app.viewPreferences.horizontalMeasurementUnits = myDocument.viewPreferences.horizontalMeasurem entUnits; app.viewPreferences.verticalMeasurementUnits = myDocument.viewPreferences.verticalMeasurementU nits; //Compléter les propriétés du paramètre prédéfini de document avec //les propriétés correspondantes du document actif. with(myDocumentPreset){ //Notez que le script suivant applique les préférences de marges //du document ; pour appliquer les préférences de marges de la page active, //remplacez "app.activeDocument" par "app.activeDocument" dans la //ligne suivante (en supposant que la fenêtre active est une fenêtre de mise en page). var myMarginPreferences = app.activeDocument.marginPreferences; left = myMarginPreferences.left; right = myMarginPreferences.right; top = myMarginPreferences.top; bottom = myMarginPreferences.bottom; columnCount = myMarginPreferences.columnCount; columnGutter = myMarginPreferences.columnGutter; documentBleedBottom = app.activeDocument.documentPreferences.documentBleedBottomOffset; documentBleedTop = app.activeDocument.documentPreferences.documentBleedTopOffset; documentBleedLeft = app.activeDocument.documentPreferences.documentBleedInsideOrLeftOffset; documentBleedRight = app.activeDocument.documentPreferences.documentBleedOutsideOrRightOffs et; facingPages = app.activeDocument.documentPreferences.facingPages; pageHeight = app.activeDocument.documentPreferences.pageHeight; pageWidth = app.activeDocument.documentPreferences.pageWidth; pageOrientation = app.activeDocument.documentPreferences.pageOrientation; pagesPerDocument = app.activeDocument.documentPreferences.pagesPerDocument; slugBottomOffset = app.activeDocument.documentPreferences.slugBottomOffset; slugTopOffset = app.activeDocument.documentPreferences.slugTopOffset; slugInsideOrLeftOffset = app.activeDocument.documentPreferences.slugInsideOrLeftOffset; slugRightOrOutsideOffset = app.activeDocument.documentPreferences.slugRightOrOutsideOffset; } } Création d’un paramètre prédéfini à partir de nouvelles valeurs Pour créer un paramètre prédéfini de document avec des valeurs particulières, exécutez le script suivant : //DocumentPreset.jsx //JavaScript InDesign CS2 //Crée un paramètre prédéfini de document. var myDocumentPreset; //Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. myDocumentPreset = app.documentPresets.item("myDocumentPreset"); try { var myPresetName = myDocumentPreset.name; } catch (myError){ myDocumentPreset = app.documentPresets.add({name:"myDocumentPreset"}); } //Compléter les propriétés du paramètre prédéfini de document. with(myDocumentPreset){ pageHeight = "9i"; pageWidth = "7i"; left = "4p"; right = "6p"; top = "4p"; bottom = "9p"; columnCount = 1; documentBleedBottom = "3p"; documentBleedTop = "3p"; documentBleedLeft = "3p"; documentBleedRight = "3p"; facingPages = true; pageOrientation = PageOrientation.portrait; pagesPerDocument = 1; slugBottomOffset = "18p"; 122 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts slugTopOffset = "3p"; slugInsideOrLeftOffset = "3p"; slugRightOrOutsideOffset = "3p"; } Utilisation d’un paramètre prédéfini Pour créer un document à l’aide d’un paramètre prédéfini de document, utilisez le paramètre document preset comme indiqué précédemment à la section « Création d’un nouveau document ». Configuration des planches types Après avoir défini le format de page, le fond perdu et la ligne-bloc du document de base, configurez les planches types du document : //MasterSpread.jsx //JavaScript InDesign CS2 //Crée un document, puis indique comment configurer les propriétés de la planche type. //Configurer la première planche type dans un nouveau document. myDocument = app.documents.add(); //Set up the document. with(myDocument.documentPreferences){ pageHeight = "11i" pageWidth = "8.5i" facingPages = true; pageOrientation = PageOrientation.portrait; } //Définir le point d’origine de la règle à la page d’origine. Ceci est très important ; //il est autrement plus difficile de placer //correctement les objets sur la page. myDocument.viewPreferences.rulerOrigin = RulerOrigin.pageOrigin; with(myDocument.masterSpreads.item(0)){ //Configurer la page gauche (verso). with(pages.item(0)){ with(marginPreferences){ columnCount = 3; columnGutter = "1p"; bottom = "6p" //« left » (gauche) signifie intérieur, « right » (droite) extérieur. left = "6p" right = "4p" top = "4p" } //Ajouter un simple pied de page avec un numéro de section et un numéro de page. with(textFrames.add()){ geometricBounds = ["61p", "4p", "62p", "45p"]; insertionPoints.item(0).contents = SpecialCharacters.sectionMarker; insertionPoints.item(0).contents = SpecialCharacters.emSpace; insertionPoints.item(0).contents = SpecialCharacters.autoPageNumber; paragraphs.item(0).justification = Justification.leftAlign; } } //Configurer la page droite (recto). with(pages.item(1)){ with(marginPreferences){ columnCount = 3; columnGutter = "1p"; bottom = "6p" //« left » (gauche) signifie intérieur, « right » (droite) extérieur. left = "6p" right = "4p" top = "4p" } //Ajouter un simple pied de page avec un numéro de section et un numéro de page. with(textFrames.add()){ geometricBounds = ["61p", "6p", "62p", "47p"]; Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts insertionPoints.item(0).contents insertionPoints.item(0).contents insertionPoints.item(0).contents paragraphs.item(0).justification = = = = SpecialCharacters.autoPageNumber; SpecialCharacters.emSpace; SpecialCharacters.sectionMarker; Justification.rightAlign; } } } Pour appliquer une planche type à une page de document, utilisez la propriété de appliedMaster de la page du document : //ApplyMaster.jsx //JavaScript InDesign CS2 //Applique une planche type à une page. //Suppose que le document actif utilise un gabarit nommé "B-Master" //et au moins trois pages ; la page 3 correspond à pages.item(2) car les tableaux JavaScript démarrent à partir de zéro. app.activeDocument.pages.item(2).appliedMaster = app.activeDocument.masterSpreads.item("BMaster"); Utilisez la même propriété pour appliquer une planche type à une page de planche type : //ApplyMasterToMaster.jsx //JavaScript InDesign CS2 //Applique une planche type à un gabarit. //Suppose que le document actif utilise une planche type nommée "B-Master" //différente de la première planche type du document. app.activeDocument.masterSpreads.item(0).pages.item(0).appliedMaster = app.activeDocument. masterSpreads.item("B-Master"); Définition des paramètres par défaut de mise en forme de texte Vous pouvez définir les attributs par défaut de mise en forme de texte pour votre application ou pour les documents individuels. Si vous définissez les paramètres par défaut de mise en forme de texte pour l’application, ceux-ci s’appliquent à tous les nouveaux documents ; les documents existants ne changent pas. Si vous définissez les paramètres par défaut de mise en forme de texte pour un document, ceux-ci s’appliquent à tout nouveau texte que vous insérez dans le document ; le texte existant ne change pas. Définition des paramètres de texte par défaut de l’application Pour définir les paramètres de mise en forme de texte par défaut pour votre application : //ApplicationTextDefaults.jsx //JavaScript InDesign CS2 //Détermine les paramètres de texte par défaut de l’application, qui s’appliquent à tous //les nouveaux documents. Les documents existants ne changent pas. with(app.textDefaults){ alignToBaseline = true; try{ appliedFont = app.fonts.item("Minion Pro"); } catch(e){} try{ fontStyle = "Regular"; } catch(e){} try{ appliedLanguage = "English: USA"; } catch(e){} autoLeading = 100; balanceRaggedLines = false; baselineShift = 0; capitalization = Capitalization.normal; composer = "Adobe Paragraph Composer"; desiredGlyphScaling = 100; desiredLetterSpacing = 0; 123 124 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts desiredWordSpacing = 100; dropCapCharacters = 0; if(dropCapCharacters != 0){ dropCapLines = 3; //Suppose que l’application utilise un style de caractère par défaut nommé "myDropCap" dropCapStyle = app.characterStyles.item("myDropCap"); } fillColor = app.colors.item("Black"); fillTint = 100; firstLineIndent = "14pt"; gridAlignFirstLineOnly = false; horizontalScale = 100; hyphenateAfterFirst = 3; hyphenateBeforeLast = 4; hyphenateCapitalizedWords = false; hyphenateLadderLimit = 1; hyphenateWordsLongerThan = 5; hyphenation = true; hyphenationZone = "3p"; hyphenWeight = 9; justification = Justification.leftAlign; keepAllLinesTogether = false; keepLinesTogether = true; keepFirstLines = 2; keepLastLines = 2; keepWithNext = 0; kerningMethod = "Optical"; kerningValue = 0; leading = 14; leftIndent = 0; ligatures = true; maximumGlyphScaling = 100; maximumLetterSpacing = 0; maximumWordSpacing = 160; minimumGlyphScaling = 100; minimumLetterSpacing = 0; minimumWordSpacing = 80; noBreak = false; otfContextualAlternate = true; otfDiscretionaryLigature = true; otfFigureStyle = OTFFigureStyle.proportionalOldstyle; otfFraction = true; otfHistorical = true; otfOrdinal = false; otfSlashedZero = true; otfSwash = false; otfTitling = false; overprintFill = false; overprintStroke = false; pointSize = 11; position = Position.normal; rightIndent = 0; ruleAbove = false; if(ruleAbove == true){ ruleAboveColor = app.colors.item("Black"); ruleAboveGapColor = app.swatches.item("None"); ruleAboveGapOverprint = false; ruleAboveGapTint = 100; ruleAboveLeftIndent = 0; ruleAboveLineWeight = .25; ruleAboveOffset = 14; ruleAboveOverprint = false; ruleAboveRightIndent = 0; ruleAboveTint = 100; ruleAboveType = app.strokeStyles.item("Solid"); ruleAboveWidth = RuleWidth.columnWidth; } ruleBelow = false; if(ruleBelow == true){ ruleBelowColor = app.colors.item("Black"); ruleBelowGapColor = app.swatches.item("None"); ruleBelowGapOverprint = false; ruleBelowGapTint = 100; Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 125 ruleBelowLeftIndent = 0; ruleBelowLineWeight = .25; ruleBelowOffset = 0; ruleBelowOverprint = false; ruleBelowRightIndent = 0; ruleBelowTint = 100; ruleBelowType = app.strokeStyles.item("Solid"); ruleBelowWidth = RuleWidth.columnWidth; } singleWordJustification = SingleWordJustification.leftAlign; skew = 0; spaceAfter = 0; spaceBefore = 0; startParagraph = StartParagraph.anywhere; strikeThru = false; if(strikeThru == true){ strikeThroughColor = app.colors.item("Black"); strikeThroughGapColor = app.swatches.item("None"); strikeThroughGapOverprint = false; strikeThroughGapTint = 100; strikeThroughOffset = 3; strikeThroughOverprint = false; strikeThroughTint = 100; strikeThroughType = app.strokeStyles.item("Solid"); strikeThroughWeight = .25; } strokeColor = app.swatches.item("None"); strokeTint = 100; strokeWeight = 0; tracking = 0; underline = false; if(underline == true){ underlineColor = app.colors.item("Black"); underlineGapColor = app.swatches.item("None"); underlineGapOverprint = false; underlineGapTint = 100; underlineOffset = 3; underlineOverprint = false; underlineTint = 100; underlineType = app.strokeStyles.item("Solid"); underlineWeight = .25 } verticalScale = 100; } Configuration des paramètres par défaut du document actif Pour définir les paramètres de texte par défaut pour le document actif, remplacez la ligne suivante dans l’exemple donné précédemment : with(app.textDefaults){ par : with(app.activeDocument.textDefaults){ Utilisation des paramètres de texte par défaut Pour appliquer un style de caractère ou de paragraphe par défaut à du texte dans un document, utilisez le script suivant : //SetTextDefaultToStyle.jsx //JavaScript InDesign CS2 //Suppose l’existence d’un style de paragraphe nommé "BodyText" dans le document actif. with(app.activeDocument.textDefaults){ appliedParagraphStyle = app.activeDocument.paragraphStyles.item("BodyText"); } 126 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts Ajout de métadonnées XMP Les métadonnées sont des informations qui permettent de décrire le contenu, l’origine ainsi que d’autres attributs d’un fichier. Dans l’interface utilisateur d’InDesign, vous pouvez saisir, modifier ou afficher des métadonnées grâce à la boîte de dialogue Informations (Fichier > Informations). Ces métadonnées comprennent l’auteur, l’état du copyright et les dates de création et de modification du document, ainsi que d’autres informations. Toutes ces données sont stockées au format XMP (Adobe Extensible Metadata Platform), une norme ouverte qui permet d’incorporer des métadonnées dans un document. Pour plus de détails sur le format XMP, consultez les spécifications XMP, à l’adresse suivante : http://partners.adobe.com/asn/developer/pdf/MetadataFramework.pdf. Vous pouvez également ajouter des informations XMP à un document en utilisant un script InDesign. Toutes les propriétés XMP d’un document se trouvent dans l’objet metadataPreferences (préférences des métadonnées) du document. L’exemple de script suivant permet de compléter les données XMP d’un document. Cet exemple montre également que les informations XMP sont extensibles. Si vous devez joindre des métadonnées à un document mais que celles-ci ne rentrent pas dans l’une des catégories de l’objet préférences des métadonnées, vous pouvez créer votre propre conteneur de métadonnées (un e-mail, dans cet exemple) : //MetadataExample.jsx //JavaScript InDesign CS2 //Ajoute des métadonnées à un document exemple. var myDocument = app.documents.add(); with (myDocument.metadataPreferences){ author = "Olav Martin Kvern"; copyrightInfoURL = "http://www.adobe.com"; copyrightNotice = "This document is copyrighted."; copyrightStatus = CopyrightStatus.yes; description = "Example of xmp metadata scripting in InDesign CS"; documentTitle = "XMP Example"; jobName = "XMP_Example_2003"; keywords = ["animal", "mineral", "vegetable"]; //L’objet préférences des métadonnées comprend également les informations relatives à la lecture seule //au créateur, au format, aux dates de création et de modification, ainsi qu’aux propriétés serverURL, //entrées et conservées automatiquement par InDesign. //Créer un conteneur XMP personnalisé, "email" var myNewContainer = createContainerItem("http://ns.adobe.com/xap/1.0/", "email"); setProperty("http://ns.adobe.com/xap/1.0/", "email/*[1]", "[email protected]"); } Création d’un modèle de document L’exemple suivant permet de créer un document, de déterminer les zones de fond perdu et de ligne-bloc, d’ajouter des informations aux métadonnées XMP du document, de configurer des gabarits, d’insérer des pieds de pages ainsi que des informations sur le travail dans un tableau à l’intérieur de la zone de lignebloc : //DocumentTemplate.jsx //JavaScript InDesign CS2 //Crée un modèle de document, comprenant des gabarits, des calques, une couleur, //des styles de paragraphe et de caractère, des repères et des informations XMP. //Définir les préférences de marges par défaut de l’application. with (app.marginPreferences){ //Enregistrer les préférences de marges par défaut actuelles de l’application. var myY1 = top; var myX1 = left; var myY2 = bottom; var myX2 = right; //Définir les préférences de marges par défaut de l’application. //La grille de ligne de base du document est définie sur 14 points, et Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript //toutes les marges sont définies par incréments de 14 points. top = 14 * 4 + "pt"; left = 14 * 4 + "pt"; bottom = "74pt"; right = 14 * 5 + "pt"; } //Créer un document. var myDocument = app.documents.add(); myDocument.documentPreferences.pageWidth = "7i"; myDocument.documentPreferences.pageHeight = "9i"; myDocument.documentPreferences.pageOrientation = PageOrientation.portrait; //A ce stade, vous pouvez rétablir les marges par défaut de l’application //à leur état d’origine. with (app.marginPreferences){ top = myY1; left = myX1; bottom = myY2; right = myX2; } //Configurer les zones de fond perdu et de ligne-bloc. with(myDocument.documentPreferences){ //Fond perdu documentBleedBottomOffset = "3p"; documentBleedTopOffset = "3p"; documentBleedInsideOrLeftOffset = "3p"; documentBleedOutsideOrRightOffset = "3p"; //Ligne-bloc slugBottomOffset = "18p"; slugTopOffset = "3p"; slugInsideOrLeftOffset = "3p"; slugRightOrOutsideOffset = "3p"; } //Définir une couleur. try{ myDocument.colors.item("PageNumberRed").name; } catch (myError){ myDocument.colors.add({name:"PageNumberRed", model:ColorModel.process, colorValue:[20, 100, 80, 10]}); } //Indiquer ensuite des styles par défaut. //Créer un style de caractère pour les numéros de pages. try{ myDocument.characterStyles.item("page_number").name; } catch (myError){ myDocument.characterStyles.add({name:"page_number"}); } myDocument.characterStyles.item("page_number").fillColor = myDocument.colors. item("PageNumberRed"); //Créer une paire de styles de paragraphe pour le texte de pied de page. //Ces styles appliquent une mise en page élémentaire. try{ myDocument.paragraphStyles.item("footer_left").name; } catch (myError){ myDocument.paragraphStyles.add({name:"footer_left", pointSize:11, leading:14}); } //Créer une paire de styles de paragraphe pour le texte de pied de page. try{ myDocument.paragraphStyles.item("footer_right").name; } catch (myError){ myDocument.paragraphStyles.add({name:"footer_right", basedOn:myDocument.paragraphStyles. item("footer_left"), justification:Justification.rightAlign, pointSize:11, leading:14}); } //Créer un calque pour les repères. try{ myDocument.layers.item("GuideLayer").name; } catch (myError){ myDocument.layers.add({name:"GuideLayer"}); } 127 128 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts //Créer un calque pour les éléments de pied de page. try{ myDocument.layers.item("Footer").name; } catch (myError){ myDocument.layers.add({name:"Footer"}); } //Créer un calque pour les éléments de ligne-bloc. try{ myDocument.layers.item("Slug").name; } catch (myError){ myDocument.layers.add({name:"Slug"}); } //Créer un calque pour le corps de texte. try{ myDocument.layers.item("BodyText").name; } catch (myError){ myDocument.layers.add({name:"BodyText"}); } with(myDocument.viewPreferences){ rulerOrigin = RulerOrigin.pageOrigin; horizontalMeasurementUnits = MeasurementUnits.points; verticalMeasurementUnits = MeasurementUnits.points; } //Grille de ligne de base du document et grille du document with(myDocument.gridPreferences){ baselineStart = 56; baselineDivision = 14; baselineShown = false; horizontalGridlineDivision = 14; horizontalGridSubdivision = 5 verticalGridlineDivision = 14; verticalGridSubdivision = 5 documentGridShown = false; } //Informations XMP du document. with (myDocument.metadataPreferences){ author = "Olav Martin Kvern"; copyrightInfoURL = "http://www.adobe.com"; copyrightNotice = "This document is not copyrighted."; copyrightStatus = CopyrightStatus.no; description = "Example 7 x 9 book layout"; documentTitle = "Example"; jobName = "7 x 9 book layout template"; keywords = ["7 x 9", "book", "template"]; var myNewContainer = createContainerItem("http://ns.adobe.com/xap/1.0/", "email"); setProperty("http://ns.adobe.com/xap/1.0/", "email/*[1]", "[email protected]"); } //Configurer la planche type. with(myDocument.masterSpreads.item(0)){ with(pages.item(0)){ //La gauche et la droite sont inversées pour les pages de gauche (devenant « intérieur » et « extérieur » ; //valable également dans l’interface utilisateur InDesign). var myBottomMargin = myDocument.documentPreferences.pageHeight - marginPreferences.bottom; var myRightMargin = myDocument.documentPreferences.pageWidth - marginPreferences.left; guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. vertical,location:marginPreferences.right}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. vertical, location:myRightMargin}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. horizontal, location:marginPreferences.top, fitToPage:false}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. horizontal, location:myBottomMargin, fitToPage:false}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. horizontal, location:myBottomMargin + 14, fitToPage:false}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. horizontal, location:myBottomMargin + 28, fitToPage:false}); var myLeftFooter = textFrames.add(myDocument.layers.item("Footer"), undefined, undefined, { geometricBounds:[myBottomMargin+14, marginPreferences.right, myBottomMargin+28, myRightMargin]}) Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 129 myLeftFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters. sectionMarker; myLeftFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters.emSpace; myLeftFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters. autoPageNumber; myLeftFooter.parentStory.characters.item(0).appliedCharacterStyle = myDocument. characterStyles.item("page_number"); myLeftFooter.parentStory.paragraphs.item(0).applyStyle(myDocument.paragraphStyles. item("footer_left", false)); //Informations sur la ligne-bloc. with(myDocument.metadataPreferences){ var myString = "Author:\t" + author + "\tDescription:\t" + description + "\rCreation Date:\t" + new Date + "\tEmail Contact\t" + getProperty("http://ns.adobe.com/xap/1.0/", "email/*[1]"); } var myLeftSlug = textFrames.add(myDocument.layers.item("Slug"), undefined, undefined, {geom etricBounds:[myDocument.documentPreferences.pageHeight+36, marginPreferences.right, myDocument. documentPreferences.pageHeight + 144, myRightMargin], contents:myString}); myLeftSlug.parentStory.tables.add(); //Bloc de texte type du corps de texte. var myLeftFrame = textFrames.add(myDocument.layers.item("BodyText"), undefined, undefined, {geometricBounds:[marginPreferences.top, marginPreferences.right, myBottomMargin, myRightMargin]}); } with(pages.item(1)){ var myBottomMargin = myDocument.documentPreferences.pageHeight - marginPreferences.bottom; var myRightMargin = myDocument.documentPreferences.pageWidth - marginPreferences.right; guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. vertical,location:marginPreferences.left}); guides.add(myDocument.layers.item("GuideLayer"), {orientation:HorizontalOrVertical. vertical, location:myRightMargin}); var myRightFooter = textFrames.add(myDocument.layers.item("Footer"), undefined, undefined, {geometricBounds:[myBottomMargin+14, marginPreferences.left, myBottomMargin+28, myRightMargin]}) myRightFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters. autoPageNumber; myRightFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters.emSpace; myRightFooter.parentStory.insertionPoints.item(0).contents = SpecialCharacters. sectionMarker; myRightFooter.parentStory.characters.item(-1).appliedCharacterStyle = myDocument. characterStyles.item("page_number"); myRightFooter.parentStory.paragraphs.item(0).applyStyle(myDocument.paragraphStyles. item("footer_right", false)); //Informations sur la ligne-bloc. var myRightSlug = textFrames.add(myDocument.layers.item("Slug"), undefined, undefined, {geo metricBounds:[myDocument.documentPreferences.pageHeight+36, marginPreferences.left, myDocument. documentPreferences.pageHeight + 144, myRightMargin], contents:myString}); myRightSlug.parentStory.tables.add(); //Bloc de texte type du corps de texte. var myRightFrame = textFrames.add(myDocument.layers.item("BodyText"), undefined, undefined, {geometricBounds:[marginPreferences.top, marginPreferences.left, myBottomMargin, myRightMargin], previousTextFrame:myLeftFrame}); } } //Insérer un texte de marque de section ; celui-ci apparaîtra dans le pied de page. myDocument.sections.item(0).marker = "Section 1"; //Lorsque vous liez les blocs de texte du gabarit, l’un d’entre eux est parfois sélectionné. Désélectionnez-le. app.select(NothingEnum.nothing, undefined); Impression d’un document Le script suivant permet d’imprimer le document actif à l’aide des préférences d’impression actuelles : //PrintDocument.jsx //JavaScript InDesign CS2 //Imprime le document actif. app.activeDocument.print(); 130 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts Impression à l’aide de groupes de pages Pour définir un groupe de pages à imprimer, configurez la propriété pageRange dans l’objet printPreferences du document avant d’imprimer : //PrintPageRange.jsx //JavaScript InDesign CS2 //Imprime un groupe de pages depuis le document actif. //Suppose que vous disposez d’un document ouvert, et que celui-ci contient une page nommée « 22 ». //Le groupe de pages peut être constitué de PageRange.allPages (toutes les pages) ou d’une chaîne de groupe de pages. //Un numéro de page saisi dans le groupe de pages doit correspondre à un //nom de page dans le document (et non à l’indice de page, par exemple). Si le nom de page n’est //pas trouvé, InDesign affiche un message d’erreur. app.activeDocument.printPreferences.pageRange = "22" app.activeDocument.print(false); Configuration des préférences d’impression L’objet printPreferences comprend des propriétés correspondant aux options des volets de la boîte de dialogue d’impression. Cet exemple de script indique comment définir les préférences d’impression à l’aide d’un script : //PrintPreferences.jsx //JavaScript InDesign CS2 //Définit les préférences d’impression du document actif. with(app.activeDocument.printPreferences){ //Propriétés correspondant aux commandes du volet Général //de la boîte de dialogue d’impression. activePrinterPreset est ignoré dans cet //exemple ; spécifiez vos préférences d’impression. L’imprimante peut être //soit une chaîne (le nom de l’imprimante), soit Printer.postscriptFile (un fichier Postscript). printer = "AGFA-SelectSet 5000SF v2013.108"; //Si la propriété de l’imprimante correspond au nom d’une imprimante, alors la propriété du ppd //est verrouillée (entraînant un message d’erreur si vous essayez de la configurer). //ppd = "AGFA-SelectSet5000SF"; //Si la propriété de l’imprimante indique un fichier Postscript, la propriété //la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. copies = 1; //Si la propriété de l’imprimante indique un fichier Printer.postscript, ou si //l’imprimante sélectionnée ne prend pas en charge l’assemblage, alors //la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. //collating = false; reverseOrder = false; //Le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages. pageRange = PageRange.allPages; printSpreads = false; printMasterPages = false; //Si la propriété de l’imprimante indique un fichier Printer.postScript, alors //la propriété du fichier d’impression comprend le chemin du fichier de sortie. //printFile = "/c/test.ps"; sequence = Sequences.all; //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Sortie de la //boîte de dialogue d’impression. //-------------------------------------------------------------------------------negative = true; colorOutput = ColorOutputModes.separations; //Remarquez le « i » minuscule dans « Builtin » trapping = Trapping.applicationBuiltin; screening = "175 lpi/2400 dpi"; flip = Flip.none; //Si le recouvrement est activé, une erreur se produit //la configuration des propriétés suivantes entraînera une erreur : if(trapping == Trapping.off){ Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 131 printBlack = true; printCyan = true; printMagenta = true; printYellow = true; } //Ne modifiez que l’angle de projection de l’encre et la fréquence si vous souhaitez remplacer //le tramage par celui spécifié par la propriété de tramage. //blackAngle = 45; //blackFrequency = 175; //cyanAngle = 15; //cyanFrequency = 175; //magentaAngle = 75; //magentaFreqency = 175; //yellowAngle = 0; //yellowFrequency = 175; //Les propriétés suivantes ne sont pas nécessaires (car colorOutput est //définie sur séparations). //compositeAngle = 45; //compositeFrequency = 175; //simulateOverprint = false; //Si le recouvrement est activé, une erreur se produira si vous configurez les propriétés suivantes : if(trapping == Trapping.off){ printBlankPages = false; printGuidesGrids = false; printNonprinting = false; } //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Format de la //boîte de dialogue d’impression. //-------------------------------------------------------------------------------paperSize = PaperSizes.custom; //La largeur et la hauteur de page sont ignorées si le format du papier n’est pas personnalisé. //paperHeight = 1200; //paperWidth = 1200; printPageOrientation = PrintPageOrientation.portrait; pagePosition = PagePositions.centered; paperGap = 0; paperOffset = 0; paperTransverse = false; scaleHeight = 100; scaleWidth = 100; scaleMode = ScaleModes.scaleWidthHeight; scaleProportional = true; //Si le recouvrement est activé, une erreur se produit //lorsque vous essayez de configurer les propriétés suivantes : if(trapping == Trapping.off){ textAsBlack = false; thumbnails = false; //Les propriétés suivantes ne sont pas nécessaires, car la valeur false est attribuée aux vignettes. //thumbnailsPerPage = 4; tile = false; //Les propriétés suivantes ne sont pas nécessaires, car la valeur false est attribuée à la mosaïque. //tilingOverlap = 12; //tilingType = TilingTypes.auto; } //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Repères et fonds perdus de //la boîte de dialogue d’impression. //-------------------------------------------------------------------------------//Attribuer la valeur true aux propriétés suivantes pour imprimer tous les repères d’impression : //allPrinterMarks = true; useDocumentBleedToPrint = false; //Si l’utilisation du fond perdu pour l’impression est désactivée, alors la configuration de l’une des propriétés de fond perdu //entraînera une erreur. //Extraire les valeurs du fond perdu du document et les augmenter. 132 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts bleedBottom = app.activeDocument.documentPreferences.documentBleedBottomOffset+3; bleedTop = app.activeDocument.documentPreferences.documentBleedTopOffset+3; bleedInside = app.activeDocument.documentPreferences.documentBleedInsideOrLeftOffset+3; bleedOutside = app.activeDocument.documentPreferences.documentBleedOutsideOrRightOffset+3; //Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. if(bleedBottom == 0 && bleedTop == 0 && bleedInside == 0 && bleedOutside == 0){ bleedMarks = true; } else{ bleedMarks = false; } colorBars = true; cropMarks = true; includeSlugToPrint = false; markLineWeight = MarkLineWeight.p125pt markOffset = 6; //markType = MarkTypes.default; pageInformationMarks = true; registrationMarks = true; //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Graphiques de la //boîte de dialogue d’impression. //-------------------------------------------------------------------------------sendImageData = ImageDataTypes.allImageData; fontDownloading = FontDownloading.complete; downloadPPDFOnts = true; try{ dataFormat = DataFormat.binary; } catch(e){} try{ postScriptLevel = PostScriptLevels.level3; } catch(e){} //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Gestion des couleurs de //la boîte de dialogue d’impression. //-------------------------------------------------------------------------------//Si la valeur false est attribuée à la propriété useColorManagement dans app.colorSettings, //une erreur se produit si vous essayez de configurer les propriétés suivantes : try{ sourceSpace = SourceSpaces.useDocument; intent = RenderingIntent.useColorSettings; crd = ColorRenderingDictionary.useDocument; profile = Profile.postscriptCMS; } catch(e){} //-------------------------------------------------------------------------------//Propriétés correspondant aux commandes du volet Avancé de la //boîte de dialogue d’impression. //-------------------------------------------------------------------------------opiImageReplacement = false; omitBitmaps = false; omitEPS = false; omitPDF = false; //L’instruction suivante suppose l’existence d’un aplatissement prédéfini nommé "high quality flattener". try{ flattenerPresetName = "high quality flattener"; } catch(e){} ignoreSpreadOverrides = false; } Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript Utilisation des impressions prédéfinies Pour imprimer un document à l’aide d’une impression prédéfinie, insérez celle-ci dans la méthode d’impression : //PrintDocumentWithPreset.jsx //JavaScript InDesign CS2 //Imprime le document actif à l’aide de l’impression prédéfinie indiquée. //Suppose l’existence d’une impression prédéfinie nommée "myPrintPreset" et d’un document ouvert. app.activeDocument.print(false, app.printerPresets.item("myPreset")); Création d’impressions prédéfinies à partir des préférences d’impression Pour créer une impression prédéfinie à partir des préférences d’impression d’un document : //CreatePrinterPreset.jsx //JavaScript InDesign CS2 //Crée une impression prédéfinie. //Si le paramètre prédéfini n’existe pas, créez-le ; //sinon, renseignez les propriétés du paramètre prédéfini existant. var myPreset; myPreset = app.printerPresets.item("myPreset"); try{ myPreset.name; } catch(myError){ myPreset = app.printerPresets.add({name:"myPreset"}); } with(app.activeDocument.printPreferences){ //Le nombre de propriétés d’impression découlant d’autres propriétés d’impression, //chaque ligne relative à la configuration d’une propriété est encadrée des instructions try...catch, //de manière à faciliter l’appréhension de la configuration des impressions prédéfinies. try{ myPreset.printer = printer; } catch(e){} try{ myPreset.ppd = ppd; } catch(e){} try{ myPreset.copies = copies; } catch(e){} try{ myPreset.collating = collating; } catch(e){} try{ myPreset.reverseOrder = reverseOrder; } catch(e){} try{ myPreset.pageRange = pageRange; } catch(e){} try{ myPreset.printSpreads = printSpreads; } catch(e){} try{ myPreset.printMasterPages = printMasterPages; } catch(e){} try{ myPreset.printFile = printFile; } catch(e){} try{ 133 134 Utilisation de documents dans JavaScript myPreset.sequence = sequence; } catch(e){} try{ myPreset.printBlankPages = printBlankPages; } catch(e){} try{ myPreset.printGuidesGrids = printGuidesGrids; } catch(e){} try{ myPreset.printNonprinting = printNonprinting; } catch(e){} try{ myPreset.paperSize = paperSize; } catch(e){} try{ myPreset.paperHeight = paperHeight; } catch(e){} try{ myPreset.paperWidth = paperWidth; } catch(e){} try{ myPreset.printPageOrientation = printPageOrientation; } catch(e){} try{ myPreset.pagePosition = pagePosition; } catch(e){} try{ myPreset.paperGap = paperGap; } catch(e){} try{ myPreset.paperOffset = paperOffset; } catch(e){} try{ myPreset.paperTransverse = paperTransverse; } catch(e){} try{ myPreset.scaleHeight = scaleHeight; } catch(e){} try{ myPreset.scaleWidth = scaleWidth; } catch(e){} try{ myPreset.scaleMode = scaleMode; } catch(e){} try{ myPreset.scaleProportional = scaleProportional; } catch(e){} try{ myPreset.textAsBlack = textAsBlack; } catch(e){} try{ myPreset.thumbnails = thumbnails; } catch(e){} try{ myPreset.thumbnailsPerPage = thumbnailsPerPage; Adobe InDesign CS2 Guide des scripts Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript } catch(e){} try{ myPreset.tile = tile; } catch(e){} try{ myPreset.tilingType = tilingType; } catch(e){} try{ myPreset.tilingOverlap = tilingOverlap; } catch(e){} try{ myPreset.allPrinterMarks = allPrinterMarks; } catch(e){} try{ myPreset.useDocumentBleedToPrint = useDocumentBleedToPrint; } catch(e){} try{ myPreset.bleedBottom = bleedBottom; } catch(e){} try{ myPreset.bleedTop = bleedTop; } catch(e){} try{ myPreset.bleedInside = bleedInside; } catch(e){} try{ myPreset.bleedOutside = bleedOutside; } catch(e){} try{ myPreset.bleedMarks = bleedMarks; } catch(e){} try{ myPreset.colorBars = colorBars; } catch(e){} try{ myPreset.cropMarks = cropMarks; } catch(e){} try{ myPreset.includeSlugToPrint = includeSlugToPrint; } catch(e){} try{ myPreset.markLineWeight = markLineWeight; } catch(e){} try{ myPreset.markOffset = markOffset; } catch(e){} try{ myPreset.markType = markType; } catch(e){} try{ myPreset.pageInformationMarks = pageInformationMarks; } catch(e){} try{ myPreset.registrationMarks = registrationMarks; } 135 136 Utilisation de documents dans JavaScript catch(e){} try{ myPreset.negative = negative; } catch(e){} try{ myPreset.colorOutput = colorOutput ; } catch(e){} try{ myPreset.trapping = trapping; } catch(e){} try{ myPreset.screening = screening; } catch(e){} try{ myPreset.flip = flip; } catch(e){} try{ myPreset.printBlack = printBlack; } catch(e){} try{ myPreset.printCyan = printCyan; } catch(e){} try{ myPreset.printMagenta = printMagenta; } catch(e){} try{ myPreset.printYellow = printYellow; } catch(e){} try{ myPreset.blackAngle = blackAngle; } catch(e){} try{ myPreset.blackFrequency = blackFrequency; } catch(e){} try{ myPreset.cyanAngle = cyanAngle; } catch(e){} try{ myPreset.cyanFrequency = cyanFrequency; } catch(e){} try{ myPreset.magentaAngle = magentaAngle; } catch(e){} try{ myPreset.magentaFreqency = magentaFreqency; } catch(e){} try{ myPreset.yellowAngle = yellowAngle; } catch(e){} try{ myPreset.yellowFrequency = yellowFrequency; } catch(e){} try{ myPreset.compositeAngle = compositeAngle; } catch(e){} Adobe InDesign CS2 Guide des scripts Adobe InDesign CS2 Guide des scripts try{ myPreset.compositeFrequency = compositeFrequency; } catch(e){} try{ myPreset.simulateOverprint = simulateOverprint; } catch(e){} try{ myPreset.sendImageData = sendImageData; } catch(e){} try{ myPreset.fontDownloading = fontDownloading; } catch(e){} try{ myPreset.downloadPPDFOnts = downloadPPDFOnts; } catch(e){} try{ myPreset.dataFormat = dataFormat; } catch(e){} try{ myPreset.postScriptLevel = postscriptLevel; } catch(e){} try{ myPreset.sourceSpace = sourceSpace; } catch(e){} try{ myPreset.intent = intent; } catch(e){} try{ myPreset.crd = crd; } catch(e){} try{ myPreset.profile = profile; } catch(e){} try{ myPreset.opiImageReplacement = opiImageReplacement; } catch(e){} try{ myPreset.omitBitmaps = omitBitmaps; } catch(e){} try{ myPreset.omitEPS = omitEPS; } catch(e){} try{ myPreset.omitPDF = omitPDF; } catch(e){} try{ myPreset.flattenerPresetName = flattenerPresetName ; } catch(e){} try{ myPreset.ignoreSpreadOverrides = ignoreSpreadOverrides; } catch(e){} alert("Done!"); } Utilisation de documents dans JavaScript 137 138 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts Exportation d’un document au format PDF Le script InDesign permet de gérer entièrement la création de fichiers PDF depuis vos documents de mise en page. Utilisation des options d’exportation PDF actuelles Le script suivant permet d’exporter le document actif au format PDF à l’aide d’un paramètre prédéfini d’exportation PDF : //ExportPDF.jsx //JavaScript InDesign CS2 //Suppose que vous disposez d’un document ouvert et que vous avez défini un paramètre prédéfini d’exportation PDF //nommé "prepress". //Les paramètres d’exportation du document sont les suivants : //Format de fichier (format as) - utilisez l’énumération ExportFormat.pdfType //ou la chaîne « Adobe PDF » ; //fichier de destination (to) //options d’affichage booléennes - la valeur true permet l’affichage de la //boîte de dialogue d’exportation PDF. //Utiliser comme paramètre prédéfini d’exportation PDF (ou une chaîne correspondant au nom d’un //paramètre prédéfini d’exportation PDF) var myPDFExportPreset = app.pdfExportPresets.item("prepress"); app.activeDocument.exportFile(ExportFormat.pdfType, File("/c/myTestDocument.pdf"), false, myPDFExportPreset); Configuration des options d’exportation PDF et exportation de pages individuelles L’exemple suivant permet de configurer les options d’exportation PDF avant l’exportation : //ExportEachPageAsPDF.jsx //JavaScript InDesign CS2 //Exporte chaque page d’un document InDesign CS en tant que fichier PDF individuel dans //un dossier sélectionné, à l’aide des paramètres d’exportation PDF actuels. //Afficher une boîte de dialogue "choose folder". if(app.documents.length != 0){ var myFolder = Folder.selectDialog ("Choose a Folder"); if(myFolder != null){ myExportPages(myFolder); } } else{ alert("Please open a document and try again."); } function myExportPages(myFolder){ var myPageName, myFilePath, myFile; var myDocument = app.activeDocument; var myDocumentName = myDocument.name; var myDialog = app.dialogs.add(); with(myDialog.dialogColumns.add().dialogRows.add()){ staticTexts.add({staticLabel:"Base name:"}); var myBaseNameField = textEditboxes.add({editContents:myDocumentName, minWidth:160}); } var myResult = myDialog.show({name:"ExportPages"}); if(myResult == true){ var myBaseName = myBaseNameField.editContents; //Supprimer la boîte de dialogue de la mémoire. myDialog.destroy(); for(var myCounter = 0; myCounter < myDocument.pages.length; myCounter++){ myPageName = myDocument.pages.item(myCounter).name; app.pdfExportPreferences.pageRange = myPageName; //Le nom des fichiers exportés est composé du nom de base + le //nom de la page + « .pdf ». //Si le nom de la page contient le caractère deux-points (ce qui est le cas si le document //comprend des sections), Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript 139 //supprimez-le. var myRegExp = new RegExp(":","gi"); myPageName = myPageName.replace(myRegExp, "_"); myFilePath = myFolder + "/" + myBaseName + "_" + myPageName + ".pdf"; myFile = new File(myFilePath); myDocument.exportFile(ExportFormat.pdfType, myFile, false); } } else{ myDialog.destroy(); } } L’exemple suivant indique un jeu de préférences d’exportation PDF (ce jeu n’est pas complet ; les fonctions de sécurité ne sont pas modifiées) : //ExportPDFWithOptions.jsx //JavaScript InDesign CS2 //Définit les options d’exportation PDF, puis exporte le document actif au format PDF. with(app.pdfExportPreferences){ //Options de sortie PDF standard. pageRange = PageRange.allPages; acrobatCompatibility = AcrobatCompatibility.acrobat6; exportGuidesAndGrids = false; exportLayers = false; exportNonPrintingObjects = false; exportReaderSpreads = false; generateThumbnails = false; try{ ignoreSpreadOverrides = false; } catch(e){} includeBookmarks = true; includeHyperlinks = true; includeICCProfiles = true; includeSlugWithPDF = false; includeStructure = false; interactiveElements = false; //Attribuer la valeur zéro à l’option jeu partiel des polices au-dessous de désactive le jeu partiel des polices ; //attribuez une autre valeur pour utiliser le jeu partiel des polices. subsetFontsBelow = 0; // //Options de qualité/échantillonnage/compression Bitmap. colorBitmapCompression = BitmapCompression.zip; colorBitmapQuality = CompressionQuality.eightBit; colorBitmapSampling = Sampling.none; //Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs dans le présent exemple. //Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap couleurs lorsque celui-ci n’est pas activé (none). grayscaleBitmapCompression = BitmapCompression.zip; grayscaleBitmapQuality = CompressionQuality.eightBit; grayscaleBitmapSampling = Sampling.none; //Il n’est pas nécessaire d’indiquer un seuil de compression des niveaux de gris dans cet exemple. //Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap en niveaux de gris lorsque celui-ci n’est //pas activé (none). monochromeBitmapCompression = BitmapCompression.zip; monochromeBitmapSampling = Sampling.none; //Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs monochromes dans le présent exemple. //Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap monochromes lorsque celui-ci n’est //pas activé (none). // //Autres options de compression. compressionType = PDFCompressionType.compressNone; compressTextAndLineArt = true; contentToEmbed = PDFContentToEmbed.embedAll; cropImagesToFrames = true; optimizePDF = true; 140 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts // //Options de prépresse et repères d’imprimantes //Extraire les valeurs du fond perdu du document. bleedBottom = app.activeDocument.documentPreferences.documentBleedBottomOffset; bleedTop = app.activeDocument.documentPreferences.documentBleedTopOffset; bleedInside = app.activeDocument.documentPreferences.documentBleedInsideOrLeftOffset; bleedOutside = app.activeDocument.documentPreferences.documentBleedOutsideOrRightOffset; //Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. if(bleedBottom == 0 && bleedTop == 0 && bleedInside == 0 && bleedOutside == 0){ bleedMarks = true; } else{ bleedMarks = false; } colorBars = true; colorTileSize = 128; grayTileSize = 128; cropMarks = true; omitBitmaps = false; omitEPS = false; omitPDF = false; pageInformationMarks = true; pageMarksOffset = 12; pdfColorSpace = PDFColorSpace.unchangedColorSpace; //Type de repère par défaut. pdfMarkType = 1147563124; printerMarkWeight = PDFMarkWeight.p125pt; registrationMarks = true; try{ simulateOverprint = false; } catch(e){} useDocumentBleedWithPDF = true; //Attribuer à viewPDF la valeur true pour ouvrir le PDF dans Acrobat ou Adobe Reader. viewPDF = false; } //Exportez maintenant le document. Spécifiez le chemin de votre fichier. app.activeDocument.exportFile(ExportFormat.pdfType, File(“/c/myTestDocument.pdf”), false); Exportation d’un groupe de pages L’exemple suivant indique comment exporter un groupe de pages spécifique au format PDF : //ExportPageRangeAsPDF.jsx //JavaScript InDesign CS2 //Exporte le groupe de pages indiqué au format PDF. //Suppose que vous disposez d’un document ouvert, et que celui-ci //comprend au minimum 12 pages. with(app.pdfExportPreferences){ //Le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages //(comme vous l’indiqueriez dans les boîtes de dialogue d’impression ou d’exportation PDF). pageRange = "1, 3-6, 7, 9-11, 12"; } var myPDFExportPreset = app.pdfExportPresets.item("prepress") app.activeDocument.exportFile(ExportFormat.pdfType, File("/c/myTestDocument.pdf"), false, myPDFExportPreset); Exportation de pages au format EPS Lorsque vous exportez un document au format EPS, InDesign enregistre chaque page du fichier en tant que graphique EPS individuel (par définition, un fichier EPS ne peut comprendre qu’une seule page). Si vous exportez plusieurs pages, InDesign ajoute l’indice de la page au nom de fichier. L’indice de la page dans le document n’est pas nécessairement le nom de la page (tel qu’il est défini par les options de section pour la section comprenant la page en question). Adobe InDesign CS2 Guide des scripts Utilisation de documents dans JavaScript Exportation de toutes les pages Le script suivant permet d’exporter les pages du document actif dans un ou plusieurs fichiers EPS : //ExportAsEPS.jsx //JavaScript InDesign CS2 //Exporte les pages du document actif au format EPS. var myFile = new File("/c/myTestFile.eps"); app.activeDocument.exportFile(ExportFormat.epsType, myFile, false); Exportation d’un groupe de pages Pour contrôler les pages à exporter en EPS, attribuez à la propriété pageRange des préférences d’exportation EPS une chaîne de groupe de pages comprenant les pages que vous souhaitez exporter avant l’exportation : //ExportSelectedPagesAsEPS.jsx //JavaScript InDesign CS2 //Entrer le nom de la page à exporter dans l’instruction suivante. //Notez que le nom de la page n’est pas nécessairement l’indice de la page dans le //document (par exemple, la première page d’un document dont la numérotation commence //à 21 sera la page « 21 », et non 1). app.epsExportPreferences.pageRange = "1-3, 6, 9"; var myFile = new File("/c/myTestFile.eps"); app.activeDocument.exportFile(ExportFormat.epsType, myFile, false); Contrôle des options d’exportation Outre le groupe de pages, vous pouvez contrôler d’autres options d’exportation EPS à l’aide d’un script en définissant les propriétés de l’objet epsExportPreferences : //ExportEachPageAsEPS.jsx //JavaScript InDesign CS2. //Exporte chaque page d’un document InDesign CS en tant que fichier EPS individuel //dans un dossier sélectionné à l’aide des paramètres d’exportation EPS actuels. //Afficher une boîte de dialogue "choose folder". if(app.documents.length != 0){ var myFolder = Folder.selectDialog ("Choose a Folder"); if(myFolder != null){ myExportPages(myFolder); } } else{ alert("Please open a document and try again."); } function myExportPages(myFolder){ var myFilePath, myPageName, myFile; var myDocument = app.activeDocument; var myDocumentName = myDocument.name; var myDialog = app.dialogs.add({name:"ExportPages"}); with(myDialog.dialogColumns.add().dialogRows.add()){ staticTexts.add({staticLabel:"Base name:"}); var myBaseNameField = textEditboxes.add({editContents:myDocumentName, minWidth:160}); } var myResult = myDialog.show(); if(myResult == true){ //Le nom des fichiers exportés est composé du nom de base + le nom de la page + « .eps ». var myBaseName = myBaseNameField.editContents; //Supprimer la boîte de dialogue de la mémoire. myDialog.destroy(); //Générer un chemin de fichier à partir du nom de dossier, du nom du document de base et du nom de la page. for(var myCounter = 0; myCounter < myDocument.pages.length; myCounter++){ myPageName = myDocument.pages.item(myCounter).name; app.epsExportPreferences.pageRange = myPageName; //Le nom des fichiers exportés est composé du nom de base + le nom de la //page + « .eps ». //Si le nom de la page contient le caractère deux-points (ce qui est le cas si le document 141 142 Utilisation de documents dans JavaScript Adobe InDesign CS2 Guide des scripts //comprend des sections), //supprimez-le. var myRegExp = new RegExp(":","gi"); myPageName = myPageName.replace(myRegExp, "_"); myFilePath = myFolder + "/" + myBaseName + "_" + myPageName + ".eps"; myFile = new File(myFilePath); app.activeDocument.exportFile(ExportFormat.epsType, myFile, false); } } else{ myDialog.destroy(); } } Adobe InDesign CS2 Guide des scripts 7 Utilisation de documents dans VBScript Utilisation de documents dans VBScript La plupart des tâches que vous effectuez dans InDesign concernent des documents : création, enregistrement, insertion d’éléments de page, de couleurs, de styles et de textes. Les documents sont également nécessaires au script InDesign, et presque chaque tâche associée à un document peut être automatisée par le biais d’un script. Dans ce chapitre, vous apprendrez à : Effectuer les tâches élémentaires de gestion de documents, parmi lesquelles Créer un document Ouvrir un document Fermer un document Enregistrer un document Effectuer les tâches élémentaires de mise en page, notamment : Définir le format de page et la longueur du document Définir le fond perdu et la ligne-bloc Déterminer les colonnes et les marges Changer l’aspect de la table de montage Utiliser les repères et les grilles Changer les unités de mesure et le point d’origine de la règle Déterminer et appliquer les paramètres prédéfinis de document Définir les pages types (les doubles pages types) Définir les paramètres de mise en forme de texte par défaut Ajouter des métadonnées XMP (informations sur un fichier) Créer un modèle de document Imprimer un document Exporter un document au format PDF Exporter des pages d’un document au format EPS Remarque : si ce n’est déjà fait, consultez le chapitre 3, « Initiation aux scripts InDesign » et apprenez à créer un script avant de continuer. 143 144 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Notions de base de la gestion de documents Dans la plupart des situations, votre script doit soit ouvrir soit créer un document, l’enregistrer, puis le fermer. Création d’un document Si vous n’avez pas de document existant, vous devez en créer un. Pour créer un document : Rem Rem Rem Set Set MakeDocument.vbs VBScript InDesign CS2 Crée un document. myInDesign = CreateObject("InDesign.Application.CS2") myDocument = myInDesign.Documents.Add La méthode Document.Add peut accepter deux paramètres facultatifs, comme indiqué dans le script suivant : Rem Rem Rem Rem Rem Rem Rem Rem Rem Set Set Rem Rem Rem MakeDocumentWithParameters.vbs VBScript InDesign CS2 Crée un document. Le premier paramètre (ShowingWindow) permet de contrôler la visibilité du document. Les documents masqués ne sont pas réduits, et ne s’affichent que lorsque vous créez une fenêtre. Le second paramètre (DocumentPreset) précise quel paramètre prédéfini de document utiliser. L’instruction suivante suppose que vous avez défini un paramètre prédéfini de document nommé "Flyer". myInDesign = CreateObject("InDesign.Application.CS2") myDocument = myInDesign.Documents.Add(True, myInDesign.DocumentPresets.Item("Flyer")) Si vous attribuez la valeur false au paramètre ShowingWindow, vous pouvez afficher le document en créant une fenêtre. Set myLayoutWindow = myDocument.Windows.Add Ouverture d’un document L’exemple de script ci-dessous indique comment ouvrir un document existant : Rem Rem Rem Set Set OpenDocument.vbs VBScript InDesign CS2 Ouvre un document existant. Spécifiez le chemin de votre fichier. myInDesign = CreateObject("InDesign.Application.CS2") myDocument = myInDesign.Open("c:\myTestDocument.indd") Définissez le paramètre ShowingWindow sur false (la valeur par défaut est true) dans la méthode Open pour masquer le document. Ceci peut vous permettre d’améliorer les performances d’un script. Pour afficher un document masqué, créez une fenêtre, comme indiqué dans le script suivant : Rem OpenDocumentInBackground.vbs Rem VBScript InDesign CS2 Rem Ouvre un document existant en arrière-plan, puis affiche ce document. Rem Spécifiez le chemin de votre fichier. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Open("c:\myTestDocument.indd", False) Rem A ce stade, vous pourriez travailler sur le document sans afficher la Rem fenêtre du document. Dans certains cas, les scripts s’exécutent plus vite si la fenêtre du document Rem n’est pas visible. Rem Lorsque vous souhaitez afficher le document masqué, créez une fenêtre. Set myLayoutWindow = myDocument.Windows.Add Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 145 Fermeture d’un document La méthode Close permet de fermer un document : Rem CloseDocument.vbs Rem VBScript InDesign CS2 Rem Ferme le document actif. Set myInDesign = CreateObject("InDesign.Application.CS2") myInDesign.ActiveDocument.Close Rem Notez que vous pourriez également utiliser : Rem myInDesign.Documents.Item(1).Close Pour la dernière ligne, notez que le document 1 fait toujours référence au document au premier plan. La méthode Close peut accepter deux paramètres facultatifs : Rem CloseWithParameters.vbs Rem VBScript InDesign CS2 Rem Utiliser les options idSaveOptions.idYes pour enregistrer le document, idSaveOptions.idNo Rem pour fermer le document sans l’enregistrer ou idSaveOptions.idAsk pour Rem afficher une invite. Avec idSaveOptions.idYes, vous devrez Rem faire référence à un fichier vers lequel enregistrer dans le second paramètre (SavingIn). Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Si le fichier n’a pas été enregistré, affichez une invite. If myInDesign.ActiveDocument.Saved <> True Then myInDesign.ActiveDocument.Close idSaveOptions.idAsk Rem Ou, pour enregistrer sous un nom de fichier particulier : Rem myFile = "c:\myTestDocument.indd" Rem myInDesign.ActiveDocument.Close idSaveOptions.idYes, myFile Else Rem Si le fichier a déjà été enregistré, enregistrez-le. myInDesign.ActiveDocument.Close idSaveOptions.idYes End If Cet exemple ferme tous les documents ouverts sans les enregistrer : Rem Rem Rem Set For CloseAll.vbs VBScript InDesign CS2 Ferme tous les documents ouverts sans les enregistrer. myInDesign = CreateObject("InDesign.Application.CS2") myCounter = myInDesign.Documents.Length To 1 Step -1 myInDesign.Documents.Item(myCounter).Close idSaveOptions.idNo Next Enregistrement d’un document Dans l’interface utilisateur d’InDesign, la commande Enregistrer du menu Fichier permet d’enregistrer un fichier, l’option Enregistrer sous permet d’enregistrer un fichier sous un nom différent. Dans le script InDesign, la méthode save permet d’effectuer les deux opérations : Rem SaveDocument.vbs Rem VBScript InDesign CS2 Rem Si le document actif a subi des modifications depuis le dernier enregistrement, enregistrezle. Set myInDesign = CreateObject("InDesign.Application.CS2") If myInDesign.ActiveDocument.Modified = True Then myInDesign.ActiveDocument.Save End If La méthode Save propose deux options : la première (To) détermine le fichier vers lequel le fichier actuel doit être enregistré ; la seconde (Stationery) peut être définie sur true pour enregistrer le document en tant que modèle : Rem Rem Rem Set SaveDocumentAs.vbs VBScript InDesign CS2 Si le document actif n’a jamais été enregistré, enregistrez-le. myInDesign = CreateObject("InDesign.Application.CS2") 146 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts If myDocument.Saved = False Then Rem Si vous n’indiquez pas un nom de fichier, Rem InDesign affichera la boîte de dialogue Enregistrer. myInDesign.ActiveDocument.Save "c:\myTestDocument.indd" End If L’exemple suivant permet d’enregistrer un document en tant que modèle : Rem SaveAsTemplate.vbs Rem VBScript InDesign CS2 Rem Enregistrer le document actif en tant que modèle. Set myInDesign = CreateObject("InDesign.Application.CS2") If myInDesign.ActiveDocument.Saved = True Then Rem Convertir le nom de fichier en une chaîne de caractères. myFileName = myInDesign.ActiveDocument.FullName Rem Si le nom du fichier comprend l’extension « .indd », remplacez-la par « .indt ». If InStr(1, myFileName, ".indd") <> 0 Then myFileName = Replace(myFileName, ".indd", ".indt") End If Else Rem Si le document n’a pas été enregistré, indiquez un Rem nom/chemin par défaut. myFileName = "c:\myTestDocument.indt" End If myInDesign.ActiveDocument.Save myFileName, True Notions de base de la mise en page Chaque document comprend un format de page, un nombre de pages attribué, des zones de fond perdu et de ligne-bloc, des colonnes et des marges qui définissent la zone de placement des éléments. Définition du format de page et de la longueur du document Lorsque vous créez un document dans l’interface utilisateur d’InDesign, vous pouvez spécifier le format et l’orientation de la page, le nombre de pages et l’utilisation éventuelle de pages en vis-à-vis. Pour créer un document à l’aide d’un script InDesign, vous utilisez la méthode Documents.Add. Une fois le document créé, vous pouvez contrôler ces paramètres grâce à l’objet documentPreferences : Rem DocumentPreferences.vbs Rem VBScript InDesign CS2 Rem Utiliser l’objet préférences du document pour modifier les Rem dimensions et l’orientation du document. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add With myDocument.DocumentPreferences .PageHeight = "800pt" .PageWidth = "600pt" .PageOrientation = idPageOrientation.idLandscape .PagesPerDocument = 16 End With Remarque : l’objet Application utilise contient également un objet DocumentPreferences. Vous pouvez déterminer les valeurs par défaut de l’application pour la hauteur et la largeur de page, ainsi que d’autres propriétés en modifiant les propriétés de cet objet. Définition du fond perdu et de la ligne-bloc Dans InDesign, le fond perdu et la ligne-bloc sont des zones en-dehors des marges qui peuvent être imprimées ou comprises dans un document PDF exporté. De manière générale, ces zones sont utilisées pour les objets qui s’étendent au-delà des bords de page (fond perdu) et des informations sur le document/travail (ligne-bloc). Les deux zones peuvent être imprimées et exportées indépendamment l’une de l’autre. Par exemple, vous pouvez choisir d’ignorer les informations sur la ligne-bloc pour Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 147 l’impression finale d’un document. Le script suivant détermine le fond perdu et la ligne-bloc pour un nouveau document : Rem BleedAndSlug.vbs Rem VBScript InDesign CS2 Rem Créer un document. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Les propriétés de fond perdu et de ligne-bloc appartiennent à l’objet documentPreferences. With myDocument.DocumentPreferences Rem Fond perdu .DocumentBleedBottomOffset = "3p" .DocumentBleedTopOffset = "3p" .DocumentBleedInsideOrLeftOffset = "3p" .DocumentBleedOutsideOrRightOffset = "3p" Rem Ligne-bloc .SlugBottomOffset = "18p" .SlugTopOffset = "3p" .SlugInsideOrLeftOffset = "3p" .SlugRightOrOutsideOffset = "3p" End With Si toutes les valeurs du fond perdu sont égales, comme dans l’exemple précédent, vous pouvez également utiliser la propriété DocumentBleedUniformSize : Rem UniformBleed.vbs Rem VBScript InDesign CS2 Rem Créer un document. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Les propriétés de fond perdu appartiennent à l’objet documentPreferences. With myDocument.DocumentPreferences Rem Fond perdu .DocumentBleedTopOffset = "3p" .DocumentBleedUniformSize = True End With Si toutes les valeurs de la ligne-bloc sont égales, vous pouvez utiliser la propriété DocumentSlugUnifor mSize : Rem UniformSlug.vbs Rem VBScript InDesign CS2 Rem Créer un document. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Les propriétés de ligne-bloc appartiennent à l’objet documentPreferences. With myDocument.DocumentPreferences Rem Ligne-bloc : .SlugTopOffset = "3p" .DocumentSlugUniformSize = True End With Vous pouvez non seulement déterminer la largeur et la hauteur des zones de fond perdu et de ligne-bloc, mais également la couleur des repères délimitant ces zones. Cette propriété ne se trouve pas dans l’objet DocumentPreferences, mais dans l’objet PasteboardPreferences : Rem BleedSlugGuideColors.vbs Rem VBScript InDesign CS2 Rem Configurer les couleurs pour afficher les repères de fond perdu et de ligne-bloc. Set myInDesign = CreateObject("InDesign.Application.CS2") With myInDesign.ActiveDocument.PasteboardPreferences Rem Tous les repères InDesign peuvent utiliser les constantes de couleurs UI... .BleedGuideColor = idUIColors.idCuteTeal .SlugGuideColor = idUIColors.idCharcoal Rem ...ou un ensemble de valeurs RVB (de 0 à 255). Rem .BleedGuideColor = Array(0, 198, 192) Rem .SlugGuideColor = Array(192, 192, 192) End With 148 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Configuration des marges et des colonnes Dans un document, chaque page peut être configurée différemment en termes de marges et de colonnes. Avec le script InDesign, ces propriétés font partie de l’objet MarginPreferences pour chaque page. A titre d’exemple, ce script crée un document, puis définit les marges et les colonnes pour toutes les pages de la planche type : Rem MarginsAndColumns.vbs Rem VBScript InDesign CS2 Rem Définit les marges et les colonnes de la première page du document exemple. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add With myDocument.Pages.Item(1).MarginPreferences .ColumnCount = 3 Rem columnGutter peut être soit un nombre, soit des mesures. .ColumnGutter = "1p" .Top = "4p" .Bottom = "6p" Rem When document.documentPreferences.facingPages = true, Rem « left » (gauche) signifie intérieur, « right » (droite) extérieur. .Left = "6p" .Right = "4p" End With InDesign vous permet de ne pas créer de page qui soit plus petite que la somme de ses marges. La largeur de la page doit être supérieure à la somme des marges gauche et droite, et la hauteur de page doit être supérieure à la somme des marges de haut et de bas de page. Si vous créez des pages très petites (pour un encart presse par exemple) dans l’interface utilisateur InDesign, entrez de nouvelles valeurs dans la zone de texte Marges de la boîte de dialogue Nouveau document pour définir des marges correctes lors de la création du document. Toutefois, la solution est moins évidente avec un script. Lorsque vous créez un document, le script utilise les préférences de marge par défaut de l’application. Ces marges sont appliquées à toutes les pages du document, y compris aux gabarits. Les préférences de marges du document, une fois définies, ne s’appliquent qu’aux nouvelles pages et n’ont pas d’incidence sur les pages existantes. Si vous essayez de définir la hauteur et la largeur de page avec des valeurs inférieures à la somme des marges correspondantes sur l’une des pages existantes, InDesign ne modifie pas le format de page. Deux solutions s’offrent à vous. La première consiste à définir les marges des pages existantes avant de modifier le format de page : Rem PageMarginsForSmallPages.vbs Rem VBScript InDesign CS2 Rem Crée un document et détermine les marges. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add myDocument.ViewPreferences.HorizontalMeasurementUnits = idMeasurementUnits.idPoints myDocument.ViewPreferences.VerticalMeasurementUnits = idMeasurementUnits.idPoints With myDocument.MarginPreferences .Top = 0 .Left = 0 .Bottom = 0 .Right = 0 .ColumnCount = 1 .ColumnGutter = 0 End With Rem L’instruction suivante suppose que votre document par défaut comprend une seule page. With myDocument.Pages.Item(1).MarginPreferences .Top = 0 .Left = 0 .Bottom = 0 .Right = 0 .ColumnCount = 1 .ColumnGutter = 0 End With Rem L’instruction suivante suppose que votre planche type par défaut comprend deux pages. With myDocument.MasterSpreads.Item(1).Pages.Item(1).MarginPreferences Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 149 .Top = 0 .Left = 0 .Bottom = 0 .Right = 0 .ColumnCount = 1 .ColumnGutter = 0 End With With myDocument.MasterSpreads.Item(1).Pages.Item(2).MarginPreferences .Top = 0 .Left = 0 .Bottom = 0 .Right = 0 .ColumnCount = 1 .ColumnGutter = 0 End With myDocument.DocumentPreferences.PageHeight = "1p" myDocument.DocumentPreferences.PageWidth = “6p” Vous pouvez également modifier les préférences de marges par défaut de l’application avant de créer le document : Rem ApplicationPageMargins.vbs Rem VBScript InDesign CS2 Rem Définit les marges de pages par défaut de l’application. Ces paramètres s’appliquent à Rem tous les nouveaux documents. Les documents existants Rem restent intacts. Set myInDesign = CreateObject("InDesign.Application.CS2") With myInDesign.MarginPreferences Rem Enregistrer les préférences de marges par défaut actuelles de l’application. myY1 = .Top myX1 = .Left myY2 = .Bottom myX2 = .Right Rem Définir les préférences de marges par défaut de l’application. .Top = 0 .Left = 0 .Bottom = 0 .Right = 0 End With Rem Créer un document exemple pour mettre en évidence les modifications. Set myDocument = myInDesign.Documents.Add myDocument.DocumentPreferences.PageHeight = "1p" myDocument.DocumentPreferences.PageWidth = "6p" Rem Rétablir les préférences de marges par défaut de l’application à leur état antérieur. With myInDesign.MarginPreferences .Top = myY1 .Left = myX1 .Bottom = myY2 .Right = myX2 End With Modification de l’aspect de la table de montage La table de montage est une zone qui encadre les pages InDesign. Vous pouvez y stocker temporairement des éléments de la page. Il est possible de modifier la taille et la couleur de la table de montage à l’aide d’un script. La propriété PasteboardColor permet de contrôler la couleur en mode Normal ; la propriété PreviewBackgroundColor définit la couleur de la table de montage en mode Aperçu : Rem PasteboardPreferences.vbs Rem VBScript InDesign CS2 Rem Créer un document et modifier la taille de la table de montage. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add With myDocument.PasteboardPreferences Rem Vous pouvez utiliser soit un nombre, soit des mesures pour définir l’espace au-dessus/en dessous. .MinimumSpaceAboveAndBelow = "12p" Rem Il est possible de définir comme couleur de l’arrière plan de l’aperçu (visible en Rem mode Aperçu uniquement) l’une des constantes de couleurs UI prédéfinies... .PreviewBackgroundColor = idUIColors.idGrassGreen 150 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Rem ...ou un ensemble de valeurs RVB (de 0 à 255). Rem .PreviewBackgroundColor = Array(192, 192, 192) End With Utilisation des repères et des grilles Les repères et les grilles facilitent le positionnement des objets sur les pages de votre document. Définition des repères InDesign propose des repères pour vous aider à positionner les objets sur les pages de votre document. Exemple d’utilisation des repères : Rem Guides.vbs Rem VBScript InDesign CS2 Rem Créer un document, insérer des repères et définir les propriétés des repères. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add myPageWidth = myDocument.DocumentPreferences.PageWidth myPageHeight = myDocument.DocumentPreferences.PageHeight With myDocument.Pages.Item(1) Set myMarginPreferences = .MarginPreferences Rem Placer des repères sur les marges de la page. With .Guides.Add .Orientation = idHorizontalOrVertical.idVertical .Location = myMarginPreferences.Left End With With .Guides.Add .Orientation = idHorizontalOrVertical.idVertical .Location = (myPageWidth - myMarginPreferences.Right) End With With .Guides.Add .Orientation = idHorizontalOrVertical.idHorizontal .Location = myMarginPreferences.Top End With With .Guides.Add .Orientation = idHorizontalOrVertical.idHorizontal .Location = (myPageHeight - myMarginPreferences.Bottom) End With Rem Placer un repère vertical au centre de la page. With .Guides.Add .Orientation = idHorizontalOrVertical.idVertical .Location = (myPageWidth / 2) End With Rem Placer un repère horizontal au centre de la page. With .Guides.Add .Orientation = idHorizontalOrVertical.idHorizontal .Location = (myPageHeight / 2) End With End With Les repères horizontaux peuvent se limiter à une page donnée, ou s’étendre sur toutes les pages d’une planche. A l’aide d’un script InDesign, vous pouvez contrôler cette possibilité grâce à la propriété FitToPage (les repères verticaux ignorent cette propriété). Rem SpreadAndPageGuides.vbs Rem VBScript InDesign CS2 Rem Met en évidence la différence entre les repères de planche et les repères de page. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add myDocument.DocumentPreferences.FacingPages = True myDocument.DocumentPreferences.PagesPerDocument = 3 With myDocument.Spreads.Item(2) Rem Notez la différence entre ces deux repères sur les pages 2 et 3. With .Guides.Add .Orientation = idHorizontalOrVertical.idHorizontal .Location = "6p" .FitToPage = True Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 151 End With With .Guides.Add .Orientation = idHorizontalOrVertical.idHorizontal .Location = "9p" .FitToPage = False End With End With Vous pouvez utiliser un script pour modifier le calque, la couleur et la visibilité des repères, tout comme vous pouvez le faire à partir de l’interface utilisateur : Rem GuideOptions.vbs Rem VBScript InDesign CS2 Rem Indique comment définir les options de repères. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Créer un calque nommé "guide layer". Set myLayer = myDocument.Layers.Add myLayer.Name = "guide layer" Rem Ajouter une série de repères à la page 1. With myDocument.Pages.Item(1) Rem Créer un repère sur le calque créé précédemment. With .Guides.Add(myLayer) .Orientation = idHorizontalOrVertical.idHorizontal .Location = "12p" End With Rem Méthode alternative pour créer un repère sur un calque spécifique. With .Guides.Add() .ItemLayer = myLayer .Orientation = idHorizontalOrVertical.idHorizontal .Location = "14p" End With Rem Créer un repère verrouillé. With .Guides.Add() .ItemLayer = myLayer .Orientation = idHorizontalOrVertical.idHorizontal .Location = "16p" .Locked = True End With Rem Définir le seuil d’affichage d’un repère. With .Guides.Add() .ItemLayer = myLayer .Orientation = idHorizontalOrVertical.idHorizontal .Location = "18p" .ViewThreshold = 100 End With Rem Déterminer la couleur d’un repère à l’aide d’une constante de couleurs UI. With .Guides.Add() .ItemLayer = myLayer .Orientation = idHorizontalOrVertical.idHorizontal .Location = "18p" .GuideColor = idUIColors.idGray End With Rem Déterminer la couleur d’un repère à l’aide d’un ensemble de valeurs RVB. With .Guides.Add() .ItemLayer = myLayer .Orientation = idHorizontalOrVertical.idHorizontal .Location = "22p" .GuideColor = Array(192, 192, 192) End With End With Il est également possible de créer des repères à l’aide de la méthode CreateGuides des planches et des planches types : Rem CreateGuides.vbs Rem VBScript InDesign CS2 Rem Ajouter une série de repères à l’aide de la méthode de création de repères. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Paramètres (tous facultatifs) : row count, column count, row gutter (compte de ligne, compte de colonne, gouttière de ligne), Rem column gutter,guide color, fit margins, remove existing, layer (gouttière de colonne, 152 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts couleur de repère, marges ajustées, suppression, calque). Rem Notez que cette méthode de création de repères n’accepte pas de valeurs RVB Rem pour le paramètre de couleur de repère. myDocument.Spreads.Item(1).CreateGuides 4, 4, "1p", "1p", idUIColors.idGray, True, True, myDocument.Layers.Item(0) Configuration des préférences de grille Pour contrôler les propriétés du document et de la grille de ligne de base, définissez les propriétés de l’objet GridPreferences comme dans le script ci-dessous : Rem DocumentAndBaselineGrids.vbs Rem VBScript InDesign CS2 Rem Crée un document puis définit les préférences de la Rem grille de document et de la grille de ligne de base. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Définir les unités de mesure du document en points. myDocument.ViewPreferences.HorizontalMeasurementUnits = idMeasurementUnits.idPoints myDocument.ViewPreferences.VerticalMeasurementUnits = idMeasurementUnits.idPoints Rem Définir les préférences de grille. With myDocument.GridPreferences .BaselineStart = 56 .BaselineDivision = 14 .BaselineGridShown = True .HorizontalGridlineDivision = 14 .HorizontalGridSubdivision = 5 .VerticalGridlineDivision = 14 .VerticalGridSubdivision = 5 .DocumentGridShown = True End With Magnétisme des repères et des grilles La totalité des paramètres de magnétisme des grilles et des repères d’un document se trouve dans les propriétés des objets GuidePreferences et GridPreferences. Voici un exemple : Rem GuideAndGridPreferences.vbs Rem VBScript InDesign CS2 Rem Définit les préférences des repères et des grilles. Rem Suppose que vous disposez d’un document ouvert. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.ActiveDocument With myDocument.GuidePreferences .GuidesInBack = True .GuidesLocked = False .GuidesShown = True .GuidesSnapto = True End With With myDocument.GridPreferences .DocumentGridShown = False .DocumentGridSnapto = True Rem Magnétisme de la grille de ligne de base actif pour les objets lorsque Rem guidePreferences.guideSnapTo est défini sur true. .BaselineGridShown = True End With Modification des unités de mesure et de la règle Les exemples de scripts donnés jusqu’à présent faisaient appel à des chaînes de mesures, c’est à dire des chaînes forçant InDesign à utiliser une unité de mesure spécifique, « 8,5 p » par exemple, pour 8,5 pouces. Vous pourriez en effet utiliser un système de mesure différent lors de l’exécution du script. Pour déterminer le système de mesure d’un script, utilisez l’objet ViewPreferences du document. Rem ViewPreferences.vbs Rem VBScript InDesign CS2 Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 153 Rem Modifie les unités de mesure du document actif. Rem Suppose que vous disposez d’un document ouvert. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.ActiveDocument With myDocument.ViewPreferences Rem Les différentes unités de mesure possibles sont les suivantes : Rem * idMeasurementUnits.idPicas Rem * idMeasurementUnits.idPoints Rem * idMeasurementUnits.idInches Rem * idMeasurementUnits.idInchesDecimal Rem * idMeasurementUnits.idMillimeters Rem * idMeasurementUnits.idCentimeters Rem * idMeasurementUnits.idCiceros Rem * idMeasurementUnits.idCustom Rem Si vous configurez les unités de mesure verticales et horizontales Rem sur idMeasurementUnits.idCustom, vous pouvez également définir une Rem marque de graduation personnalisée (en points) à l’aide de : Rem .HorizontalCustomPoints = 15 Rem .VerticalCustomPoints = 15 Rem Définir les unités de mesure verticales et horizontales en points. .HorizontalMeasurementUnits = idMeasurementUnits.idPoints .VerticalMeasurementUnits = idMeasurementUnits.idPoints End With Si vous écrivez un script qui requiert un système de mesure particulier, vous pouvez modifier les unités de mesure au début du script, puis rétablir celles d’origine à la fin de celui-ci, comme dans l’exemple cidessous : Rem ResetMeasurementUnits.vbs Rem VBScript InDesign CS2 Rem Modifie, puis rétablit les unités de mesure du document actif. Rem Suppose que vous disposez d’un document ouvert. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.ActiveDocument With myDocument.ViewPreferences myOldXUnits = .HorizontalMeasurementUnits myOldYUnits = .VerticalMeasurementUnits .HorizontalMeasurementUnits = idMeasurementUnits.idPoints .VerticalMeasurementUnits = idMeasurementUnits.idPoints End With Rem A ce stade, vous pouvez exécuter une série quelconque d’actions de script dépendant des Rem unités de mesure que vous avez définies. A la fin du Rem script, rétablissez les unités de mesure à leur état d’origine. With myDocument.ViewPreferences .HorizontalMeasurementUnits = myOldXUnits .VerticalMeasurementUnits = myOldYUnits End With Définition et application des paramètres prédéfinis de document Les paramètres prédéfinis de documents InDesign vous permettent de stocker et d’appliquer des paramètres de configuration de document que vous utilisez souvent (format de page, marges, colonnes, et zones de fond perdu et de ligne-bloc). Lorsque vous créez un document, vous pouvez baser celui-ci sur un paramètre prédéfini de document. Création d’un paramètre prédéfini par copie de valeurs Pour créer un paramètre prédéfini de document à partir des paramètres d’un document existant, ouvrez le document dont vous souhaitez copier les propriétés de configuration pour votre paramètre prédéfini, puis exécutez le script suivant : Rem Rem Rem Rem Set DocumentPresetByExample.vbs VBScript InDesign CS2 Crée un paramètre prédéfini de document d’après la configuration du document actif. Suppose que vous disposez d’un document ouvert. myInDesign = CreateObject("InDesign.Application.CS2") 154 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts If myInDesign.Documents.Count > 0 Then Set myDocument = myInDesign.ActiveDocument Rem Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. Rem Désactiver la gestion normale des erreurs. Err.Clear On Error Resume Next Set myDocumentPreset = myInDesign.DocumentPresets.Item("myDocumentPreset") Rem Si le paramètre prédéfini de document n’existe pas, l’instruction ci-dessus Rem renvoie une erreur. Gérer l’erreur. If (Err.Number <> 0) Then Set myDocumentPreset = myInDesign.DocumentPresets.Add myDocumentPreset.Name = "myDocumentPreset" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Compléter les propriétés du paramètre prédéfini de document avec Rem les propriétés correspondantes du document actif. With myDocumentPreset Rem Notez que le script suivant applique les préférences de marges Rem du document ; pour appliquer les préférences de marges de la page active, Rem remplacez "myDocument" par "myInDesign.activeWindow.activePage" dans les Rem six lignes suivantes (en supposant que la fenêtre active est une fenêtre de mise en page). .Left = myDocument.MarginPreferences.Left .Right = myDocument.MarginPreferences.Right .Top = myDocument.MarginPreferences.Top .Bottom = myDocument.MarginPreferences.Bottom .ColumnCount = myDocument.MarginPreferences.ColumnCount .ColumnGutter = myDocument.MarginPreferences.ColumnGutter .DocumentBleedBottomOffset = myDocument.DocumentPreferences.DocumentBleedBottomOffset .DocumentBleedTopOffset = myDocument.DocumentPreferences.DocumentBleedTopOffset .DocumentBleedInsideOrLeftOffset = myDocument.DocumentPreferences.DocumentBleedInsideOrL eftOffset .DocumentBleedOutsideOrRightOffset = myDocument.DocumentPreferences.DocumentBleedOutside OrRightOffset .FacingPages = myDocument.DocumentPreferences.FacingPages .PageHeight = myDocument.DocumentPreferences.PageHeight .PageWidth = myDocument.DocumentPreferences.PageWidth .PageOrientation = myDocument.DocumentPreferences.PageOrientation .PagesPerDocument = myDocument.DocumentPreferences.PagesPerDocument .SlugBottomOffset = myDocument.DocumentPreferences.SlugBottomOffset .SlugTopOffset = myDocument.DocumentPreferences.SlugTopOffset .SlugInsideOrLeftOffset = myDocument.DocumentPreferences.SlugInsideOrLeftOffset .SlugRightOrOutsideOffset = myDocument.DocumentPreferences.SlugRightOrOutsideOffset End With End If Création d’un paramètre prédéfini à partir de nouvelles valeurs Pour créer un paramètre prédéfini de document avec des valeurs particulières, exécutez le script suivant : Rem DocumentPreset.vbs Rem VBScript InDesign CS2 Rem Crée un paramètre prédéfini de document. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Si le paramètre prédéfini de document "myDocumentPreset" n’existe pas, créez-le. Err.Clear On Error Resume Next Set myDocumentPreset = myInDesign.DocumentPresets.Item("myDocumentPreset") If Err.Number <> 0 Then Set myDocumentPreset = myInDesign.DocumentPresets.Add myDocumentPreset.Name = "myDocumentPreset" Err.Clear End If On Error GoTo 0 Rem Compléter les propriétés du paramètre prédéfini de document. With myDocumentPreset .PageHeight = "9i" .PageWidth = "7i" .Left = "4p" Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 155 .Right = "6p" .Top = "4p" .Bottom = "9p" .ColumnCount = 1 .DocumentBleedBottomOffset = "3p" .DocumentBleedTopOffset = "3p" .DocumentBleedInsideOrLeftOffset = "3p" .DocumentBleedOutsideOrRightOffset = "3p" .FacingPages = True .PageOrientation = idPageOrientation.idPortrait .PagesPerDocument = 1 .SlugBottomOffset = "18p" .SlugTopOffset = "3p" .SlugInsideOrLeftOffset = "3p" .SlugRightOrOutsideOffset = "3p" End With Utilisation d’un paramètre prédéfini Pour créer un document à l’aide d’un paramètre prédéfini de document, utilisez le paramètre DocumentPreset comme indiqué précédemment à la section « Création d’un document ». Configuration des planches types Après avoir défini le format de page, le fond perdu et la ligne-bloc du document de base, configurez les planches types du document : Rem MasterSpread.vbs Rem VBScript InDesign CS2 Rem Crée un document, puis indique comment configurer les propriétés de la planche type. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Configurer la première planche type dans un nouveau document. Set myDocument = myInDesign.Documents.Add Rem Configurer le document. With myDocument.DocumentPreferences .PageHeight = "11i" .PageWidth = "8.5i" .FacingPages = True .PageOrientation = idPageOrientation.idPortrait End With Rem Définir le point d’origine de la règle à la page d’origine. Ceci est très important ; Rem il est autrement plus difficile de placer Rem correctement les objets sur la page. myDocument.ViewPreferences.RulerOrigin = idRulerOrigin.idPageOrigin With myDocument.MasterSpreads.Item(1) Rem Configurer la page gauche (verso). With .Pages.Item(1) With .MarginPreferences .ColumnCount = 3 .ColumnGutter = "1p" .Bottom = "6p" Rem « left » (gauche) signifie intérieur, « right » (droite) extérieur. .Left = "6p" .Right = "4p" .Top = "4p" End With Rem Ajouter un simple pied de page avec un numéro de section et un numéro de page. With .TextFrames.Add .GeometricBounds = Array("61p", "4p", "62p", "45p") .InsertionPoints.Item(1).Contents = idSpecialCharacters.idSectionMarker .InsertionPoints.Item(1).Contents = idSpecialCharacters.idEmSpace .InsertionPoints.Item(1).Contents = idSpecialCharacters.idAutoPageNumber .Paragraphs.Item(1).Justification = idJustification.idLeftAlign End With End With Rem Configurer la page droite (recto). With .Pages.Item(2) With .MarginPreferences 156 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts .ColumnCount = 3 .ColumnGutter = "1p" .Bottom = "6p" Rem « left » (gauche) signifie intérieur, « right » (droite) extérieur. .Left = "6p" .Right = "4p" .Top = "4p" End With Rem Ajouter un simple pied de page avec un numéro de section et un numéro de page. With .TextFrames.Add .GeometricBounds = Array("61p", "6p", "62p", "47p") .InsertionPoints.Item(1).Contents = idSpecialCharacters.idAutoPageNumber .InsertionPoints.Item(1).Contents = idSpecialCharacters.idEmSpace .InsertionPoints.Item(1).Contents = idSpecialCharacters.idSectionMarker .Paragraphs.Item(1).Justification = idJustification.idRightAlign End With End With End With Pour appliquer une planche type à une page de document, utilisez la propriété AppliedMaster de la page du document : Rem ApplyMaster.vbs Rem VBScript InDesign CS2 Rem Applique une planche type à une page. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Suppose que le document actif utilise un gabarit nommé "B-Master" Rem et au moins deux pages. myInDesign.ActiveDocument.Pages.Item(2).AppliedMaster = myInDesign.ActiveDocument.MasterSpreads. Item("B-Master") Utilisez la même propriété pour appliquer une planche type à une page de planche type : Rem ApplyMasterToMaster.vbs Rem VBScript InDesign CS2 Rem Applique un gabarit à un gabarit. Rem Suppose que "A-Master" est le nom de la planche type par défaut. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add Rem Créer une planche type. Set myBMaster = myDocument.MasterSpreads.Add myBMaster.NamePrefix = "B" myBMaster.BaseName = "Master" Rem Appliquer la planche type "A" à la première page de la nouvelle planche type. myInDesign.ActiveDocument.MasterSpreads.Item("B-Master").Pages.Item(1).AppliedMaster = myInDesign.ActiveDocument.MasterSpreads.Item("A-Master") Définition des paramètres par défaut de mise en forme de texte Vous pouvez définir les attributs par défaut de mise en forme de texte pour votre application ou pour les documents individuels. Si vous définissez les paramètres par défaut de mise en forme de texte pour l’application, ceux-ci s’appliquent à tous les nouveaux documents ; les documents existants ne changent pas. Si vous définissez les paramètres par défaut de mise en forme de texte pour un document, ceux-ci s’appliquent à tout nouveau texte que vous insérez dans le document ; le texte existant ne change pas. Définition des paramètres de texte par défaut de l’application Pour définir les paramètres de mise en forme de texte par défaut pour votre application : Rem ApplicationTextDefaults.vbs Rem VBScript InDesign CS2 Rem Détermine les paramètres de texte par défaut de l’application, qui s’appliquent Rem par défaut à tous les nouveaux documents. Les documents existants ne changent pas. Set myInDesign = CreateObject("InDesign.Application.CS2") With myInDesign.TextDefaults .AlignToBaseline = True Rem Les paramètres suivants risquent d’engendrer Rem des erreurs si les polices, les styles de police et/ou Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript Rem les langues spécifiques ne sont pas installés sur votre système. Désactiver Rem la gestion des erreurs pour les ignorer toutes. On Error Resume Next .AppliedFont = myInDesign.Fonts.Item("Minion Pro") .FontStyle = "Normal" .AppliedLanguage = "English: USA" Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 .AutoLeading = 100 .BalanceRaggedLines = False .BaselineShift = 0 .Capitalization = idCapitalization.idNormal .Composer = "Adobe Paragraph Composer" .DesiredGlyphScaling = 100 .DesiredLetterSpacing = 0 .DesiredWordSpacing = 100 .DropCapCharacters = 0 Rem Si DropCapCharacters = 0, une erreur se produit Rem lorsque vous tentez de configurer la propriété DropCapLines. If .DropCapCharacters <> 0 Then .DropCapLines = 3 Rem Suppose que l’application utilise Rem un style de caractère par défaut nommé "myDropCap" .DropCapStyle = myInDesign.CharacterStyles.Item("myDropCap") End If .FillColor = myInDesign.Colors.Item("Black") .FillTint = 100 .FirstLineIndent = "14pt" .GradientFillAngle .GradientFillLength .GridAlignFirstLineOnly = False .HorizontalScale = 100 .HyphenateAfterFirst = 3 .HyphenateBeforeLast = 4 .HyphenateCapitalizedWords = False .HyphenateLadderLimit = 1 .HyphenateWordsLongerThan = 5 .Hyphenation = True .HyphenationZone = "3p" .HyphenWeight = 9 .Justification = idJustification.idLeftAlign .KeepAllLinesTogether = False .KeepLinesTogether = True .KeepFirstLines = 2 .KeepLastLines = 2 .KeepWithNext = 0 .KerningMethod = "Optical" .Leading = 14 .LeftIndent = 0 .Ligatures = True .MaximumGlyphScaling = 100 .MaximumLetterSpacing = 0 .MaximumWordSpacing = 160 .MinimumGlyphScaling = 100 .MinimumLetterSpacing = 0 .MinimumWordSpacing = 80 .NoBreak = False .OTFContextualAlternate = True .OTFDiscretionaryLigature = True .OTFFigureStyle = idOTFFigureStyle.idProportionalOldstyle .OTFFraction = True .OTFHistorical = True .OTFOrdinal = False .OTFSlashedZero = True .OTFSwash = False .OTFTitling = False .OverprintFill = False .OverprintStroke = False .PointSize = 11 .Position = idPosition.idNormal .RightIndent = 0 .RuleAbove = False Rem Si la valeur false est attribuée au paramètre de filet au-dessus, 157 158 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Rem une erreur se produit lorsque vous essayez de configurer certaines propriétés de celuici. Bien que Rem le paramètre de filet au-dessus soit défini sur false, nous avons inclus les propriétés Rem pour fournir un exemple plus complet. If .RuleAbove = True Then .RuleAboveColor = myInDesign.Colors.Item("Black") .RuleAboveGapColor = myInDesign.Swatches.Item("None") .RuleAboveGapOverprint = False .RuleAboveGapTint = 100 .RuleAboveLeftIndent = 0 .RuleAboveLineWeight = 0,25 .RuleAboveOffset = 14 .RuleAboveOverprint = False .RuleAboveRightIndent = 0 .RuleAboveTint = 100 .RuleAboveType = myInDesign.StrokeStyles.Item("Solid") .RuleAboveWidth = idRuleWidth.idColumnWidth End If .RuleBelow = False Rem Si la valeur false est attribuée au paramètre de filet au dessous, Rem une erreur se produit lorsque vous essayez de configurer certaines propriétés de celuici. Bien que Rem le paramètre de filet au-dessous soit défini sur false, nous avons inclus les propriétés Rem pour fournir un exemple plus complet. If .RuleBelow = True Then .RuleBelowColor = myInDesign.Colors.Item("Black") .RuleBelowGapColor = myInDesign.Swatches.Item("None") .RuleBelowGapOverPrint = False .RuleBelowGapTint = 100 .RuleBelowLeftIndent = 0 .RuleBelowLineWeight = 0,25 .RuleBelowOffset = 0 .RuleBelowOverPrint = False .RuleBelowRightIndent = 0 .RuleBelowTint = 100 .RuleBelowType = myInDesign.StrokeStyles.Item("Solid") .RuleBelowWidth = idRuleWidth.idColumnWidth End If .SingleWordJustification = idSingleWordJustification.idLeftAlign .Skew = 0 .SpaceAfter = 0 .SpaceBefore = 0 .StartParagraph = idStartParagraph.idAnywhere .StrikeThru = False Rem Si la valeur false est attribuée au paramètre de texte barré, une erreur se produit Rem lorsque vous essayez de configurer certaines propriétés de celui-ci. Bien que Rem le paramètre de texte barré soit défini sur false, nous avons inclus les propriétés Rem pour fournir un exemple plus complet. If .StrikeThru = True Then .StrikeThroughColor = myInDesign.Colors.Item("Black") .StrikeThroughGapColor = myInDesign.Swatches.Item("None") .StrikeThroughGapOverprint = False .StrikeThroughGapTint = 100 .StrikeThroughOffset = 3 .StrikeThroughOverprint = False .StrikeThroughTint = 100 .StrikeThroughType = myInDesign.StrokeStyles.Item("Solid") .StrikeThroughWeight = 0,25 End If .StrokeColor = myInDesign.Swatches.Item("None") .StrokeTint = 100 .StrokeWeight = 0 .Tracking = 0 .Underline = False Rem Si la valeur false est attribuée au paramètre de soulignement, une erreur se produit Rem lorsque vous essayez de configurer certaines propriétés de celui-ci. Bien que Rem le paramètre de soulignement soit défini sur false, nous avons inclus les propriétés Rem pour fournir un exemple plus complet. If .Underline = True Then .UnderlineColor = myInDesign.Colors.Item("Black") .UnderlineGapColor = myInDesign.Swatches.Item("None") .UnderlineGapOverprint = False .UnderlineGapTint = 100 Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 159 .UnderlineOffset = 3 .UnderlineOverprint = False .UnderlineTint = 100 .UnderlineType = myInDesign.StrokeStyles.Item("Solid") .UnderlineWeight = 0,25 End If .VerticalScale = 100 End With Configuration des paramètres par défaut du document actif Pour définir les paramètres de texte par défaut pour le document actif, remplacez la ligne suivante dans l’exemple donné précédemment : with myInDesign.TextDefaults par : with myInDesign.ActiveDocument.TextDefaults Utilisation des paramètres de texte par défaut Pour appliquer un style de caractère ou de paragraphe par défaut à du texte dans un document, utilisez le script suivant : Rem SetTextDefaultToStyle.vbs Rem VBScript InDesign CS2 Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Suppose l’existence d’un style de paragraphe nommé "BodyText" dans le document actif. myInDesign.ActiveDocument.TextDefaults.AppliedParagraphStyle = myInDesign.ActiveDocument. ParagraphStyles.Item("BodyText") Ajout de métadonnées XMP Les métadonnées sont des informations qui permettent de décrire le contenu, l’origine ainsi que d’autres attributs d’un fichier. Dans l’interface utilisateur d’InDesign, vous pouvez saisir, modifier ou afficher des métadonnées grâce à la boîte de dialogue Informations (Fichier > Informations). Ces métadonnées comprennent l’auteur, l’état du copyright et les dates de création et de modification du document, ainsi que d’autres informations. Toutes ces données sont stockées au format XMP (Adobe Extensible Metadata Platform), une norme ouverte qui permet d’incorporer des métadonnées dans un document. Pour plus de détails sur le format XMP, consultez les spécifications XMP, à l’adresse suivante : http://partners.adobe.com/asn/developer/pdf/MetadataFramework.pdf. Vous pouvez également ajouter des informations XMP à un document en utilisant un script InDesign. Toutes les propriétés XMP d’un document se trouvent dans l’objet metadataPreferences (préférences des métadonnées) du document. L’exemple de script suivant permet de compléter les données XMP d’un document : Cet exemple montre également que les informations XMP sont extensibles. Si vous devez joindre des métadonnées à un document mais que celles-ci ne rentrent pas dans l’une des catégories de l’objet préférences des métadonnées, vous pouvez créer votre propre conteneur de métadonnées (un e-mail, dans cet exemple). Rem MetadataExample.vbs Rem MetadataExample.vbs Rem VBScript InDesign CS2 Rem Ajoute des métadonnées à un document exemple. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myDocument = myInDesign.Documents.Add With myDocument.MetadataPreferences .Author = "Olav Martin Kvern" .CopyrightInfoURL = "http://www.adobe.com" 160 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts .CopyrightNotice = "This document is copyrighted." .CopyrightStatus = idCopyrightStatus.idYes .Description = "Example of xmp metadata scripting in InDesign CS" .DocumentTitle = "XMP Example" .JobName = "XMP_Example_2004" .Keywords = Array("animal", "mineral", "vegetable") Rem L’objet préférences des métadonnées comprend également les informations relatives à la lecture seule, Rem au créateur, au format, aux dates de création et de modification ainsi qu’aux propriétés serverURL Rem entrées et conservées automatiquement par InDesign. Rem Créer un conteneur XMP personnalisé, "email" .CreateContainerItem "http://ns.adobe.com/xap/1.0/", "email" .SetProperty "http://ns.adobe.com/xap/1.0/", "email/*[1]", "[email protected]" End With Création d’un modèle de document L’exemple suivant permet de créer un document, de déterminer les zones de fond perdu et de ligne-bloc, d’ajouter des informations aux métadonnées XMP du document, de configurer des gabarits, d’insérer des pieds de pages ainsi que des informations sur le travail dans un tableau à l’intérieur de la zone de lignebloc : Rem DocumentTemplate.vbs Rem VBScript InDesign CS2 Rem Crée un modèle de document, comprenant des gabarits, des calques, Rem une couleur, des styles de paragraphe et de caractère, des repères et des informations XMP. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Définir en points les valeurs par défaut des unités de mesure de l’application. myInDesign.ViewPreferences.HorizontalMeasurementUnits = idMeasurementUnits.idPoints myInDesign.ViewPreferences.VerticalMeasurementUnits = idMeasurementUnits.idPoints Rem Définir les préférences de marges par défaut de l’application. With myInDesign.MarginPreferences Rem Enregistrer les préférences de marges par défaut actuelles de l’application. myY1 = .Top myX1 = .Left myY2 = .Bottom myX2 = .Right Rem Définir les préférences de marges par défaut de l’application. Rem La grille de ligne de base du document est définie sur 14 points, et Rem toutes les marges définies par incréments de 14 points. .Top = 14 * 4 .Left = 14 * 4 .Bottom = 74 .Right = 14 * 5 End With Rem Créer un document. Set myDocument = myInDesign.Documents.Add myDocument.DocumentPreferences.PageWidth = "7i" myDocument.DocumentPreferences.PageHeight = "9i" myDocument.DocumentPreferences.PageOrientation = idPageOrientation.idPortrait Rem A ce stade, vous pouvez rétablir les marges par défaut de l’application Rem à leur état d’origine. With myInDesign.MarginPreferences .Top = myY1 .Left = myX1 .Bottom = myY2 .Right = myX2 End With Rem Configurer les zones de fond perdu et de ligne-bloc. With myDocument.DocumentPreferences Rem Fond perdu .DocumentBleedBottomOffset = "3p" .DocumentBleedTopOffset = "3p" .DocumentBleedInsideOrLeftOffset = "3p" .DocumentBleedOutsideOrRightOffset = "3p" Rem Ligne-bloc .SlugBottomOffset = "18p" .SlugTopOffset = "3p" .SlugInsideOrLeftOffset = "3p" Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript .SlugRightOrOutsideOffset = "3p" End With Rem Définir une couleur. Err.Clear On Error Resume Next Rem Si la couleur n’existe pas, InDesign renvoie une erreur. Set myColor = myDocument.Colors.Item("PageNumberRed") If Err.Number <> 0 Then Set myColor = myDocument.Colors.Add myColor.Name = "PageNumberRed" myColor.colorModel = idColorModel.idProcess myColor.ColorValue = Array(20, 100, 80, 10) Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Indiquer ensuite des styles par défaut. Rem Créer un style de caractère pour les numéros de pages. Err.Clear On Error Resume Next Rem Si le style de caractère n’existe pas, InDesign renvoie une erreur. Set myCharacterStyle = myDocument.CharacterStyles.Item("page_number") If Err.Number <> 0 Then Set myCharacterStyle = myDocument.CharacterStyles.Add myCharacterStyle.Name = "page_number" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 myDocument.CharacterStyles.Item("page_number").FillColor = myDocument.Colors. Item("PageNumberRed") Rem Créer une paire de styles de paragraphe pour le texte de pied de page. Rem Ces styles appliquent une mise en page élémentaire. Err.Clear On Error Resume Next Rem Si le style de paragraphe n’existe pas, InDesign renvoie une erreur. Set myParagraphStyle = myDocument.ParagraphStyles.Item("footer_left") If Err.Number <> 0 Then Set myParagraphStyle = myDocument.ParagraphStyles.Add myParagraphStyle.Name = "footer_left" myParagraphStyle.PointSize = 11 myParagraphStyle.Leading = 14 Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Err.Clear On Error Resume Next Rem Si le style de paragraphe n’existe pas, InDesign renvoie une erreur. Set myParagraphStyle = myDocument.ParagraphStyles.Item("footer_right") If Err.Number <> 0 Then Set myParagraphStyle = myDocument.ParagraphStyles.Add myParagraphStyle.Name = "footer_right" myParagraphStyle.BasedOn = myDocument.ParagraphStyles.Item("footer_left") myParagraphStyle.Justification = idJustification.idRightAlign myParagraphStyle.PointSize = 11 myParagraphStyle.Leading = 14 Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Créer un calque pour les repères. Err.Clear On Error Resume Next Set myLayer = myDocument.Layers.Item("GuideLayer") If Err.Number <> 0 Then Set myLayer = myDocument.Layers.Add myLayer.Name = "GuideLayer" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Créer un calque pour les éléments de pied de page. 161 162 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Err.Clear On Error Resume Next Set myLayer = myDocument.Layers.Item("Footer") If Err.Number <> 0 Then Set myLayer = myDocument.Layers.Add myLayer.Name = "Footer" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Créer un calque pour les éléments de ligne-bloc. Err.Clear On Error Resume Next Set myLayer = myDocument.Layers.Item("Slug") If Err.Number <> 0 Then Set myLayer = myDocument.Layers.Add myLayer.Name = "Slug" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 Rem Créer un calque pour le corps de texte. Err.Clear On Error Resume Next Set myLayer = myDocument.Layers.Item("BodyText") If Err.Number <> 0 Then Set myLayer = myDocument.Layers.Add myLayer.Name = "BodyText" Err.Clear End If Rem Rétablir la gestion normale des erreurs. On Error GoTo 0 With myDocument.ViewPreferences .RulerOrigin = idRulerOrigin.idPageOrigin .HorizontalMeasurementUnits = idMeasurementUnits.idPoints .VerticalMeasurementUnits = idMeasurementUnits.idPoints End With Rem Grille de ligne de base du document et grille du document With myDocument.GridPreferences .BaselineStart = 56 .BaselineDivision = 14 .BaselineGridShown = False .HorizontalGridlineDivision = 14 .HorizontalGridSubdivision = 5 .VerticalGridlineDivision = 14 .VerticalGridSubdivision = 5 .DocumentGridShown = False End With Rem Informations XMP du document. With myDocument.MetadataPreferences .Author = "Olav Martin Kvern" .CopyrightInfoURL = "http:rem www.adobe.com" .CopyrightNotice = "This document is not copyrighted." .CopyrightStatus = idCopyrightStatus.idNo .Description = "Example 7 x 9 book layout" .DocumentTitle = "Example" .JobName = "7 x 9 book layout template" .Keywords = Array("7 x 9", "book", "template") .CreateContainerItem "http://ns.adobe.com/xap/1.0/", "email" .SetProperty "http://ns.adobe.com/xap/1.0/", "email/*[1]", "[email protected]" End With Rem Configurer la planche type. With myDocument.MasterSpreads.Item(1) With .Pages.Item(1) Rem La gauche et la droite sont inversées pour les pages de gauche (devenant « intérieur » et « extérieur » ; Rem valable également dans l’interface utilisateur InDesign). myTopMargin = .MarginPreferences.Top myBottomMargin = myDocument.DocumentPreferences.PageHeight - .MarginPreferences.Bottom myRightMargin = myDocument.DocumentPreferences.PageWidth - .MarginPreferences.Left myLeftMargin = .MarginPreferences.Right With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 163 .Orientation = idHorizontalOrVertical.idVertical .Location = myLeftMargin End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idVertical .Location = myRightMargin End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idHorizontal .Location = myTopMargin .FitToPage = False End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idHorizontal .Location = myBottomMargin .FitToPage = False End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idHorizontal .Location = myBottomMargin + 14 .FitToPage = False End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idHorizontal .Location = myBottomMargin + 28 .FitToPage = False End With Set myLeftFooter = .TextFrames.Add myLeftFooter.ItemLayer = myDocument.Layers.Item("Footer") myLeftFooter.GeometricBounds = Array(myBottomMargin + 14, .MarginPreferences.Right, myBottomMargin + 28, myRightMargin) myLeftFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idSectionMarker myLeftFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idEmSpace myLeftFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idAutoPageNumber myLeftFooter.ParentStory.Characters.Item(1).AppliedCharacterStyle = myDocument. CharacterStyles.Item("page_number") myLeftFooter.ParentStory.Paragraphs.Item(1).ApplyStyle myDocument.ParagraphStyles. Item("footer_left"), False Rem Informations sur la ligne-bloc. myDate = Date With myDocument.MetadataPreferences myString = "Author:" & vbTab & .Author & vbTab & "Description:" & vbTab & .Description & vbCrLf & _ "Creation Date:" & vbTab & myDate & vbTab & "Email Contact" & vbTab & .GetProperty("http://ns.adobe.com/xap/1.0/", "email/*[1]") End With Set myLeftSlug = .TextFrames.Add myLeftSlug.ItemLayer = myDocument.Layers.Item("Slug") myLeftSlug.GeometricBounds = Array(myDocument.DocumentPreferences.PageHeight + 36, .MarginPreferences.Right, myDocument.DocumentPreferences.PageHeight + 144, myRightMargin) myLeftSlug.Contents = myString myLeftSlug.ParentStory.Texts.Item(1).ConvertToTable Rem Bloc de texte type du corps de texte. Set myLeftFrame = .TextFrames.Add myLeftFrame.ItemLayer = myDocument.Layers.Item("BodyText") myLeftFrame.GeometricBounds = Array(.MarginPreferences.Top, .MarginPreferences.Right, myBottomMargin, myRightMargin) End With With .Pages.Item(2) myTopMargin = .MarginPreferences.Top myBottomMargin = myDocument.DocumentPreferences.PageHeight - .MarginPreferences.Bottom myRightMargin = myDocument.DocumentPreferences.PageWidth - .MarginPreferences.Right myLeftMargin = .MarginPreferences.Left With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") 164 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts .Orientation = idHorizontalOrVertical.idVertical .Location = myLeftMargin End With With .Guides.Add .ItemLayer = myDocument.Layers.Item("GuideLayer") .Orientation = idHorizontalOrVertical.idVertical .Location = myRightMargin End With Set myRightFooter = .TextFrames.Add myRightFooter.ItemLayer = myDocument.Layers.Item("Footer") myRightFooter.GeometricBounds = Array(myBottomMargin + 14, .MarginPreferences.Left, myBottomMargin + 28, myRightMargin) myRightFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idAutoPageNumber myRightFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idEmSpace myRightFooter.ParentStory.InsertionPoints.Item(1).Contents = idSpecialCharacters. idSectionMarker myRightFooter.ParentStory.Characters.Item(-1).AppliedCharacterStyle = myDocument. CharacterStyles.Item("page_number") myRightFooter.ParentStory.Paragraphs.Item(1).ApplyStyle myDocument.ParagraphStyles. Item("footer_right"), False Rem Informations sur la ligne-bloc. Set myRightSlug = .TextFrames.Add myRightSlug.ItemLayer = myDocument.Layers.Item("Slug") myRightSlug.GeometricBounds = Array(myDocument.DocumentPreferences.PageHeight + 36, myLeftMargin, myDocument.DocumentPreferences.PageHeight + 144, myRightMargin) myRightSlug.Contents = myString myRightSlug.ParentStory.Texts.Item(1).ConvertToTable Rem Bloc de texte type du corps de texte. Set myRightFrame = .TextFrames.Add myRightFrame.ItemLayer = myDocument.Layers.Item("BodyText") myRightFrame.GeometricBounds = Array(.MarginPreferences.Top, .MarginPreferences.Left, myBottomMargin, myRightMargin) myRightFrame.PreviousTextFrame = myLeftFrame End With End With Rem Insérer un texte de marque de section ; celui-ci apparaîtra dans le pied de page. myDocument.Sections.Item(1).Marker = "Section 1" Rem Lorsque vous liez les blocs de texte du gabarit, l’un d’entre eux Rem est parfois sélectionné. Désélectionnez-le. myInDesign.Select idNothingEnum.idNothing Impression d’un document Le script suivant permet d’imprimer le document actif à l’aide des préférences d’impression actuelles : Rem PrintDocument.vbs Rem VBScript InDesign CS2 Rem Imprime le document actif. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem La méthode PrintOut peut accepter deux paramètres facultatifs : Rem PrintDialog, s’il est activé, pour afficher la boîte de dialogue d’impression. Rem Using, pour indiquer l’impression prédéfinie à utiliser. L’instruction suivante Rem permet d’imprimer le document à l’aide des paramètres par défaut et Rem sans afficher la boîte de dialogue d’impression. myInDesign.ActiveDocument.PrintOut False Impression à l’aide de groupes de pages Pour définir un groupe de pages à imprimer, configurez les propriétés PageRange dans l’objet PrintPreferences du document avant d’imprimer : Rem Rem Rem Set Rem Set PrintPageRange.vbs VBScript InDesign CS2 Imprime un groupe de pages à partir du document actif. myInDesign = CreateObject("InDesign.Application.CS2") Créer un document exemple. myDocument = myInDesign.Documents.Add Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 165 myDocument.ViewPreferences.RulerOrigin = idRulerOrigin.idPageOrigin myPageHeight = myDocument.DocumentPreferences.PageHeight myPageWidth = myDocument.DocumentPreferences.PageWidth myDocument.DocumentPreferences.PagesPerDocument = 10 Set myMasterSpread = myDocument.MasterSpreads.Item(1) Set myTextFrame = myMasterSpread.Pages.Item(1).TextFrames.Add myTextFrame.GeometricBounds = Array(0, 0, myPageHeight, myPageWidth) myTextFrame.Contents = idSpecialCharacters.idAutoPageNumber myTextFrame.Paragraphs.Item(1).Justification = idJustification.idCenterAlign myTextFrame.Paragraphs.Item(1).PointSize = 72 myTextFrame.TextFramePreferences.VerticalJustification = idVerticalJustification.idCenterAlign Set myTextFrame = myMasterSpread.Pages.Item(2).TextFrames.Add myTextFrame.GeometricBounds = Array(0, 0, myPageHeight, myPageWidth) myTextFrame.Contents = idSpecialCharacters.idAutoPageNumber myTextFrame.Paragraphs.Item(1).Justification = idJustification.idCenterAlign myTextFrame.Paragraphs.Item(1).PointSize = 72 myTextFrame.TextFramePreferences.VerticalJustification = idVerticalJustification.idCenterAlign For myCounter = 1 To myDocument.Pages.Count myDocument.Pages.Item(myCounter).AppliedMaster = myDocument.MasterSpreads.Item("A-Master") Next Rem Fin de la configuration du document exemple. Rem Le groupe de pages peut être constitué de idPageRange.idAllPages (toutes les pages) ou d’une chaîne de groupe de pages. Rem Un numéro de page saisi dans le groupe de pages doit correspondre à un Rem nom de page dans le document (et non à l’indice de page, par exemple). Si le nom de page n’est Rem pas trouvé, InDesign affiche un message d’erreur. myInDesign.ActiveDocument.PrintPreferences.PageRange = "1-3, 6, 9" myInDesign.ActiveDocument.PrintOut False Configuration des préférences d’impression L’objet PrintPreferences comprend des propriétés correspondant aux options des volets de la boîte de dialogue d’impression. Cet exemple de script indique comment définir les préférences d’impression à l’aide d’un script. Rem PrintPreferences.vbs Rem VBScript InDesign CS2 Rem Définit les préférences d’impression du document actif. Set myInDesign = CreateObject("InDesign.Application.CS2") With myInDesign.ActiveDocument.PrintPreferences Rem Propriétés correspondant aux commandes du volet Général de la boîte de dialogue d’impression. Rem ActivePrinterPreset est ignoré dans le présent exemple ; spécifiez vos préférences d’impression. Rem L’imprimante peut être soit une chaîne (le nom de l’imprimante), soit idPrinter. idPostscriptFile. .Printer = "AGFA-SelectSet 5000SF v2013.108" Rem Si la propriété de l’imprimante correspond au nom d’une imprimante, alors la propriété du fichier ppd Rem est verrouillée (entraînant un message d’erreur si vous essayez de la configurer). Rem ppd = "AGFA-SelectSet5000SF" Rem Si la propriété de l’imprimante indique un fichier Postscript, la propriété Rem la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. .Copies = 1 Rem Si la propriété de l’imprimante indique un fichier Printer.postscript, ou si Rem l’imprimante sélectionnée ne prend pas en charge l’assemblage, alors Rem la propriété d’assemblage n’est pas disponible. Une erreur se produira si vous essayez de la configurer. Rem collating = false .ReverseOrder = False Rem Le groupe de pages peut être constitué de toutes les pages ou d’une chaîne de groupe de pages. .PageRange = idPageRange.idAllPages .PrintSpreads = False .PrintMasterPages = False Rem Si la propriété de l’imprimante indique un fichier Printer.postScript, alors Rem la propriété du fichier d’impression comprend le chemin du fichier de sortie. Rem printFile = "/c/test.ps" .Sequence = idSequences.idAll 166 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Rem Si le recouvrement est configuré sur idTrapping.idApplicationBuiltIn ou idTrapping. idAdobeInRIP, Rem une erreur se produira si vous configurez les propriétés suivantes : If (.ColorOutput = idColorOutputModes.idInRIPSeparations) Or _ (.ColorOutput = idColorOutputModes.idSeparations) Then If .Trapping = idTrapping.idOff Then .PrintBlankPages = False .PrintGuidesGrids = False .PrintNonprinting = False End If End If Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Format de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------.PaperSize = idPaperSizes.idCustom Rem La largeur et la hauteur de page sont ignorées si le format du papier n’est pas personnalisé. Rem .PaperHeight = 1200 Rem .PaperWidth = 1200 .PrintPageOrientation = idPrintPageOrientation.idPortrait .PagePosition = idPagePositions.idCentered .PaperGap = 0 .PaperOffset = 0 .PaperTransverse = False .ScaleHeight = 100 .ScaleWidth = 100 .ScaleMode = idScaleModes.idScaleWidthHeight .ScaleProportional = True Rem Si le recouvrement est configuré sur idTrapping.idApplicationBuiltIn ou idTrapping. idAdobeInRIP, Rem une erreur se produira si vous configurez les propriétés suivantes : If (.ColorOutput = idColorOutputModes.idInRIPSeparations) Or _ (.ColorOutput = idColorOutputModes.idSeparations) Then If .Trapping = idTrapping.idOff Then .TextAsBlack = False .Thumbnails = False Rem Les propriétés suivantes ne sont pas nécessaires car la valeur false est attribuée aux vignettes : Rem thumbnailsPerPage = 4 .Tile = False Rem Les propriétés suivantes ne sont pas nécessaires car la valeur false est attribuée à la mosaïque : Rem .TilingOverlap = 12 Rem .TilingType = TilingTypes.auto End If End If Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Repères et fonds perdus de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------Rem Attribuer la valeur true aux propriétés suivantes pour imprimer tous les repères d’impression. Rem allPrinterMarks = true .UseDocumentBleedToPrint = False Rem Si l’utilisation du fond perdu pour l’impression est désactivée, alors la configuration de l’une des propriétés de fond perdu Rem entraînera une erreur. Rem Extraire les valeurs du fond perdu du document et les augmenter. .BleedBottom = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedBottomOffset + 3 .BleedTop = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedTopOffset + 3 .BleedInside = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedInsideOrLeftOffset + 3 .BleedOutside = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedOutsideOrRightOff set + 3 Rem Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. If ((.BleedBottom = 0) And (.BleedTop = 0) And (.BleedInside = 0) And (.BleedOutside = 0)) Then .BleedMarks = True Else .BleedMarks = False End If Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 167 .ColorBars = True .CropMarks = True .IncludeSlugToPrint = False .MarkLineWeight = idMarkLineWeight.idP125pt .MarkOffset = 6 Rem .MarkType = MarkTypes.default .PageInformationMarks = True .RegistrationMarks = True Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Sortie de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------.Negative = True .ColorOutput = idColorOutputModes.idSeparations Rem Remarquez le « i » minuscule dans « Builtin ». .Trapping = idTrapping.idApplicationBuiltin .Screening = "175 lpi/2400 dpi" .Flip = idFlip.idNone Rem Les options suivantes ne peuvent s’appliquer que si le recouvrement est configuré sur Rem idTrapping.idAdobeInRIP. If .Trapping = idTrapping.idAdobeInRIP Then .PrintBlack = True .PrintCyan = True .PrintMagenta = True .PrintYellow = True End If Rem Ne modifiez que l’angle de projection de l’encre et la fréquence si vous souhaitez remplacer Rem le tramage par celui spécifié par la propriété de tramage. Rem .BlackAngle = 45 Rem .BlackFrequency = 175 Rem .CyanAngle = 15 Rem .CyanFrequency = 175 Rem .MagentaAngle = 75 Rem .MagentaFreqency = 175 Rem .YellowAngle = 0 Rem .YellowFrequency = 175 Rem Les propriétés suivantes ne sont pas nécessaires (car la sortie en couleurs est définie sur séparations). Rem .CompositeAngle = 45 Rem .CompositeFrequency = 175 Rem .SimulateOverprint = false Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Graphiques de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------.SendImageData = idImageDataTypes.idAllImageData .FontDownloading = idFontDownloading.idComplete Err.Clear On Error Resume Next .DownloadPPDFonts = True .DataFormat = idDataFormat.idBinary .PostScriptLevel = idPostScriptLevels.idLevel3 If Err.Number <> 0 Then Err.Clear End If On Error GoTo 0 Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Gestion des couleurs de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------Rem Si la valeur false est attribuée aux propriétés d’utilisation de gestion des couleurs dans les options de couleur myInDesign.ColorSettings, Rem une erreur se produira si vous essayez de configurer les propriétés suivantes : Err.Clear On Error Resume Next .SourceSpace = SourceSpaces.useDocument .Intent = RenderingIntent.useColorSettings .CRD = ColorRenderingDictionary.useDocument .Profile = Profile.postscriptCMS If Err.Number <> 0 Then Err.Clear End If 168 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts On Error GoTo 0 Rem -------------------------------------------------------------------------------Rem Propriétés correspondant aux commandes du volet Avancé de la boîte de dialogue d’impression. Rem -------------------------------------------------------------------------------.OPIImageReplacement = False .OmitBitmaps = False .OmitEPS = False .OmitPDF = False Rem L’instruction suivante suppose l’existence d’un aplatissement prédéfini nommé "high quality flattener". Err.Clear On Error Resume Next .FlattenerPresetName = "high quality flattener" If Err.Number <> 0 Then Err.Clear End If On Error GoTo 0 .IgnoreSpreadOverrides = False End With Création d’impressions prédéfinies à partir des préférences d’impression Pour créer une impression prédéfinie à partir des préférences d’impression d’un document : Rem CreatePrinterPreset.vbs Rem VBScript InDesign CS2 Rem Crée une impression prédéfinie d’après les paramètres d’impression du document actif. Rem Suppose que vous disposez d’un document ouvert. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Si le paramètre prédéfini n’existe pas, créez-le ; Rem sinon, renseignez les propriétés du paramètre prédéfini existant. Err.Clear On Error Resume Next Set myPreset = myInDesign.PrinterPresets.Item("myPreset") If Err.Number <> 0 Then Set myPreset = myInDesign.PrinterPresets.Add myPreset.Name = "myPreset" Err.Clear End If On Error GoTo 0 With myInDesign.ActiveDocument.PrintPreferences Rem Le nombre de propriétés d’impression découlant d’autres propriétés d’impression, Rem les lignes relatives à la configuration d’une propriété sont encadrées des instructions Rem on error resume next...on error goto 0 de manière à faciliter l’appréhension de la configuration des impressions prédéfinies, Rem mais vous devrez les supprimer pour détecter des erreurs dans votre script si vous utilisez cet exemple Rem comme modèle pour vos scripts. Err.Clear On Error Resume Next myPreset.Printer = .Printer myPreset.ColorOutput = .ColorOutput myPreset.PPD = .PPD myPreset.Copies = .Copies myPreset.Collating = .Collating myPreset.ReverseOrder = .ReverseOrder myPreset.PageRange = .PageRange myPreset.PrintSpreads = .PrintSpreads myPreset.PrintMasterPages = .PrintMasterPages myPreset.PrintFile = .PrintFile myPreset.Sequence = .Sequence myPreset.PrintBlankPages = .PrintBlankPages myPreset.PrintGuidesGrids = .PrintGuidesGrids myPreset.PrintNonprinting = .PrintNonprinting myPreset.PaperSize = .PaperSize myPreset.PaperHeight = .PaperHeight myPreset.PaperWidth = .PaperWidth myPreset.PrintPageOrientation = .PrintPageOrientation myPreset.PagePosition = .PagePosition myPreset.PaperGap = .PaperGap Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript myPreset.PaperOffset = .PaperOffset myPreset.PaperTransverse = .PaperTransverse myPreset.ScaleHeight = .ScaleHeight myPreset.ScaleWidth = .ScaleWidth myPreset.ScaleMode = .ScaleMode myPreset.ScaleProportional = .ScaleProportional myPreset.TextAsBlack = .TextAsBlack myPreset.Thumbnails = .Thumbnails myPreset.ThumbnailsPerPage = .ThumbnailsPerPage myPreset.Tile = .Tile myPreset.TilingType = .TilingType myPreset.TilingOverlap = .TilingOverlap myPreset.AllPrinterMarks = .AllPrinterMarks myPreset.UseDocumentBleedToPrint = .UseDocumentBleedToPrint myPreset.BleedBottom = .BleedBottom myPreset.BleedTop = .BleedTop myPreset.BleedInside = .BleedInside myPreset.BleedOutside = .BleedOutside myPreset.BleedMarks = .BleedMarks myPreset.ColorBars = .ColorBars myPreset.CropMarks = .CropMarks myPreset.IncludeSlugToPrint = .IncludeSlugToPrint myPreset.MarkLineWeight = .MarkLineWeight myPreset.MarkOffset = .MarkOffset myPreset.MarkType = .MarkType myPreset.PageInformationMarks = .PageInformationMarks myPreset.RegistrationMarks = .RegistrationMarks myPreset.Negative = .Negative myPreset.Trapping = .Trapping myPreset.Screening = .Screening myPreset.Flip = .Flip myPreset.PrintBlack = .PrintBlack myPreset.PrintCyan = .PrintCyan myPreset.PrintMagenta = .PrintMagenta myPreset.PrintYellow = .PrintYellow myPreset.BlackAngle = .BlackAngle myPreset.BlackFrequency = .BlackFrequency myPreset.CyanAngle = .CyanAngle myPreset.CyanFrequency = .CyanFrequency myPreset.MagentaAngle = .MagentaAngle myPreset.magentaFreqency = .magentaFreqency myPreset.YellowAngle = .YellowAngle myPreset.YellowFrequency = .YellowFrequency myPreset.CompositeAngle = .CompositeAngle myPreset.CompositeFrequency = .CompositeFrequency myPreset.SimulateOverprint = .SimulateOverprint myPreset.SendImageData = .SendImageData myPreset.FontDownloading = .FontDownloading myPreset.DownloadPPDFonts = .DownloadPPDFonts myPreset.DataFormat = .DataFormat myPreset.PostScriptLevel = .PostScriptLevel myPreset.SourceSpace = .SourceSpace myPreset.Intent = .Intent myPreset.CRD = .CRD myPreset.Profile = .Profile myPreset.OPIImageReplacement = .OPIImageReplacement myPreset.OmitBitmaps = .OmitBitmaps myPreset.OmitEPS = .OmitEPS myPreset.OmitPDF = .OmitPDF myPreset.FlattenerPresetName = .FlattenerPresetName myPreset.IgnoreSpreadOverrides = .IgnoreSpreadOverrides MsgBox "Done!" If Err.Number <> 0 Then Err.Clear End If On Error GoTo 0 End With 169 170 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Exportation d’un document au format PDF Le script InDesign permet de gérer entièrement la création de fichiers PDF depuis vos documents de mise en page. Utilisation des options d’exportation PDF actuelles Le script suivant permet d’exporter le document actif au format PDF à l’aide d’un paramètre prédéfini d’exportation PDF : Rem ExportPDF.vbs Rem VBScript InDesign CS2 Rem Exporte le document actif en PDF. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Suppose que vous disposez d’un document ouvert. Rem Les paramètres d’exportation du document sont les suivants : Rem Format de fichier (format) : utilisez la constante idExportFormat.idPDFType ou la chaîne « Adobe PDF » ; Rem fichier de destination (to) : chemin de fichier sous forme de chaîne de caractères ; Rem options d’affichage booléennes : attribuer la valeur true permet l’affichage de la boîte de dialogue d’exportation PDF ; Rem paramètre à utiliser (using) : paramètre prédéfini d’exportation PDF (ou une chaîne correspondant au nom d’un paramètre prédéfini d’exportation PDF). Rem Les noms par défaut des paramètres prédéfinis d’exportation PDF sont entourés de crochets (par exemple, "[Screen]"). myInDesign.ActiveDocument.Export idExportFormat.idPDFType, "c:\myTestDocument.pdf", False, myInDesign.PDFExportPresets.Item("[Press]") Configuration des options d’exportation PDF L’exemple suivant permet de configurer les options d’exportation PDF avant l’exportation : Rem ExportPDFWithOptions.vbs Rem VBScript InDesign CS2 Rem Définit les options d’exportation PDF, puis exporte le document actif au format PDF. Set myInDesign = CreateObject("InDesign.Application.CS2") With myInDesign.PDFExportPreferences Rem Options de sortie PDF standard. .PageRange = idPageRange.idAllPages .AcrobatCompatibility = idAcrobatCompatibility.idAcrobat6 .ExportGuidesAndGrids = False .ExportLayers = False .ExportNonprintingObjects = False .ExportReaderSpreads = False .GenerateThumbnails = False On Error Resume Next .IgnoreSpreadOverrides = False .IncludeICCProfiles = True On Error GoTo 0 .IncludeBookmarks = True .IncludeHyperlinks = True .IncludeSlugWithPDF = False .IncludeStructure = False .InteractiveElements = False Rem Attribuer la valeur zéro à l’option jeu partiel des polices au-dessous de désactive le jeu partiel des polices ; Rem attribuer une autre valeur pour utiliser le jeu partiel des polices. .SubsetFontsBelow = 0 Rem Options de qualité/échantillonnage/compression Bitmap (notez le « s » supplémentaire dans « compression »). .ColorBitmapCompression = idBitmapCompression.idZip .ColorBitmapQuality = idCompressionQuality.idEightBit .ColorBitmapSampling = idSampling.idNone Rem Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs dans le présent exemple. Rem Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap couleurs lorsque celui-ci n’est pas activé (none). .GrayscaleBitmapCompression = idBitmapCompression.idZip Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 171 .GrayscaleBitmapQuality = idCompressionQuality.idEightBit .GrayscaleBitmapSampling = idSampling.idNone Rem Il n’est pas nécessaire d’indiquer un seuil de compression des niveaux de gris dans cet exemple. Rem Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap en niveaux de gris lorsque celui-ci n’est pas activé (none). .MonochromeBitmapCompression = idBitmapCompression.idZip .MonochromeBitmapSampling = idSampling.idNone Rem Il n’est pas nécessaire d’indiquer un seuil de compression des couleurs monochromes dans le présent exemple. Rem Il n’est pas nécessaire d’indiquer la valeur ppp pour l’échantillonnage de bitmap monochromes lorsque celui-ci n’est pas activé (none). Rem Autres options de compression. .CompressionType = idPDFCompressionType.idCompressNone .CompressTextAndLineArt = True .ContentToEmbed = idPDFContentToEmbed.idEmbedAll .CropImagesToFrames = True .OptimizePDF = True Rem Options de prépresse et repères d’imprimantes. Rem Extraire les valeurs du fond perdu du document. .BleedBottom = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedBottomOffset .BleedTop = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedTopOffset .BleedInside = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedInsideOrLeftOffset .BleedOutside = myInDesign.ActiveDocument.DocumentPreferences.DocumentBleedOutsideOrRightOf fset Rem Si une zone de fond perdu est supérieure à zéro, vous devez alors exporter les repères de marge. If ((.BleedBottom = 0) And (.BleedTop = 0) And (.BleedInside = 0) And (.BleedOutside = 0)) Then .BleedMarks = True Else .BleedMarks = False End If .ColorBars = True Rem La taille des carreaux en couleurs et en niveaux de gris n’est utilisée que lorsque Rem le format d’exportation choisi est JPEG2000. Rem .ColorTileSize = 256 Rem .GrayTileSize = 256 .CropMarks = True .OmitBitmaps = False .OmitEPS = False .OmitPDF = False .PageInformationMarks = True .PageMarksOffset = 12 .PDFColorSpace = idPDFColorSpace.idUnchangedColorSpace .PDFMarkType = idMarkTypes.idDefault .PrinterMarkWeight = idPDFMarkWeight.idP125pt .RegistrationMarks = True On Error Resume Next .SimulateOverprint = False On Error GoTo 0 .UseDocumentBleedWithPDF = True Rem Attribuer à viewPDF la valeur true pour ouvrir le PDF dans Acrobat ou Adobe Reader. .ViewPDF = False End With Rem Exportez maintenant le document. Spécifiez le chemin de votre fichier. myInDesign.ActiveDocument.Export idExportFormat.idPDFType, "c:\myTestDocument.pdf", False Exportation d’un groupe de pages L’exemple suivant indique comment exporter un groupe de pages spécifique au format PDF : Rem ExportPageRangeAsPDF.vbs Rem VBScript InDesign CS2 Rem Exporte un groupe de pages dans un fichier PDF. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Entrer le nom des pages à exporter dans l’instruction suivante. Rem Notez que le nom de la page n’est pas nécessairement l’indice de la page dans le Rem document (par exemple, la première page d’un document dont la numérotation commence Rem à 21 sera la page « 21 », et non 1). myInDesign.PDFExportPreferences.PageRange = "1-3, 6, 9" 172 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts Rem Spécifiez le chemin de votre fichier. myFile = "c:\myTestFile.pdf" myInDesign.ActiveDocument.Export idExportFormat.idPDFType, myFile, False Exportation de pages individuelles L’exemple suivant permet d’exporter chaque page d’un document en fichier PDF individuel : Rem ExportEachPageAsPDF.vbs Rem VBScript InDesign CS2 Rem Exporte chaque page d’un document InDesign CS en tant que fichier PDF individuel dans Rem un dossier sélectionné, à l’aide des paramètres d’exportation PDF actuels. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myFileSystemObject = CreateObject("Scripting.FileSystemObject") If myInDesign.Documents.Count <> 0 Then Set myDocument = myInDesign.ActiveDocument Rem Etant donné que l’instruction "get folder" n’est pas native dans VBScript, Rem le JavaScript d’InDesign permet d’afficher un explorateur de dossiers. myJavaScript = "myFolder = Folder.selectDialog(""Choose a Folder""); myFolderName = myFolder.fsName;" Rem Exécuter la chaîne "myJavaScript" en tant que JavaScript. myFolderName = myInDesign.DoScript(myJavaScript, idScriptLanguage.idJavascript) If myFileSystemObject.FolderExists(myFolderName) Then myExportPages myInDesign, myDocument, myFolderName End If End If Function myExportPages(myInDesign, myDocument, myFolderName) myDocumentName = myDocument.Name Set myDialog = myInDesign.Dialogs.Add With myDialog .Name = "ExportPages" With .DialogColumns.Add With .DialogRows.Add With .StaticTexts.Add .StaticLabel = "Base Name:" End With Set myBaseNameField = .TextEditboxes.Add myBaseNameField.EditContents = myDocumentName myBaseNameField.MinWidth = 160 End With End With End With myResult = myDialog.Show If myResult = True Then myBaseName = myBaseNameField.EditContents Rem Supprimer la boîte de dialogue de la mémoire. myDialog.Destroy For myCounter = 1 To myDocument.Pages.Count myPageName = myDocument.Pages.Item(myCounter).Name myInDesign.PDFExportPreferences.PageRange = myPageName Rem Générer un chemin de fichier à partir du nom de dossier, du nom du document de base Rem et du nom de la page. Rem Remplacer le caractère deux-points dans le nom de la page (par exemple, « Sec1:1 ») par un trait de soulignement. myPageName = Replace(myPageName, ":", "_") myFilePath = myFolderName & "\" & myBaseName & "_" & myPageName & ".pdf" myDocument.Export idExportFormat.idPDFType, myFilePath, False Next Else myDialog.Destroy End If End Function Adobe InDesign CS2 Guide des scripts Utilisation de documents dans VBScript 173 Exportation de pages au format EPS Lorsque vous exportez un document au format EPS, InDesign enregistre chaque page du fichier en tant que graphique EPS individuel (par définition, un fichier EPS ne peut comprendre qu’une seule page). Si vous exportez plusieurs pages, InDesign ajoute l’indice de la page au nom de fichier. L’indice de la page dans le document n’est pas nécessairement le nom de la page (tel qu’il est défini par les options de section pour la section comprenant la page en question). Exportation de toutes les pages Le script suivant permet d’exporter les pages du document actif dans un ou plusieurs fichiers EPS : Rem ExportAsEPS.vbs Rem VBScript InDesign CS2 Rem Exporte les pages du document actif en une série de fichiers EPS. Set myInDesign = CreateObject("InDesign.Application.CS2") myFile = "c:\myTestFile.eps" myInDesign.ActiveDocument.Export idExportFormat.idEPSType, myFile, False Exportation d’un groupe de pages Pour contrôler les pages à exporter en EPS, attribuez à la propriété PageRange des préférences d’exportation EPS une chaîne de groupe de pages comprenant les pages que vous souhaitez exporter avant l’exportation : Rem ExportPageRangeAsEPS.vbs Rem VBScript InDesign CS2 Rem Exporte un groupe de pages en fichiers EPS. Set myInDesign = CreateObject("InDesign.Application.CS2") Rem Entrer le nom de la page à exporter dans l’instruction suivante. Rem Notez que le nom de la page n’est pas nécessairement l’indice de la page dans le Rem document (par exemple, la première page d’un document dont la numérotation commence Rem à 21 sera la page « 21 », et non 1). myInDesign.EPSExportPreferences.PageRange = "1-3, 6, 9" Rem Spécifiez le chemin de votre fichier. myFile = "c:\myTestFile.eps" myInDesign.ActiveDocument.Export idExportFormat.idEPSType, myFile, False Contrôle d’autres options d’exportation Outre le groupe de pages, vous pouvez contrôler d’autres options d’exportation EPS à l’aide d’un script en définissant les propriétés de l’objet EpsExportPreferences : Rem ExportEachPageAsEPS.vbs Rem VBScript InDesign CS2 Rem Exporte chaque page d’un document InDesign CS en tant que fichier EPS individuel dans Rem un dossier sélectionné à l’aide des paramètres d’exportation EPS actuels. Set myInDesign = CreateObject("InDesign.Application.CS2") Set myFileSystemObject = CreateObject("Scripting.FileSystemObject") If myInDesign.Documents.Count <> 0 Then Set myDocument = myInDesign.ActiveDocument Rem Etant donné que l’instruction "get folder" n’est pas native dans VBScript, Rem le JavaScript d’InDesign permet d’afficher un explorateur de dossiers. myJavaScript = "myFolder = Folder.selectDialog(""Choose a Folder""); myFolderName = myFolder.fsName;" Rem Exécuter la chaîne "myJavaScript" en tant que JavaScript. myFolderName = myInDesign.DoScript(myJavaScript, idScriptLanguage.idJavascript) If myFileSystemObject.FolderExists(myFolderName) Then myExportEPSPages myInDesign, myDocument, myFolderName End If End If Function myExportEPSPages(myInDesign, myDocument, myFolderName) myDocumentName = myDocument.Name Set myDialog = myInDesign.Dialogs.Add With myDialog 174 Utilisation de documents dans VBScript Adobe InDesign CS2 Guide des scripts .Name = "ExportPages" With .DialogColumns.Add With .DialogRows.Add With .StaticTexts.Add .StaticLabel = "Base Name:" End With Set myBaseNameField = .TextEditboxes.Add myBaseNameField.EditContents = myDocumentName myBaseNameField.MinWidth = 160 End With End With End With myResult = myDialog.Show If myResult = True Then myBaseName = myBaseNameField.EditContents Rem Supprimer la boîte de dialogue de la mémoire. myDialog.Destroy For myCounter = 1 To myDocument.Pages.Count myPageName = myDocument.Pages.Item(myCounter).Name myInDesign.EPSExportPreferences.PageRange = myPageName Rem Générer un chemin de fichier à partir du nom de dossier, du nom du document de base Rem et du nom de la page. Rem Remplacer le caractère deux-points dans le nom de la page (par exemple, « Sec1:1 ») par un trait de soulignement. myPageName = Replace(myPageName, ":", "_") myFilePath = myFolderName & "\" & myBaseName & "_" & myPageName & ".eps" myDocument.Export idExportFormat.idEPSType, myFilePath, False Next Else myDialog.Destroy End If End Function