Script Indesign : redimensionner un bloc texte selon contenu et autres soucis

Résolu
dewcaro Messages postés 3 Date d'inscription mercredi 29 décembre 2010 Statut Membre Dernière intervention 6 janvier 2011 - 29 déc. 2010 à 19:12
dewcaro Messages postés 3 Date d'inscription mercredi 29 décembre 2010 Statut Membre Dernière intervention 6 janvier 2011 - 6 janv. 2011 à 16:49
Bonjour!

Je suis occupée sur le développement de mon premier script javascript pour Indesign, et bien sûr je bloque... Donc je viens demander de l'aide!
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 :
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];
var myParagraphStyle=myTextFrameB.paragraphs[0].appliedParagraphStyle;
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 :
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 :
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...


je n'ai jamais fait de javascript donc merci de votre indulgence... et de vos conseils!
Merci d'avance pour vos pistes!

2 réponses

dewcaro Messages postés 3 Date d'inscription mercredi 29 décembre 2010 Statut Membre Dernière intervention 6 janvier 2011
6 janv. 2011 à 16:49
Résolu!!
En fait parentStory me renvoyait le texte complet, et comme mes blocs étaient chaînés...

A+
3
dewcaro Messages postés 3 Date d'inscription mercredi 29 décembre 2010 Statut Membre Dernière intervention 6 janvier 2011
3 janv. 2011 à 12:13
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 :
var NbMax=myDocument.pages.length-1;
var myPage = myDocument.pages[NbMax];
var myTextFrameA=myPage.textFrames[myPage.textFrames.length-1];

 //BOUCLE DE PAGE DEBUT A PAGE FIN
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!
0
Rejoignez-nous