InDesign, nettoyage des couleurs

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) {}
		}
	}
}

4 réflexions au sujet de « InDesign, nettoyage des couleurs »

  1. 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!

  2. 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

Les commentaires sont fermés.