IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Javascript pour Indesign


Sujet :

JavaScript

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Points : 55
    Points
    55
    Par défaut Javascript pour Indesign
    Bonjour!

    En me promenant sur le forum, je n'ai vu que du javascript pour le web. Mais cela vous arrive-t-il de faire des scripts pour Indesign?
    Je suis occupée sur un script en javascript pour Indesign CS5... et je bloque.
    Quelqu'un saurait-il m'aider?

    Si je ne suis pas hors-sujet dans le forum, je posterais mon code!

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    On peut faire du JS à plein d'autres endroits que dans un navigateur, oui ^^

    Adobe propose des fonctionnalités de scripting en JS dans plusieurs de ses produits depuis un certain temps déjà, pour les PDF, pour Photoshop, etc.

    Même si, pour presque tout le monde ici, ce sont un contexte et une implémentation inhabituels, les fondamentaux du langage sont les mêmes, et quand on sait se référer à une doc... on finit toujours (j'espère !) par s'en sortir !

    >>> fais voir ton souci

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Points : 55
    Points
    55
    Par défaut
    Merci!!
    Mais c'est fort spécifique à de la mise en page donc...

    Je dois faire un script Indesign qui ajoute le folio de chaque page au début du texte.
    Pour cela :
    1 - je récupère le style de paragraphe du premier paragraphe de la première zone de texte
    2 - sur chaque page de mon document, j'ajoute une zone de texte dans laquelle je place le folio avec ce style de paragraphe
    3 - je redimensionne mon bloc pour qu'il ne contienne que le folio (pour que le texte ne chasse pas)
    4 - je chaîne le bloc folio au 1er bloc de texte (et au dernier de la page précédente si je ne suis pas sur la 1ere page).

    Et voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    function AjoutFolio(){
        var myDocument=app.activeDocument
     
        //DEFINITION STYLE DE CARACTERE
        var myCharacterStyle = myDocument.characterStyles.item("Folio");
            //on verifie si le style existe deja
        try {
            var myName = myCharacterStyle.name;
        }
        catch (myError){
            //le style de carac n existe pas donc on le cree
           myCharacterStyle = myDocument.characterStyles.add({name:"Folio"});
        }
        //on veut mettre le folio en rouge. On verifie d abord que la couleur existe
        var myColor = myDocument.colors.item("Red");
        try {
            myName = myColor.name;
        }
         catch (myError){
            //sinon on la cree
            myColor = myDocument.colors.add({name:"Red", model:ColorModel.process,colorValue:[0,100,100,0]});
        }
            //parametrage du style.
        myCharacterStyle.appliedFont = "Myriad Pro";
        myCharacterStyle.fontStyle = "Bold";
        myCharacterStyle.pointSize = 10;
        myCharacterStyle.fillColor = myDocument.colors.item("Red");
     
     
     
     
            // DEFINITION VARIABLES PAGES
        var myStartPage = app.activeDocument.pages.firstItem;
        var myEndPage = app.activeDocument.pages.lastItem;
            //Set page numbering to absolute
        app.generalPreferences.pageNumbering = PageNumberingOptions.absolute;
        var NumFolio = myDocument.documentPreferences.startPageNumber;
     
     
            //BOUCLE DE PAGE DEBUT A PAGE FIN
       /* for(var myCounter = (myStartPage.documentOffset); myCounter < myEndPage.documentOffset; myCounter++){*/
            var myCounter=0;
            var myPage = myDocument.pages.item(myCounter);
            if(myPage.textFrames.length != 0) { //si il existe des zones de texte dans la page
                //on prend la premiere (elles sont numerote a l envers)
                    var myTextFrameA=myPage.textFrames[myPage.textFrames.length-1];
                    var myParagraphStyle=myTextFrameA.paragraphs[0].appliedParagraphStyle;
     
                             //ajout de la zone de texte en haut à gauche de la page 
                    var myFolio = myPage.textFrames.add({geometricBounds:[20, 5, 10 , 10]});
                    myFolio.parentStory.texts.item(0).applyParagraphStyle(myParagraphStyle, true); // application du meme style de para que le para suivant
                    myFolio.parentStory.texts.item(0).applyCharacterStyle(myCharacterStyle); // application du style de carac
                    myFolio.contents = " " + NumFolio + " "; // insertion du carac de num auto de page
     
     
              myFolio.resize(CoordinateSpaces.PARENT_COORDINATES, AnchorPoint.TOP_LEFT_ANCHOR, ResizeMethods.REPLACING_CURRENT_DIMENSIONS_WITH, CoordinateSpaces.INNER_COORDINATES) //redimension du bloc selon contenu -> cela ne fonctionne pas
     
                        // si nous ne sommes pas sur la premiere page, nous lions le bloc folio au dernier bloc texte de la page precedente
                    if (myCounter > myStartPage.documentOffset){
                        var myPreviousPage=myDocument.pages.item(myCounter--);
                            //On prend le dernier element de la page precedente
                        var myTextFrameB = myPreviousPage.textFrames[0];
                        myTextFrameB.nextTextFrame = myFolio;           
                    }
                    var myTextFrameA=myPage.textFrames[myPage.textFrames.length-1];
                    myTextFrameA.previousTextFrame = myFolio; //lier bloc folio au suivant  
     
             }
            NumFolio++
       // }
    }
    Je n'ai pas encore testé ma boucle for qui parcourt les pages, ni la liaison de ma nouvelle zone de texte avec celle de la page précédente.

    Pour l'instant, je bloque sur
    - la redimension de mon bloc texte selon son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFolio.resize(CoordinateSpaces.PARENT_COORDINATES, AnchorPoint.TOP_LEFT_ANCHOR, ResizeMethods.REPLACING_CURRENT_DIMENSIONS_WITH, CoordinateSpaces.INNER_COORDINATES);
    il me ressort : "valeur incorrecte pour le paramètre 'values'. Array of Reals, ResizeConstraints enumerators or CoordinatesSpaces enumerators attendu(e), mais INNER_COORDINATES reçu". Mais INNER_COORDINATES est un CoordinatesSpaces donc je ne comprends pas...

    - et la liaison entre mon nouveau bloc texte et le premier existant de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTextFrameA.previousTextFrame = myFolio;
    il me note : "Objet incorrect pour cette commande" supprime le contenu de mon bloc Folio et me le chaîne entre le 1er et le 2e bloc de la page... je comprends encore moins...
    Et quelque soit l'item que je définis pour ma variable myTextFrameA...

    Merci d'avance pour vos pistes!

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Points : 55
    Points
    55
    Par défaut Changement de méthode : autres problèmes...
    Comme je n'arrivais pas à redimensionner mon bloc, j'ai changé de méthode : je me place au début de mon 1er bloc texte et j'ajoute mon folio avec un format de carac. Pour éviter la chasse, je pars de la fin de mon doc vers le début... Mais ma boucle ne fonctionne pas. Auriez-vous une idée?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var NbMax=myDocument.pages.length-1;
    var myPage = myDocument.pages[NbMax];
    var myTextFrameA=myPage.textFrames[myPage.textFrames.length-1];
     
     //BOUCLE DE PAGE FIN A PAGE DEBUT
    for(var myCounter = NbMax; myCounter >= 0; myCounter--){
     myPage = myDocument.pages[myCounter];
     if(myPage.textFrames.length != 0) { //si il existe des zones de texte dans la page
       myTextFrameA=myPage.textFrames[myPage.textFrames.length-1];
       myTextFrameA.parentStory.insertionPoints.item(0).applyCharacterStyle(myCharacterStyle);
       myTextFrameA.parentStory.insertionPoints.item(0).contents = "mon folio : "+NumFolio;
     }
     NumFolio--;
    }
    => il me fait bien ma boucle et je retrouve bien les bons folios dans le bon ordre. Par contre, il m'insère tous mes folios sur la première page.

    Quelqu'un aurait-il une idée?
    Merci d'avance!

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    La boucle en elle-même a pourtant l'air correcte...

    Tu es sure de ce que renvoie parentStory ? Est-ce que ça ne remonte pas d'un niveau "au-dessus" du conteneur de page, ce qui expliquerait peut-être (?) que tous les contenus soient insérés au même endroit, les pages ayant probablement en commun un conteneur de plus haut niveau (section, document, ou autre, je ne connais pas ce contexte)

    A vérifier éventuellement ^^

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Points : 55
    Points
    55
    Par défaut ça marche!!!!!
    C'était ça!!
    Je pensais que cela me renvoyait ma page mais cela me renvoyait l'ensemble du texte, donc s'il y a plusieurs blocs chaînés, il se place sur le premier.
    Mais la définition de mon TextFrameA était aussi fausse : lors de mes premiers essais, les résultats m'avaient fait pensé que les textFrames étaient numérotées à l'envers, mais en fait : l'index est dans l'ordre de création et l'item est dans le sens inverse du chaînage... Enfin je crois
    Donc maintenant ma boucle fonctionne et mes folios se placent sur les bonnes pages...
    Et voilà le code de la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //BOUCLE DE PAGE DEBUT A PAGE FIN    
    for(var myCounter = (myDocument.pages.length-1); myCounter >= 0; myCounter--){
        myPage = myDocument.pages[myCounter];
        if(myPage.textFrames.length > 0) {
            myTextFrameA=myPage.textFrames[0];
            myTextFrameA.insertionPoints.item(0).contents = NumFolio; 
        }
        NumFolio--;
    }
    Et en plus il est beaucoup plus court! (et plus simple... )

    Merci de m'avoir mis sur la voie! et à bientôt!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Javascript pour Indesign
    Par SuperArbre dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/06/2011, 11h48
  2. Intégration Javascript pour menu deroulant CSS compatible IE
    Par Dantahoua dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/08/2005, 20h41
  3. un micro souci javascript pour la position d'un image
    Par gg14bis dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/06/2005, 15h11
  4. fonction javascript pour tout cocher
    Par Flob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/02/2005, 10h36
  5. Modif JavaScript pour fonctionnement sous IE et Firefox
    Par Steph4fun dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/11/2004, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo