Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2010, 11h09   #1
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
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!
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 13h45   #2
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
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
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2010, 17h57   #3
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
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 :
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 :
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 :
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!
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 12h19   #4
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
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 :
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!
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 13h29   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
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 ^^
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2011, 16h38   #6
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
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 :
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!
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h27.


 
 
 
 
Partenaires

Hébergement Web