Bonjour à tous,
N'ayant pas trouvé LA catégorie pour poster mon problème, je pense tout de même être dans la plus appropriée.
Pour info, je suis novice en Js. Et la subtilité etant que ce code permettra de piloter Photoshop, et oui c'est possible.
Le cahier des charges est de remplacer un élément texte dans un paragraphe, plus exactement dans "les" calques de type texte tout en gardant le texte visible dans un cadre délimité. Le texte doit s'adapter au cadre sans troncature en fonction de la taille du texte remplaçant. (texte prédéfinis à personnaliser avec un prénom par exemple)
Donc voici ce qui me préoccupe depuis un moment, une partie de mon code fonctionne. Effectivement j'arrive à faire ma recherche+remplacement, tout se passe bien, j'arrive a récupérer le nombre de caractère qui va me servir à évaluer la taille de police à appliquer.
Mais vue que je débute, je me suis beaucoup renseigner et ai récupéré des parties de code ici et là en les modifiant pour qu'ils s'appliquent à mon usage.
Je butte parce que la dernière partie me renvoie une erreur étant donné que je fais appel à une variable présente dans une autre fonction, la fonction "main".
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 if (app.documents.length > 0) { for (var n = 0; n < app.documents.length; n++) { app.activeDocument = app.documents[n]; app.activeDocument.suspendHistory("replace text", "main()") } }; // S&R by prompt function main () { var myDocument = app.activeDocument; var theLayers = collectTextLayers(myDocument, []); if (theLayers.length > 0) { // Texte cible à remplacer // var theArray1 = ["<prenom>"]; // Nouveau texte // var theArray2 = [prompt("prénom à insérer","Prenom")]; for (var a = 0; a < theLayers.length; a++) { for (var b = 0; b < theArray1.length; b++) { var theString = theLayers[a].textItem.contents; while (theString.indexOf(theArray1[b]) != -1) { theString = theString.replace(theArray1[b], theArray2[b]) }; theLayers[a].textItem.contents = theString; var namelength = theArray2[b].length } } } }; ////// collect all layers ////// function collectTextLayers (theParent, allLayers) { if (!allLayers) {var allLayers = new Array}; else {}; for (var m = theParent.layers.length - 1; m >= 0;m--) { var theLayer = theParent.layers[m]; // apply the function to layersets; if (theLayer.typename == "ArtLayer") { if (theLayer.kind == LayerKind.TEXT) {allLayers.push(theLayer)}; } else { allLayers = (collectTextLayers(theLayer, allLayers)) // this line includes the layer groups; // allLayers.push(theLayer); } }; return allLayers }; /// AutoSize ////// if (namelength >10) var fontsize = 12 function changeSize(target){ var layers = target.layers; for(var i=0;i<layers.length;i++){ if(layers[i].typename == "LayerSet"){ changeSize(layers[i]); } else { if(layers[i].kind == LayerKind.TEXT){ layers[i].textItem.size = fontsize; }; }; }; };
Donc comment faire pour récupérer cette variable sans utilisation d'un fichier texte pour le stockage.?
Soyez indulgent c'est mon premier code, que j'ai réussi a mettre en place en repiquant des morceaux a droite à gauche.
Merci d'avance pour votre aide.
Partager