Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Script making list from layer names.

Explorer ,
Jul 17, 2016 Jul 17, 2016

I wonder if someone could help me to make simple script wich take layer's names and making list from them on A4 canvas.

Now i just doing screenshot of illustrator list and modifying it via photoshop to print, but it is too small, because each ai file has about 25 - 50 layers.

Looks like that:

layer-list.jpg

I tryed to modify John Wundes script, wich renders list of swatches, but it seems to hard for my skill.

/////////////////////////////////////////////////////////////////

// Render Swatch Legend v1.1 -- CS, CS2, CS3, CS4, CS5

//>=--------------------------------------

//

//  This script will generate a legend of rectangles for every swatch in the main swatches palette.

//  You can configure spacing and value display by configuring the variables at the top

//  of the script.

//   update: v1.1 now tests color brightness and renders a white label if the color is dark.

//>=--------------------------------------

// JS code (c) copyright: John Wundes ( john@wundes.com ) www.wundes.com

// copyright full text here:  http://www.wundes.com/js4ai/copyright.txt

//

//////////////////////////////////////////////////////////////////

    doc = activeDocument,

    swatches = doc.swatches,

    cols = 4,

    displayAs = "CMYKColor",  //or "RGBColor"

    rectRef=null,

    textRectRef=null,

    textRef=null,

    rgbColor=null,

    w=150;

    h=100,

    h_pad = 10,

    v_pad = 10,

    t_h_pad = 10,

    t_v_pad = 10,

    x=null,

    y=null,

    black = new GrayColor(),

    white = new GrayColor()

    ;

    black.gray = 100;

    white.gray = 0;

activeDocument.layers[0].locked= false;

var newGroup = doc.groupItems.add();

newGroup.name = "NewGroup";

newGroup.move( doc, ElementPlacement.PLACEATBEGINNING );

for(var c=0,len=swatches.length;c<len;c++)

{

        var swatchGroup = doc.groupItems.add();

        swatchGroup.name = swatches.name;

      

        x= (w+h_pad)*(c% cols);

        y=(h+v_pad)*(Math.floor((c+.01)/cols))*-1 ;

        rectRef = doc.pathItems.rectangle(y,x, w,h);

        rgbColor = swatches.color;

        rectRef.fillColor = rgbColor;

        textRectRef =  doc.pathItems.rectangle(y- t_v_pad,x+ t_h_pad, w-(2*t_h_pad),h-(2*t_v_pad));

        textRef = doc.textFrames.areaText(textRectRef);

        textRef.contents = swatches.name+ "\r" + getColorValues(swatches.color) ;

        textRef.textRange.fillColor = is_dark(swatches.color)? white : black;

        //

        rectRef.move( swatchGroup, ElementPlacement.PLACEATBEGINNING );    

        textRef.move( swatchGroup, ElementPlacement.PLACEATBEGINNING );

        swatchGroup.move( newGroup, ElementPlacement.PLACEATEND );

}

function getColorValues(color)

{

        if(color.typename)

        {

            switch(color.typename)

            {

                case "CMYKColor":

                    if(displayAs == "CMYKColor"){

                        return ([Math.floor(color.cyan),Math.floor(color.magenta),Math.floor(color.yellow),Math.floor(color.black)]);}

                    else

                    {

                        color.typename="RGBColor";

                        return  [Math.floor(color.red),Math.floor(color.green),Math.floor(color.blue)] ;

                      

                    }

                case "RGBColor":

                  

                   if(displayAs == "CMYKColor"){

                        return rgb2cmyk(Math.floor(color.red),Math.floor(color.green),Math.floor(color.blue));

                   }else

                    {

                        return  [Math.floor(color.red),Math.floor(color.green),Math.floor(color.blue)] ;

                    }

                case "GrayColor":

                    if(displayAs == "CMYKColor"){

                        return rgb2cmyk(Math.floor(color.gray),Math.floor(color.gray),Math.floor(color.gray));

                    }else{

                        return [Math.floor(color.gray),Math.floor(color.gray),Math.floor(color.gray)];

                    }

                case "SpotColor":

                    return getColorValues(color.spot.color);

            }   

        }

    return "Non Standard Color Type";

}

function rgb2cmyk (r,g,b) {

var computedC = 0;

var computedM = 0;

var computedY = 0;

var computedK = 0;

//remove spaces from input RGB values, convert to int

var r = parseInt( (''+r).replace(/\s/g,''),10 );

var g = parseInt( (''+g).replace(/\s/g,''),10 );

var b = parseInt( (''+b).replace(/\s/g,''),10 );

if ( r==null || g==null || b==null ||

     isNaN(r) || isNaN(g)|| isNaN(b) )

{

   alert ('Please enter numeric RGB values!');

   return;

}

if (r<0 || g<0 || b<0 || r>255 || g>255 || b>255) {

   alert ('RGB values must be in the range 0 to 255.');

   return;

}

// BLACK

if (r==0 && g==0 && b==0) {

  computedK = 1;

  return [0,0,0,1];

}

computedC = 1 - (r/255);

computedM = 1 - (g/255);

computedY = 1 - (b/255);

var minCMY = Math.min(computedC,

              Math.min(computedM,computedY));

computedC = (computedC - minCMY) / (1 - minCMY) ;

computedM = (computedM - minCMY) / (1 - minCMY) ;

computedY = (computedY - minCMY) / (1 - minCMY) ;

computedK = minCMY;

return [Math.floor(computedC*100),Math.floor(computedM*100),Math.floor(computedY*100),Math.floor(computedK*100)];

}

function is_dark(color){

       if(color.typename)

        {

            switch(color.typename)

            {

                case "CMYKColor":

                    return (color.black>50 || (color.cyan>50 &&  color.magenta>50)) ? true : false;

                case "RGBColor":

                    return (color.red<100  && color.green<100 ) ? true : false;

                case "GrayColor":

                    return color.gray > 50 ? true : false;

                case "SpotColor":

                    return is_dark(color.spot.color);

               

                return false;

            }

        }

}

TOPICS
Scripting
1.2K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jul 17, 2016 Jul 17, 2016

arop16461101​,

something like this?

var theLayers = app.activeDocument.layers;

var str = new Array ();

for (i = 0; i < theLayers.length; i++) {

    str.push (theLayers.name)

    }

var tF = theLayers[0].textFrames.add();

tF.contents = str.join ("\r");

alert("new text frame with layerlist added on layer " + theLayers[0].name);

Have fun

Translate
Adobe
Community Expert ,
Jul 17, 2016 Jul 17, 2016

arop16461101​,

something like this?

var theLayers = app.activeDocument.layers;

var str = new Array ();

for (i = 0; i < theLayers.length; i++) {

    str.push (theLayers.name)

    }

var tF = theLayers[0].textFrames.add();

tF.contents = str.join ("\r");

alert("new text frame with layerlist added on layer " + theLayers[0].name);

Have fun

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 31, 2016 Jul 31, 2016

Thanks! It works!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 15, 2025 Apr 15, 2025

I need to do exactly this but am entirely new to scripts - are you able to advise. I have a document with hundreds of layers of different geographical regions, named accordingly. I need a list of those names in layer order as editable text. I have this code saved into a .jsx which I can run but just get a dialogue box with the rror below.

 

Like I said, total novice - is there lines in the script I need to customise? Do I need to be in a fresh layer? Do I need a fresh text box drawn even?

 

Thanks in advance for any advice.

 

Screenshot 2025-04-15 173411.png

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Apr 16, 2025 Apr 16, 2025
LATEST

Yes. After updating the forum, some of the code is missing in old posts. Fixed:

(function (){
  var theLayers = app.activeDocument.layers;
  var str = new Array();
  for (var i = 0; i < theLayers.length; i++) {
    str.push(theLayers[i].name);
  }
  theLayers[0].locked = false;
  theLayers[0].visible = true;
  var tF = theLayers[0].textFrames.add();
  tF.contents = str.join("\r");
  alert("new text frame with layerlist added on layer " + theLayers[0].name);
})();

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines