Quantcast
Channel: Adobe Community : Popular Discussions - Illustrator Scripting
Viewing all articles
Browse latest Browse all 12845

Distribute eps objects with file list and quantity

$
0
0

Hello everyone,

 

Here's a script i wrote so I share it for the contribution.

 

Here's my purpose. Every year, for a customer of our company, we have to print several description plates for their products. They give us about 30 or more texts, traduced in about 7 languages, and an excel file with quantities that each retail seller of each country do want to receive.

 

We print these aluminium plates on a uv cured ink printing machine which have a table dimension of about 60x40cm. Preparing manually every files of 60x42cm to print was way too much time devouring, so i wrote that script.

Before running this script you have to create a folder with your text files in eps, and create a new document with the dimension you want.

Don't hesitate if you want more precisions with the process.

 

 

 

#target illustrator

#targetengine session

 

/*

This script allows you to import EPS files as linked files. It distributes them and centers the all according to the dimension of the artboard of your document, then it saves the file.

You can define everything in the start list : target folder, basename of the destination files, how much objects per sheet you want, the roation if necessary, spacing between each objects, number of culumn for the distribution.

If you want to distribute a number of objects that is bigger thant the limit of objects per sheet, the script reports the remaining in a new sheet after saving the previous one.

 

The first 2 arrays contains the filenames to use in the source folder and their respective quantity.

*/

 

 

 

var doc = app.activeDocument;

doc.rulerOrigin = [0,0];

var xtimes = 0;

var countName;

var folder;

var folder2;

//var folder = 'C:\\Documents and Settings\\Administrateur\\Bureau\\BBB\\';

 

 

// array for filenames

var listEx=new Array (

"File1.eps",

"File2.eps",

"File3.eps",

);

 

// array for quantity for each filenames

var listqte=new Array (

15,

8,

19,

);

 

 

 

//-------------UI CODE------------

 

var win = new Window ("dialog");

win.alignChildren = "left";

 

// ------Folders selection panel

var foldPanel = win.add("panel");

foldPanel.alignChildren = "right";

 

// source folder for files

var panelGrp1 = foldPanel.add("group");

var btnSource = panelGrp1.add("button",undefined,"Source Folder :");

var txtSource = panelGrp1.add("edittext",undefined);

txtSource.characters = 40;

btnSource.onClick = function()

{

    folder2 = Folder.selectDialog ("Select Source folder..."); // get the source folder

    txtSource.text = folder2.fsName; // show the file Path here

}

 

// destination folder

var panelGrp2 = foldPanel.add("group");

var btnSave = panelGrp2.add("button",undefined,"Save Folder :");

var txtSave = panelGrp2.add("edittext",undefined);

txtSave.characters = 40;

btnSave.onClick = function()

{

    folder = Folder.selectDialog ("Select Destination folder..."); // get the source folder

    txtSave.text = folder.fsName; // show the file Path here

}

 

// Base name for destination files

var panelGrp3 = foldPanel.add("group");

panelGrp3.alignment = "left";

var bfn = panelGrp3.add("statictext",undefined,"Basename of target file :");

var txtbfn = panelGrp3.add("edittext",undefined,"Description plates - UK");

txtbfn.characters = 20;

//--------

 

        // other parameters

        var grp = win.add("group");

        grp.alignChildren = "left";

        grp.orientation = "column";

 

        // counter

        var wincount = grp.add("group");

        var textcount = wincount.add("edittext",undefined,0);

        textcount.characters=2;

        wincount.add("statictext",undefined,"Start count");

 

        //Limit number of placeditems to distribute in one file

        var winlimit = grp.add("group");

        var textlimit = winlimit.add("edittext",undefined,0);

        textlimit.characters=2;

        winlimit.add("statictext",undefined,"Limit");

 

        //number of Columns for the distribution

        var wincolon = grp.add("group");

        var textcolon = wincolon.add("edittext",undefined,0);

        textcolon.characters=2;

        wincolon.add("statictext",undefined,"Nb of columns");

 

        // Spacing values between each objects in mm

        var winspace = grp.add("panel",undefined,"Spacing in mm");

        winspace.orientation = "row";

        winspace.add("statictext",undefined,"X");

        var Xspace=winspace.add("edittext",undefined,0);

        Xspace.characters=7;

        winspace.add("statictext",undefined,"Y",undefined,0);

        var Yspace=winspace.add("edittext");

        Yspace.characters=7;

 

        // rotation angle

        var winrotate = grp.add("group");

        var textangle = winrotate.add("edittext",undefined,0);

        textangle.characters=3;

        winrotate.add("statictext",undefined,"Rotation in °");

       

// Dropdownlist of presets   

var winPreset =grp.add ("dropdownlist", undefined, [ "Description plates","Trapezes plates","-","Perso"]);

winPreset.onChange = function ()

{

    switch (winPreset.selection.text)

        {

                case "Description plates":

                        textlimit.text=8;

                        textcolon.text=4;

                        Xspace.text=6.4;

                        Yspace.text=27;

                        textangle.text=0;

                        break;

               

                case "Trapezes plates":

                        textlimit.text=18;

                        textcolon.text=6;

                        Xspace.text=9;

                        Yspace.text=9;

                        textangle.text=0;

                        break;

                       

                case "Perso":

                        textlimit.text=0;

                        textcolon.text=0;

                        Xspace.text=0;

                        Yspace.text=0;

                        textangle.text=0;

                        break;

        }

}

//winPreset.selection=1;

//   

       

var runBT=grp.add("button",undefined,"Run !");

runBT.onClick = function()

{

    win.close();

    moteur();

}

 

win.show();

//--------------------End of UI CODE----------------

 

 

 

 

//---------------------------------fonction  Placement of objects

function place()

{

    var paddingx = parseFloat(Xspace.text)*2.834;        //spacing in mm between each column (for a value in points just suppress the *2.834)

    var paddingy = parseFloat(Yspace.text)*2.834;        //spacing in mm between each line

    var gridCols = textcolon.text;                            // number of columns

    var newGroup = doc.groupItems.add();

    var sel = doc.placedItems;

    // set the position of the first element, assuming that the group of all elements are centered  in X and Y  in the artboard

    var originX = (doc.width - ((doc.width - ((sel[0].width * gridCols) + (paddingx) * (gridCols-1)))/2))-sel[0].width

    var originY =((doc.height - (( sel[0].height * (textlimit.text/gridCols) ) +  (  paddingy*( (textlimit.text/gridCols)-1 )  )))/2)+sel[0].height

    var currentX= originX

    var currentY = originY

       

    for(var e=0, slen=sel.length;e<slen;e++)       

   

        {

            //   :::SET POSITIONS:::

            sel[e].top = currentY;

            sel[e].left = currentX;

       

            //  :::DEFINE X POSITION:::

            currentX += -(sel[e].width + paddingx);

           

                          

            if((e % gridCols) == (gridCols - 1))

                {

                    currentX =  originX

                    //  :::DEFINE Y POSITION:::

                    currentY  += sel[e].height+paddingy;

                }

       

            // ::Add to group

            sel[e].moveToBeginning (newGroup );

            redraw()

        }

 

}

//---------------------------------

 

 

 

//----------------------function Save

function sauve()

{

    var fich =  txtbfn.text;    //Basename of the destination file

   

    // embed elements (for my case these are eps placeditem files)   

    for (var i = doc.placedItems.length-1; i >= 0; i-- )

        {

            app.activeDocument.placedItems[i].embed();

        }

   

    // draw a rectangle with the dimensions of the artboard and centered to it, with no fill color neither stroke color

    doc.rulerOrigin = [0,0];  // rulers to the origin

    var artboardRef = doc.artboards[0];

    // read dimensions oh the artboard to position therectangle

    var top=artboardRef.artboardRect[1] ;

    var left=artboardRef.artboardRect[0];

    var width=artboardRef.artboardRect[2]-artboardRef.artboardRect[0];

    var height=artboardRef.artboardRect[1]-artboardRef.artboardRect[3];

   

    var rect = doc.pathItems.rectangle (top, left, width, height);   

    rect.stroked = false;

    rect.filled = false;

    //

 

    countName ++;

   

    // when several files are saved, the ten first files are numbered like this : 01, 02, 03... instead of 1,2,3

    var countName2 = countName;

    if (countName<=9) { countName2 = ("0" + countName)};

 

    if (xtimes != 0) // saves in eps, basename of file + number of times to repeat if necessary (it's to avoid to save several but identical files. For ex. if i have an object to print 100 times and i place 50 objects per file, the mention "2 times" will be mentionned in the name of the destination file )

        {

            var dest= new File(folder + '/' + fich + ' ' + countName2 + ' - ' + xtimes + ' times' + '.eps');

        }

    else

        {

            var dest= new File(folder+ '/' + fich + ' ' + countName2 + '.eps') ;

        }

       

    var options = new EPSSaveOptions();

    options.preview  = EPSPreview.None;

    //options.compatibility = Compatibility.ILLUSTRATOR14;

    //options.overprint = PDFOverprint.DISCARDPDFOVERPRINT

    //options.embedAllFonts = false;

    //options.includeDocumentThumbnails = false

    doc.saveAs(dest, options);

   

}

//------------------------------

 

 

//-------------------- function moteur

function moteur()

{

    var limite = textlimit.text;            // max number of objects to distribute in one sheet

    var couchangl = textangle.text;    // rotation angle of the element

       

    //--------------Searches and signals if there is missing files in the source folder. If so, the script stops and displays which files are missing

    var miss=new Array();

   

    for (var i=0,len1=listEx.length;i<len1;i++)

    {

        var myfile = new File(folder2+'/'+listEx[i]);

        if (myfile.exists==false)

            {

                miss.push(listEx[i]);

            }

    }

    if (miss.length != 0)

        {

            alert (miss.length+" missing files : "+"\r"+miss.join(", "+"\r")+"\r"+"\r"+" Please correct and try again");

            return;

        }

    //--------------end of  verification

   

   

var start = new Date();        // starts chrono

countName = textcount.text;    // start of the counter to number the name of the file to save

 

 

    //-------------disctribution of the object on the sheet

    for (var i=0,howmuch = 0,len1=listEx.length;i<len1;i++)

    {

        for (var j =0; j<listqte[i];j++)

            {

                if (howmuch==0)

                    {

                        if ((listqte[i]-j)/limite>=2) //activate "xtimes" if quantity is twice or more bigger than "limit"

                            {

                                xtimes = parseInt ((listqte[i]-j)/limite);

                                j += limite*(xtimes-1);

                            }

                    }

               

                myfile = new File(folder2+'/'+listEx[i]);

                var  thisPlacedItem = doc.placedItems.add();

                thisPlacedItem.file = myfile;

                // rotate if necessary

                if (couchangl !=0) thisPlacedItem.rotate(couchangl);

                howmuch ++;

       

                if (howmuch == limite)

                    {

                        place();

                        sauve();

                        doc.pageItems.removeAll();

                        howmuch = 0;

                        xtimes = 0;

                    }       

            }

    }

place();

sauve();

redraw();

alert("time spent : "+((new Date() - start)/1000)+" secondes");

}

//------------------------


Viewing all articles
Browse latest Browse all 12845

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>