Encore un nouveau script à base de Javascript et d’InDesign… mais non, je n’y suis pas accro ;)
Une grande partie de mon temps est occupé par la conversion des couleurs d’accompagnement d’un document InDesign et le nettoyage du document qui va avec: suppression de couleurs en double, et parce que je suis un peu maniaque sur la façon d’organiser son travail nommage des couleurs selon leur composition.
Pour le moment, j’avais 2 Applescripts qui faisaient bien leur boulot, mais qui dit 2 scripts, dit forcément 2 lancement! CQFD. Alors oui, il était possible de les fusionner, mais c’est tout de même plus polyvalent de revoir son pannel de scripts pour les rendre encore plus pratiques et multi-plateforme.
Le script se divise en plusieurs segments:
1e partie: le test de version d’application
#target indesign var IDvers = parseInt(app.version); |
on ne récupére que la partie entière de la version de l’application
switch(IDvers) { case 4 : var mSwatches = app.activeDocument.colors; for (x = 1; x <= 4; x++){updateColors(mSwatches);} break; case 5 : var mSwatches = app.activeDocument.swatches; updateColors(mSwatches); break; } |
Un petit switch permettant de s’occuper des méthodes selon la version.
A noter que pour une raison inconnue le script doit être éxécuter plusieurs fois sous InDesign CS2…
2e partie: le test des Pantone
if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") { try { |
On évite de traiter les couleurs Pantone en éliminant ces nuances via leur noms. On lance ensuite un try / catch pour éviter les erreurs de traitement lorsqu’on arrive sur les couleurs protégées comme celle de repérage ou de [Papier].
3e partie: le changement de mode et nom
mSwatches[i].model = 1886548851; // = Process mSwatches[i].space = 1129142603; // = CMJN with (mSwatches[i]){ mC = Math.round(colorValue[0]); mM = Math.round(colorValue[1]); mY = Math.round(colorValue[2]); mK = Math.round(colorValue[3]); } |
on change le modèle de couleur, ainsi que l’espace colorimétrique, puis on récupérer la valeur entière de la composante pour préparer le renommage de la nuance.
4e partie: le renommage et la fusion
try { mSwatches[i].name = myName; } catch(err){ mSwatches.item(myName).merge(mSwatches[i]); } } |
dans une boucle try / catch, on tente de renommer la nuance, en cas d’erreur, la couleur existe, étant un doublon on la fusionne avec l’existante.
Conclusion: le script complet
#target indesign var IDvers = parseInt(app.version); // version InDesign CSx switch(IDvers) { case 4 : // CS2 var mSwatches = app.activeDocument.colors; // Hack pour passer plusieurs la méthode for (x = 1; x <= 4; x++){updateColors(mSwatches);} break; default : // CS3 var mSwatches = app.activeDocument.swatches; updateColors(mSwatches); break; /*default : // Ni CS2 ni CS3, avertissement alert('Script testé uniquement avec CS2 & CS3');*/ } alert('Fin du traitement'); function updateColors(mSwatches) { for (i = mSwatches.length-1; i >= 0; i--){ // si la nuance se nomme "Pantone xxxx" on ne fait rien if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") { try { mSwatches[i].model = 1886548851; // 1936748404 = SPOT | 1886548851 = Process | 1919248243 = repérage mSwatches[i].space = 1129142603; // 1129142603 = CMJN | 1666336578 = RVB with (mSwatches[i]){ // récupération des composantes CMJN mC = Math.round(colorValue[0]); mM = Math.round(colorValue[1]); mY = Math.round(colorValue[2]); mK = Math.round(colorValue[3]); } var myName = "C=" + mC + " M=" + mM + " J=" + mY + " N=" + mK; try { // renommage de la nuance selon sa composition mSwatches[i].name = myName; } catch(err){ // fusion de la nuance en cours avec l'existante de même composition mSwatches.item(myName).merge(mSwatches[i]); } } catch (e) {} } } } |
Bonjour,
Ton site est génial, cependant tu les appliques comment les scripts.
Moi je les copie dans un fichier texte que je nomme.js et les copient dans script panel ( Application Data\Adobe\InDesign\Version 6.0\fr_FR\Scripts\Scripts Panel) d’indesign.
Cependant à l’exécution du script tout ce passe bien, sauf quand faite, il ne se passe rien ! Et si je double clique pour ouvrir le .js, j’ai un message d’erreur disant : ligne 1 caractère inconnu.
Je n’ai pas du tout comprendre !
tcho!
C’est peut-être un soucis d’encodage du texte lors de la création du fichier.
De plus, il vaut mieux nommé le fichier *.jsx étant donné qu’il peut faire appel à des fonctions javascript maison d’Adobe (JSX = JavaScript eXtended selon Adobe).
Ci-joint le script (légèrement modifié d’ailleurs pour traiter le cas CS4)
idcolor.zip
Bonjour.
Le lien idcolor.zip ne fonctionne pas (plus?)…
Vous serez-t-il possible de le reposter ?
Merci d’avance et bonne fêtes ;)
Eric
Oups..
Il remarche :)
Miracle de noël :D
Merci encore