Published using Google Docs
Новый документ
Updated automatically every 5 minutes

Более подробно вот так:

// Создание штрихкода EAN-13 v 2.0 RC

// (с) 2010-2011. Ягупов Дмитрий

// www.za-vod.ru

// info@za-vod.ru

// Create Barcode EAN-13 v 2.0

// (с) 2010-2011. Dmitry Yagupov

// www.za-vod.ru

// info@za-vod.ru

/**

 * Search all modify by "Add by dumbm1 m_js@bk.ru 05-02-16" string

 * */

//@target illustrator

(function ean13 () {

  /**

   * Add by dumbm1 m_js@bk.ru 05-02-16

   * */

  var fitArtbFlag = true,  // fit or no fit... true\false

      fitValue    = 0;     // distance in mm to the edge of the artboard

  /**

   * Add by dumbm1 m_js@bk.ru 05-02-16

   * Select all in document and fit artboard #0 to selection

   * */

  function fitArtb (fitValue, fitArtbFlag) {

    var PT_TO_MM = 2.834645669; // const to convertion point to mm

    try {

      fitValue *= PT_TO_MM;

      fitArtbFlag == true ? _fit (fitValue, fitArtbFlag) : '';

    } catch (e) {

    }

    /**

     * the lib

     * */

    function _fit () {

      // select all

      for (var i = 0; i < activeDocument.layers.length; i++) {

        var obj                = activeDocument.layers[i];

        obj.hasSelectedArtwork = true;

      }

      activeDocument.fitArtboardToSelectedArt(0);

      _resizeArtb (fitValue);

      /* // deselect all

       for (var i = 0; i < activeDocument.layers.length; i++) {

       var obj                = activeDocument.layers[i];

       obj.hasSelectedArtwork = false;

       }*/

    }

    function _resizeArtb (numb) {

      activeDocument.artboards[0].artboardRect = [

        activeDocument.artboards[0].artboardRect[0] - numb,

        activeDocument.artboards[0].artboardRect[1] + numb,

        activeDocument.artboards[0].artboardRect[2] + numb,

        activeDocument.artboards[0].artboardRect[3] - numb

      ]

    }

  }

  var fos = Folder.fs;

//Get fullPath to Script file

  if (fos == 'Windows') {

    var pathJSX = $.fileName;

    pathJSX     = pathJSX.substring(0, pathJSX.lastIndexOf("\\"));

    pathJSX     = replace_string (pathJSX, '\\', '/');

    pathJSX     = '/' + replace_string (pathJSX, ':', '');

  }

  else {

    var pathJSX = Folder.myDocuments;

//var pathJSX=Folder.desktop;

  }

  var MM = 2.834645669; //convert point to mm

  var docPreset    = new DocumentPreset;

  docPreset.units  = RulerUnits.Millimeters;

  docPreset.width  = 210 * MM;

  docPreset.height = 297 * MM;

//docPreset.title = "Test Document";

  docPreset.colorMode = DocumentColorSpace.CMYK;

  try {

    var docRef = activeDocument;

  }

  catch (ex) {

    //alert(ex);

  }

  if (!docRef) {

    docRef = app.documents.addDocument(DocumentColorSpace.CMYK, docPreset);

    //docRef = app.documents.add();

  }

  var EANGroup = docRef.groupItems.add(); // добавляем группу

//Read  INI File

  var myINIFile = new File (pathJSX + '/barcode.ini');

  var openIni   = myINIFile.open('e'); // 'e' read-write open file.

  if (myINIFile.length == 0) {

    //Write  default INI file

    myINIFile. writeln('0'); // Start Coord X

    myINIFile. writeln('0'); // Start Coord Y

    myINIFile. writeln('Y'); // Chk Scale

    myINIFile. writeln('N'); // Chk layer

    myINIFile. writeln('100'); // Scale

    myINIFile. writeln('N');  // Chk DopParam

    myINIFile. writeln('1'); //Pages

    myINIFile. writeln('1'); //N Column

    myINIFile. writeln('1'); //N Row

    myINIFile. writeln('1'); // Dist Column

    myINIFile. writeln('1'); // Dist Row

    myINIFile. writeln('/c'); // Path to Save AI Files

    myINIFile.close();

    myINIFile   = new File (pathJSX + '/barcode.ini');

    var openIni = myINIFile.open('e'); // 'e' read-write open file.

  }

  if (!openIni) {

    var newPosX = '0';

    var newPosY = '0';

//Read Check New Layer

    var newLayer = 'Y';

//Read Check Scale

    var newCheckScale = 'N';

//Read Scale volume

    var newScale = '100';

//Read Clone Barcode

    var newCheckClone = 'N';

// Read Pages

    var Pages = '1';       //Количество страниц при многостраничном документе

//Read Column

    var newColumn = '1';

//Read Row

    var newRow = '1';

//Read ColumnDistance

    var newColumnDist = '1';

//Read RowDistance

    var newRowDist = '1';

//Read Full Path To Save AI Files

    var destFolder = '/';

  }

  else {

//Read position

    var newPosX = myINIFile. readln();

    var newPosY = myINIFile. readln();

//Read Check New Layer

    var newLayer = myINIFile. readln();

//Read Check Scale

    var newCheckScale = myINIFile. readln();

//Read Scale volume

    var newScale = myINIFile. readln();

//Read  Check Extendet Parameters

    var newCheckClone = myINIFile. readln();

// Read Pages

    var Pages = myINIFile. readln();       //Количество страниц при многостраничном документе

//Read Column

    var newColumn = myINIFile. readln();

//Read Row

    var newRow = myINIFile. readln();

//Read ColumnDistance

    var newColumnDist = myINIFile. readln();

//Read RowDistance

    var newRowDist = myINIFile. readln();

//Read Full Path To Save AI Files

    var destFolder = myINIFile. readln();

    myINIFile.close();

  }

  var destFolderEncode = Folder.decode(destFolder);

  var blk  = 0.33;

  var blkD = blk * 7;

  var blkE = blk * 3;

  var blkC = blk * 5;

  var blkH = 22.85; //Height standart bar

  var blkHE = blkH + 1.65; // Height extendet bar

//var blkHE = 24.5; // Height extendet bar

  var zX = 5; // Начальный отступ по X

  var zY = 5; // Начальный отступ по Y

  var XGr = 0; // Координаты группы одного штрихкода.X

  var YGr = 0; // Координаты группы одного штрихкода.Y

  var ColMatrix = 1; // Количество колонок при генерации нескольких штрих-кодов

  var RowMatrix = 1; // Количество строк при генерации нескольких штрих-кодов

  var DistRow = 1; // Расстояние между колонками при генерации нескольких штрих-кодов

  var DistCol = 1; // Расстояние между строками при генерации нескольких штрих-кодов

  var namePages = 'EAN13-'; //Префикс названия страниц

  var stepToNext = 0;

  var pathPrefix = null; // Name Disk from Path to Barcode AI files in ExtDialog

  var pathLastFolder = null; // Text Last Folder from Path to Barcode AI files in ExtDialog

  var textDlgPathAI = null; // Text Full Path to Barcode AI files in ExtDialog

  var tablEAN = new Array (10);

  tablEAN[0] = "AAAAAA";

  tablEAN[1] = "AABABB";

  tablEAN[2] = "AABBAB";

  tablEAN[3] = "AABBBA";

  tablEAN[4] = "ABAABB";

  tablEAN[5] = "ABBAAB";

  tablEAN[6] = "ABBBAA";

  tablEAN[7] = "ABABAB";

  tablEAN[8] = "ABABBA";

  tablEAN[9] = "ABBABA";

  var EAN      = "";

  var nowEnter = "";

// Set Zero point ruler on Document

//Set Page Size to A4

  docRef.width  = 210 * MM;

  docRef.height = 297 * MM;

  docRef.units  = RulerUnits.Millimeters;

//docRef.RulerUnits = 'Millimeters';

  var hDoc = docRef.height;

  var wDoc = docRef.width;

  docRef.rulerOrigin = Array (0, hDoc); // Zero point ruler to left-top corner

// Set color values for the CMYK object

  var barColor     = new CMYKColor ();

  barColor.black   = 100;

  barColor.cyan    = 0;

  barColor.magenta = 0;

  barColor.yellow  = 0;

//*******************************************

// Create Dialog Window

  var res =

        "dialog { alignChildren: 'fill', text: 'EAN-13 ver 2.0 RC', \

        coord: Panel { orientation: 'column', alignChildren:'center', \

        text: 'Coordinate place Barcode', \

        name1: Group { orientation: 'row', \

        s1: StaticText { text:'X:' }, \

        e1: EditText { text: '0',characters: 6 } ,\

        s2: StaticText { text:' mm   Y:' }, \

        e2: EditText { text: '0', characters: 6 }, \

        s3: StaticText { text:' mm' } \

        } \

        }, \

        digit12: Panel { orientation: 'column', \

        text: 'EAN-13', \

        name2: Group { orientation: 'row', \

        s: StaticText { text:' Enter 12 digit code:' }, \

        e: EditText { characters: 12, helpTip:'Enter first 12 digit from your EAN code'  } ,\

        sh: StaticText { text:'<?> ' }, \

        } \

        }, \

        dopparamonoff: Panel { orientation: 'column', \

        text: 'Ext. Parameters', \

        chkExtParam: Checkbox { alignment:'left', text: 'Extend Parameters', value:false}, \

        extparamBtn: Button { text:'Open Extend Parameters',enabled:false}, \

        progressTxt: StaticText { text:'Progress:',visible: false }, \

        progressSave: Progressbar {value: 0,minvalue:0, maxvalue: 100,visible: false}\

        }, \

        buttons: Group { orientation: 'row', alignment: 'center', \

        okBtn: Button { text:'OK', properties:{name:'ok'} }, \

        cancelBtn: Button { text:'Cancel', properties:{name:'cancel'} } \

        } \

        }";

//Extend param dialog windows

  var extdialog =

        "dialog { alignChildren: 'fill', text: 'Extendet Parameters', \

        dopparam: Panel { orientation: 'column', \

        text: 'Ext. Parameters', \

        name3: Group { orientation: 'column', \

        chkLayer: Checkbox { alignment:'left', text: 'Barcode to new layer \"EAN-13\" ', value:true}, \

        chkScale: Checkbox { alignment:'left', text: 'Barcode Scale to (80-120%) ', value:false}, \

        sScale: StaticText { text:'Only 80-120%' }, \

        eScale: EditText { characters: 12, enabled:false, text: '100',helpTip:'If you want scale barcode, enter scale parameter.'  } ,\

        } \

        heightBarcode: Group { orientation: 'row', \

        sHeight: StaticText { text:'Height Barcode (min 10 mm): ' }, \

        eHeight: EditText { characters: 6, enabled:true, text: '22.85',helpTip:'Enter height your barcode. By default: 22.85 mm'  } ,\

        sHeightMM: StaticText { text:'  mm ' }, \

        } \

        pages: Group { orientation: 'row', alignChildren:'center',\

        sPages: StaticText { text:'Pages' }, \

        ePages: EditText { characters: 4, enabled:false, text: '1',helpTip:'Enter number pages' } ,\

        } \

        pathAI: Group { orientation: 'column', alignChildren:'center',\

        sPath: StaticText { characters: 30, text:'Change Path' ,helpTip:'Path to save your AI files' }, \

        PathBtn: Button { text:'Select folder to Save AI' }, \

        }\

        name4: Group { orientation: 'row', alignChildren:'right',\

        sColumn: StaticText { text:'Columns' }, \

        eColumn: EditText { characters: 4, enabled:false, text: '1' } ,\

        sRow: StaticText { text:'Rows' }, \

        eRow: EditText { characters: 4, enabled:false, text: '1' } ,\

        } \

        name5: Group { orientation: 'row', alignChildren:'right',\

        sDistanceX: StaticText { text:'Beth Columns' }, \

        eDistanceX: EditText { characters: 5, enabled:false, text: '1' } ,\

        sDistanceY: StaticText { text:'Beth Rows' }, \

        eDistanceY: EditText { characters: 5, enabled:false, text: '1' } ,\

        sDistanceYmm: StaticText { text:'mm' }, \

        } \

        }, \

        buttons: Group { orientation: 'row', alignment: 'center', \

        extokBtn: Button { text:'Save Ext Param', properties:{name:'ok'} }, \

        extcancelBtn: Button { text:'Cancel', properties:{name:'cancel'} } \

        } \

        }";

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

  win = new Window (res);

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

  dlgext = new Window (extdialog);

  win.coord.name1.e1.text = newPosX;

  win.coord.name1.e2.text = newPosY;

// Colorise

  var colorEAN             = win.digit12.graphics;

  var myBrush              = colorEAN.newBrush(colorEAN.BrushType.SOLID_COLOR, [0.92, 0.87, 0.69, 1]);

  colorEAN.backgroundColor = myBrush;

  var g  = dlgext.dopparam.pathAI.sPath.graphics;

  g.font = ScriptUI.newFont("Verdana", "BOLD", 11);

  /*

   var colorPath = dlgext.dopparam.pathAI.sPath.graphics;

   var myBrushPath = colorPath.newBrush(colorPath.BrushType.SOLID_COLOR, [0.92, 0.87, 0.69, 1]);

   colorPath.backgroundColor = myBrushPath;

   */

  if (newLayer == 'Y') {

    dlgext.dopparam.name3.chkLayer.value = true;

  }

  else dlgext.dopparam.name3.chkLayer.value = false;

  if (newCheckScale == 'Y') {

    dlgext.dopparam.name3.chkScale.value = true;

    dlgext.dopparam.name3.eScale.text    = newScale;

    dlgext.dopparam.name3.eScale.enabled = true;

  }

  else {

    dlgext.dopparam.name3.chkScale.value = false;

    dlgext.dopparam.name3.eScale.text    = '100';

    dlgext.dopparam.name3.eScale.enabled = false;

  }

  if (newCheckClone == 'Y') {

    win.dopparamonoff.chkExtParam.value   = true;

    win.dopparamonoff.extparamBtn.enabled = true;

    //  dlgext.dopparam.name3.chkMatrix.value= true;

    dlgext.dopparam.pages.ePages.enabled     = true;

    dlgext.dopparam.name4.eColumn.enabled    = true;

    dlgext.dopparam.name4.eRow.enabled       = true;

    dlgext.dopparam.name5.eDistanceX.enabled = true;

    dlgext.dopparam.name5.eDistanceY.enabled = true;

    dlgext.dopparam.pages.ePages.text        = Pages;

    textDlgPathAI = '' + destFolderEncode;

//===========

    if (textDlgPathAI.length > 40) {

      if (fos == 'Windows') {

        pathPrefix = textDlgPathAI.substring(1, 2) + ':';

      }

      else {

        pathPrefix = textDlgPathAI.substring(textDlgPathAI.indexOf('/', 13), textDlgPathAI.indexOf('/', 16));

        pathPrefix = '~' + pathPrefix;

      }

      pathPrefix                           = pathPrefix.toUpperCase();

      pathLastFolder                       = textDlgPathAI.substring(textDlgPathAI.lastIndexOf("/"));

      textDlgPathAI                        = 'Path to Save AI -> ' + pathPrefix + '...' + pathLastFolder;

      dlgext.dopparam.pathAI.sPath.text    = textDlgPathAI;

      dlgext.dopparam.pathAI.sPath.helpTip = destFolderEncode;

    }

    else {

      if (fos == 'Windows') {

        pathPrefix     = textDlgPathAI.substring(1, 2) + ':';

        pathLastFolder = textDlgPathAI.substring(2);

      }

      else {

        pathPrefix     = '~';

        pathLastFolder = textDlgPathAI.substring(15);

      }

      textDlgPathAI                        = 'Path to Save AI -> ' + pathPrefix + pathLastFolder;

      dlgext.dopparam.pathAI.sPath.text    = textDlgPathAI;

      dlgext.dopparam.pathAI.sPath.helpTip = destFolderEncode;

    }

//==========

    //dlgext.dopparam.pathAI.sPath.text = 'Path to Save AI -> '+ destFolder;

    dlgext.dopparam.name4.eColumn.text    = newColumn;

    dlgext.dopparam.name4.eRow.text       = newRow;

    dlgext.dopparam.name5.eDistanceX.text = newColumnDist;

    dlgext.dopparam.name5.eDistanceY.text = newRowDist;

  }

  else {

    win.dopparamonoff.chkExtParam.value   = false;

    win.dopparamonoff.extparamBtn.enabled = false;

    //  dlgext.dopparam.name3.chkMatrix.value= false;

    dlgext.dopparam.pages.ePages.enabled     = false;

    dlgext.dopparam.name4.eColumn.enabled    = false;

    dlgext.dopparam.name4.eRow.enabled       = false;

    dlgext.dopparam.name5.eDistanceX.enabled = false;

    dlgext.dopparam.name5.eDistanceY.enabled = false;

    dlgext.dopparam.pages.ePages.text        = '1';

    dlgext.dopparam.name4.eColumn.text       = '1';

    dlgext.dopparam.name4.eRow.text          = '1';

    dlgext.dopparam.name5.eDistanceX.text    = '1';

    dlgext.dopparam.name5.eDistanceY.text    = '1';

  }

// Add Picture Barcode to Dialog Window

  try {

    var imgbar = new File (pathJSX + '/barcode.png');

//Добавляем картинку со штрих-кодом в диалог и если не вышло найти картинку, то пропускаем эту операцию

    win.add("image", [16, 16, 116, 57], imgbar);

  } catch (e) {

    //alert (e);

  }

//Check ExtParam Dialog

  win.dopparamonoff.chkExtParam.onClick = function addScale () {

    if (win.dopparamonoff.chkExtParam.value == true) {

      win.dopparamonoff.extparamBtn.enabled    = true;

      newCheckClone                            = 'Y';

      dlgext.dopparam.pages.ePages.enabled     = true;

      dlgext.dopparam.name4.eColumn.enabled    = true;

      dlgext.dopparam.name4.eRow.enabled       = true;

      dlgext.dopparam.name5.eDistanceX.enabled = true;

      dlgext.dopparam.name5.eDistanceY.enabled = true;

    }

    else {

      win.dopparamonoff.extparamBtn.enabled    = false;

      newCheckClone                            = 'N';

      dlgext.dopparam.pages.ePages.enabled     = false;

      dlgext.dopparam.name4.eColumn.enabled    = false;

      dlgext.dopparam.name4.eRow.enabled       = false;

      dlgext.dopparam.name5.eDistanceX.enabled = false;

      dlgext.dopparam.name5.eDistanceY.enabled = false;

    }

  }

// Open ExtParam Dialog

  win.dopparamonoff.extparamBtn.onClick = function ExtParamDlg () {

    var btnText = {ru: "Да", en: "Yes", de: "Ja", fr: "Oui"};

//dlgext.center();

    dlgext.show();

  }

//OnClick Save btn

  dlgext.buttons.extokBtn.onClick = function ExtParamSave () {

    var txtSaveExt = "Ext param: Column - ";

    txtSaveExt     = txtSaveExt + dlgext.dopparam.name4.eColumn.text + " \n Row - ";

    txtSaveExt     = txtSaveExt + dlgext.dopparam.name4.eRow.text;

    dlgext.hide();

    //dlgext.close();

  }

// Get Path for saved AI files

  dlgext.dopparam.pathAI.PathBtn.onClick = function () {

    var olddestFolder = destFolder;

    destFolder        = Folder.selectDialog('Select folder for Save Barcode files.', destFolder);

    if (!destFolder) {

      destFolder = olddestFolder;// Bad code

    }

    destFolderEncode = Folder.decode(destFolder);

    textDlgPathAI    = '' + destFolderEncode;

    if (textDlgPathAI.length > 40) {

      if (fos == 'Windows') {

        pathPrefix = textDlgPathAI.substring(1, 2) + ':';

      }

      else {

        pathPrefix = textDlgPathAI.substring(textDlgPathAI.indexOf('/', 13), textDlgPathAI.indexOf('/', 16));

        pathPrefix = '~' + pathPrefix;

      }

      pathPrefix                           = pathPrefix.toUpperCase();

      pathLastFolder                       = textDlgPathAI.substring(textDlgPathAI.lastIndexOf("/"));

      textDlgPathAI                        = 'Save AI to Folder -> ' + pathPrefix + '...' + pathLastFolder;

      dlgext.dopparam.pathAI.sPath.text    = textDlgPathAI;

      dlgext.dopparam.pathAI.sPath.helpTip = destFolderEncode;

    }

    else {

      if (fos == 'Windows') {

        pathPrefix     = textDlgPathAI.substring(1, 2) + ':';

        pathLastFolder = textDlgPathAI.substring(2);

      }

      else {

        pathPrefix     = '~';

        pathLastFolder = textDlgPathAI.substring(15);

      }

      textDlgPathAI                        = 'Save AI to Folder-> ' + pathPrefix + pathLastFolder;

      dlgext.dopparam.pathAI.sPath.text    = textDlgPathAI;

      dlgext.dopparam.pathAI.sPath.helpTip = destFolderEncode;

    }

  }

// Check If enter only digit 0-9

// Проверяем ввод только цифр 0-9

  win.digit12.name2.e.onChanging = function () {

    ChangeEANInput ();

  }

// If Pages >1 Get Path for saved AI files

  dlgext.dopparam.pages.ePages.onChanging = function () {

    var chngPages = parseInt (dlgext.dopparam.pages.ePages.text);

    if (chngPages < 1) {

      //destFolder = null;

      dlgext.dopparam.pages.ePages.text = '1';

    }

  }

  function ChangeEANInput () {

    nowEnter     = win.digit12.name2.e.text;

    var vPattern = /[^0-9]/;

    var noneD    = /\D/g;

    var result   = vPattern.test(nowEnter);

    if (result == true) {

      nowEnter                 = nowEnter.replace(noneD, "");

      win.digit12.name2.e.text = nowEnter;

      alert ('Only numbers are permitted for this field.');

    }

    if (nowEnter.length > 12) {

      alert ('You enter more 12 digit');

      nowEnter                 = nowEnter.substring(0, 12);

      win.digit12.name2.e.text = nowEnter;

    }

    var chk13 = SUM13 (nowEnter);

    EAN                       = nowEnter + chk13;

    win.digit12.name2.sh.text = chk13;

  }

// Height  field onChange

  dlgext.dopparam.heightBarcode.eHeight.onChanging = function ChangeHeghtInput () {

    blkH         = dlgext.dopparam.heightBarcode.eHeight.text;

    var vPattern = /[^0-9]/;

    var noneD    = /\D/g;

    var result   = vPattern.test(blkH);

    if (result == true) {

      blkH                                       = blkH.replace(noneD, "");

      dlgext.dopparam.heightBarcode.eHeight.text = blkH;

      alert ('Only numbers are permitted for this field.');

    }

    if (blkH.length > 4) {

      alert ('You enter more 4 digit');

      blkH                                       = blkH.substring(0, 4);

      dlgext.dopparam.heightBarcode.eHeight.text = blkH;

    }

    if (parseInt (blkH) < 10) {

      alert ('You enter less then 10 mm');

      dlgext.dopparam.heightBarcode.eHeight.text = '10';

    }

  }

// OK botton Click

  win.buttons.okBtn.onClick = function actionPlace () {

    var enterDigits = win.digit12.name2.e.text.length;

    var newLayer    = dlgext.dopparam.name3.chkLayer.value;

    var enterScale  = parseInt (dlgext.dopparam.name3.eScale.text);

    var ColMatrix   = parseInt (dlgext.dopparam.name4.eColumn.text);

    var RowMatrix   = parseInt (dlgext.dopparam.name4.eRow.text);

    var DistRow     = parseInt (dlgext.dopparam.name5.eDistanceX.text);

    var DistCol     = parseInt (dlgext.dopparam.name5.eDistanceX.text);

    Pages           = parseInt (dlgext.dopparam.pages.ePages.text);

    var First12     = "";

    var GrHeight    = 0;

    //stepToNext++;

    var posXGroup      = win.coord.name1.e1.text;

    XGr                = parseInt (posXGroup);

    var posYGroup      = win.coord.name1.e2.text;

    YGr                = parseInt (posYGroup);

    var FullPathToSave = null;

    var fileSaveBCode  = null;

    blkH               = parseInt (dlgext.dopparam.heightBarcode.eHeight.text);

    blkHE              = blkH + 1.65; // Height extendet bar

    if (dlgext.dopparam.name3.chkLayer.value == true) {

      chkLayer ();

    }

    if (enterDigits == 12) {

      if (( enterScale < 80) || (enterScale > 120))      // проверяем диапазон масштабирования 80-120%

        alert ('Wrong Scale. Enter 80-120% only');

      else {

        if (win.dopparamonoff.chkExtParam.value == true) {// if Extendet Paprameters

          if (Pages > 1) {

            //RowMatrix = RowMatrix/Pages;

            // Show ProgressBar

            win.dopparamonoff.progressTxt.visible  = true;

            win.dopparamonoff.progressSave.visible = true;

            win.update();

            for (var p = 1; p <= Pages; p++) {

              win.dopparamonoff.progressSave.value = p / Pages * 100; // update progressbar

              win.update();

              XGr    = parseInt (posXGroup);

              YGr    = parseInt (posYGroup);

              docRef = app.documents.addDocument(DocumentColorSpace.CMYK, docPreset);

              EANGroup = docRef.groupItems.add(); // добавляем группу

              hDoc               = docRef.height;

              wDoc               = docRef.width;

              docRef.rulerOrigin = Array (0, hDoc);

              if (dlgext.dopparam.name3.chkLayer.value == true) {

                chkLayer ();

              }

              for (var m = 0; m < RowMatrix; m++) {

                for (var n = 0; n < ColMatrix; n++) {

                  First12 = EAN.substring(0, 12);

                  win.digit12.name2.e.text = parseInt (First12) + stepToNext;

                  stepToNext               = 1;// Bad solution :(

                  ChangeEANInput ();

                  CreatEAN (); // Рисуем штрихкод

                  EANGroup.resize(enterScale, enterScale); // Масштабируем

                  GrWidth = EANGroup.width / MM;  // Вычисляем ширину группы с одним штрихкодом

                  GrHeight = EANGroup.height / MM;  // Вычисляем высоту группы с одним штрихкодом

                  XGr = XGr + GrWidth + parseInt (dlgext.dopparam.name5.eDistanceX.text); // Координата X следующего блока штрихкода

                  EANGroup = docRef.groupItems.add(); // добавляем группу

                }

                XGr = parseInt (posXGroup); // Координата X следующего блока штрихкода

                YGr = YGr + GrHeight + parseInt (dlgext.dopparam.name5.eDistanceY.text); // Координата Y следующего блока штрихкода

              }

              /**

               * Add by dumbm1 m_js@bk.ru 05-02-16

               * */

              fitArtb (fitValue, fitArtbFlag);

              FullPathToSave = destFolder + '/' + namePages + EAN + '.ai';

              // Create the file object to save to

              fileSaveBCode = new File (FullPathToSave);

              docRef.saveAs(fileSaveBCode);

              docRef.close();

            } // End For Pages

          } // End If Pages >1

          else {

            for (var m = 0; m < RowMatrix; m++) {

              for (var n = 0; n < ColMatrix; n++) {

                First12 = EAN.substring(0, 12);

                win.digit12.name2.e.text = parseInt (First12) + stepToNext;

                stepToNext               = 1; // Bad solution :(

                ChangeEANInput ();

                CreatEAN (); // Рисуем штрихкод

                EANGroup.resize(enterScale, enterScale); // Масштабируем

                GrWidth = EANGroup.width / MM;  // Вычисляем ширину группы с одним штрихкодом

                GrHeight = EANGroup.height / MM;  // Вычисляем высоту группы с одним штрихкодом

                XGr = XGr + GrWidth + parseInt (dlgext.dopparam.name5.eDistanceX.text); // Координата X следующего блока штрихкода

                EANGroup = docRef.groupItems.add(); // добавляем группу

              } // End For Column

              XGr = parseInt (posXGroup); // Координата X следующего блока штрихкода

              YGr = YGr + GrHeight + parseInt (dlgext.dopparam.name5.eDistanceY.text); // Координата Y следующего блока штрихкода

            } //End For Row

          } // End else if Pages =1

          /**

           * Add by dumbm1 m_js@bk.ru 05-02-16

           * */

          fitArtb (fitValue, fitArtbFlag);

          writeINI (); // Записываем INI файл

          actionCanceled (); // Заканчиваем скрипт

        }

        else {

          CreatEAN (); // Рисуем штрихкод

          EANGroup.resize(enterScale, enterScale); // Масштабируем

          /**

           * Add by dumbm1 m_js@bk.ru 05-02-16

           * */

          fitArtb (fitValue, fitArtbFlag);

          writeINI (); // Записываем INI файл

          actionCanceled (); // Заканчиваем скрипт

        }

      }

    }

    else

      alert ('You NO Enter 12 digits');

  }

//проверяем масштабирование

  dlgext.dopparam.name3.chkScale.onClick = function addScale () {

    if (dlgext.dopparam.name3.chkScale.value == true) {

      dlgext.dopparam.name3.eScale.enabled = true;

      enterScale                           = parseInt (dlgext.dopparam.name3.eScale.text);

    }

    else {

      dlgext.dopparam.name3.eScale.enabled = false;

      dlgext.dopparam.name3.eScale.text    = '100';

      enterScale                           = 100;

    }

  }

  win.buttons.cancelBtn.onClick = function exitDlg () {

    dlgext.close();

    win.close();

  }

// Проверяем ввод только цифр  и диапазон 80-120%

  dlgext.dopparam.name3.eScale.onChanging = function () {

    var nowEnterScale = dlgext.dopparam.name3.eScale.text;

    var vPattern      = /[^0-9]/;

    var noneD         = /\D/g;

    var result        = vPattern.test(nowEnterScale);

    if (result == true) {

      nowEnterScale                     = nowEnterScale.replace(noneD, "");

      dlgext.dopparam.name3.eScale.text = nowEnterScale;

      alert ('Only numbers are permitted for this field.');

    }

    if (nowEnterScale.length > 3) {

      alert ('You enter more 3 digit');

      nowEnterScale                     = nowEnterScale.substring(0, 3);

      dlgext.dopparam.name3.eScale.text = nowEnterScale;

    }

  }

  win.center();

  win.show();

  function actionCanceled () {

    dlgext.close();

    win.close();

  }

// Если нужен штрих-код на новом слое

  function chkLayer () {

    //create layer "EAN-13" if exist

    try {

      var stL = docRef.layers.getByName('EAN-13');

    }

    catch (ex) {

      var stL  = docRef.layers.add();

      stL.name = "EAN-13";

    }

    EANGroup.move(stL, ElementPlacement.PLACEATEND);

  }

  function replace_string (txt, cut_str, paste_str) {

    var f  = 0;

    var ht = '';

    ht     = ht + txt;

    f      = ht.indexOf(cut_str);

    while (f != -1) {

//цикл для вырезания всех имеющихся подстрок

      f = ht.indexOf(cut_str);

      if (f > 0) {

        ht = ht.substr(0, f) + paste_str + ht.substr(f + cut_str.length);

      }

      ;

    }

    ;

    return ht

  };

  function totext () {

    var over12 = dlg.alertBtnsPnl2.titleEt.text;

    if (over12.length > 12)

      dlg.alertBtnsPnl2.titleEt.text = over12.substring(0, 12);

    var chk13                    = SUM13 (over12);

    dlg.alertBtnsPnl2.TirSt.text = chk13;

    EAN                          = over12 + chk13;

  }

  function CreatEAN () {

    zX = 5;

    zY = 5;

    var chkSum13 = SUM13 (EAN);

// Начинаем рисовать штрихкод

    SE ();                                                                // стартовый блок

    zX += blkE;                                                        // смещение от первого блока

    numBlokA1 ();                                                    // первый цифровой блок. Он всегда тип А

    switch (EAN.charAt(0)) {

      case '0':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[0].charAt(j - 1), j); //  в зависимости от первой цифры кода выбираем последовательность АВ блоков из таблицы

          zX += blkD;

        }

        CENTER ();                                       // центральный блок

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);                                    // правая часть штрихкода - блок С

          zX += blkD;

        }

        break;

      case '1':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[1].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '2':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[2].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '3':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[3].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '4':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[4].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '5':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[5].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '6':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[6].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '7':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[7].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '8':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[8].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

      case '9':

        for (var j = 2; j < 7; j++) {

          numBlokAB (tablEAN[9].charAt(j - 1), j);

          zX += blkD;

        }

        CENTER ();

        zX += blkC;

        for (var u = 7; u < 13; u++) {

          numBlokC (u);

          zX += blkD;

        }

        break;

    }

    SE ();           // конечный блок

    textEAN (); // Create digit TEXT for barcode

    EANGroup.position = Array (XGr * MM, -YGr * MM); // Move  group barcode to position

    redraw ();

  }

//============== Function create text number code

  function textEAN () {

    zX                                                   = 5;

    zY                                                   = 5;

    var pointTextRef1                                    = EANGroup.textFrames.add();

    pointTextRef1.textRange.size                         = 9;

    pointTextRef1.contents                               = EAN.charAt(0);

    pointTextRef1.top                                    = (zY - blkH) * MM;

    pointTextRef1.left                                   = (zX - 2) * MM;

    pointTextRef1.textRange.characterAttributes.textFont = textFonts.getByName("ocrb10");

    var pointTextRef2                                    = EANGroup.textFrames.add();

    pointTextRef2.textRange.size                         = 9;

    pointTextRef2.contents                               = EAN.substring(1, 7);

    pointTextRef2.top                                    = (zY - blkH) * MM;

    pointTextRef2.left                                   = (zX + 1) * MM;

    pointTextRef2.textRange.characterAttributes.textFont = textFonts.getByName("ocrb10");

    var pointTextRef3                                    = EANGroup.textFrames.add();

    pointTextRef3.textRange.size                         = 9;

    pointTextRef3.contents                               = EAN.substring(7, 13);

    pointTextRef3.top                                    = (zY - blkH) * MM;

    pointTextRef3.left                                   = (zX + 16) * MM;

    pointTextRef3.textRange.characterAttributes.textFont = textFonts.getByName("ocrb10");

  }

//============ Функция отрисовки первого блока левой части. Он всегда типа А

  function numBlokA1 () {

    switch (EAN.charAt(1)) {

      case '0':

        A_0 ();

        break;

      case '1':

        A_1 ();

        break;

      case '2':

        A_2 ();

        break;

      case '3':

        A_3 ();

        break;

      case '4':

        A_4 ();

        break;

      case '5':

        A_5 ();

        break;

      case '6':

        A_6 ();

        break;

      case '7':

        A_7 ();

        break;

      case '8':

        A_8 ();

        break;

      case '9':

        A_9 ();

        break;

    }

    zX += blkD;

  }

//============ Функция отрисовки правой части штрихкода. Он всегда типа С

  function numBlokC (numC) {

    switch (EAN.charAt(numC)) {

      case '0':

        C_0 ();

        break;

      case '1':

        C_1 ();

        break;

      case '2':

        C_2 ();

        break;

      case '3':

        C_3 ();

        break;

      case '4':

        C_4 ();

        break;

      case '5':

        C_5 ();

        break;

      case '6':

        C_6 ();

        break;

      case '7':

        C_7 ();

        break;

      case '8':

        C_8 ();

        break;

      case '9':

        C_9 ();

        break;

    }

  }

//============ Функция отрисовки блока левой части начиная со второй позиции.  В зависимости от таблицы numBlokAB.

  function numBlokAB (ab, digBlok) {

    switch (ab) {

      case 'A':

        switch (EAN.charAt(digBlok)) {

          case '0':

            A_0 ();

            break;

          case '1':

            A_1 ();

            break;

          case '2':

            A_2 ();

            break;

          case '3':

            A_3 ();

            break;

          case '4':

            A_4 ();

            break;

          case '5':

            A_5 ();

            break;

          case '6':

            A_6 ();

            break;

          case '7':

            A_7 ();

            break;

          case '8':

            A_8 ();

            break;

          case '9':

            A_9 ();

            break;

        }

        break;

      case 'B':

        switch (EAN.charAt(digBlok)) {

          case '0':

            B_0 ();

            break;

          case '1':

            B_1 ();

            break;

          case '2':

            B_2 ();

            break;

          case '3':

            B_3 ();

            break;

          case '4':

            B_4 ();

            break;

          case '5':

            B_5 ();

            break;

          case '6':

            B_6 ();

            break;

          case '7':

            B_7 ();

            break;

          case '8':

            B_8 ();

            break;

          case '9':

            B_9 ();

            break;

        }

        break;

    }

  }

// расчет контрольного числа - 13 цифры.

  function SUM13 (EAN12) {

    var sumSt1;

    var sumSt2;

    if (EAN12.length < 12)

      sumSt2 = "<?>";

    else {

      sumSt1 = parseInt (EAN12.charAt(1)) + parseInt (EAN12.charAt(3)) + parseInt (EAN12.charAt(5)) + parseInt (EAN12.charAt(7)) + parseInt (EAN12.charAt(9)) + parseInt (EAN12.charAt(11));

      sumSt1 *= 3;

      sumSt1 += parseInt (EAN12.charAt(0)) + parseInt (EAN12.charAt(2)) + parseInt (EAN12.charAt(4)) + parseInt (EAN12.charAt(6)) + parseInt (EAN12.charAt(8)) + parseInt (EAN12.charAt(10));

      sumSt2 = sumSt1 % 10;

      if (!(sumSt2 == 0)) {

        sumSt2 = 10 - sumSt2;

      }

      else {

        sumSt2 = 0;

      }

    }

    return sumSt2;

  }

// функция отрисовки прямоугольника (левый угол X, левый угол Y, ширина, высота, делать ли прямоугольник guideline, залочить прямоугольник) с возможностью  сделать его  в виде guideline

  function rectGuide (y1, x1, RGw, RGh, gd, lock) {

    var rect     = EANGroup.pathItems.rectangle(x1 * MM, y1 * MM, RGw * MM, RGh * MM);

    rect.stroked = true;

    rect.filled  = false;

    rect.guides  = gd; // это св-во как раз и делает направляющие из линии

    rect.locked = lock; //заблокироваnm направляющие,

  }

//функция отрисовки прямоугольника (левый угол X, левый угол Y, ширина, высота, цвет заливки) без обводки

  function rect (y1, x1, Rw, Rh, colorFill) {

    var rect = EANGroup.pathItems.rectangle(x1 * MM, y1 * MM, Rw * MM, Rh * MM);

    rect.stroked   = false;

    rect.filled    = true;

    rect.fillColor = colorFill;

  }

// Отрисовка  блоков тип A, B, C

  function A_0 () {

    rect (zX + blk * 3, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function A_1 () {

    rect (zX + blk * 2, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function A_2 () {

    rect (zX + blk * 2, zY, blk, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function A_3 () {

    rect (zX + blk, zY, blk * 4, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function A_4 () {

    rect (zX + blk, zY, blk, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function A_5 () {

    rect (zX + blk, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function A_6 () {

    rect (zX + blk, zY, blk, blkH, barColor);

    rect (zX + blk * 3, zY, blk * 4, blkH, barColor);

  }

  function A_7 () {

    rect (zX + blk, zY, blk * 3, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function A_8 () {

    rect (zX + blk, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 4, zY, blk * 3, blkH, barColor);

  }

  function A_9 () {

    rect (zX + blk * 3, zY, blk, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function B_0 () {

    rect (zX + blk, zY, blk, blkH, barColor);

    rect (zX + blk * 4, zY, blk * 3, blkH, barColor);

  }

  function B_1 () {

    rect (zX + blk, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function B_2 () {

    rect (zX + blk * 2, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 5, zY, blk * 2, blkH, barColor);

  }

  function B_3 () {

    rect (zX + blk, zY, blk, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_4 () {

    rect (zX + blk * 2, zY, blk * 3, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_5 () {

    rect (zX + blk, zY, blk * 3, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_6 () {

    rect (zX + blk * 4, zY, blk, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_7 () {

    rect (zX + blk * 2, zY, blk, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_8 () {

    rect (zX + blk * 3, zY, blk, blkH, barColor);

    rect (zX + blk * 6, zY, blk, blkH, barColor);

  }

  function B_9 () {

    rect (zX + blk * 2, zY, blk, blkH, barColor);

    rect (zX + blk * 4, zY, blk * 3, blkH, barColor);

  }

  function C_0 () {

    rect (zX, zY, blk * 3, blkH, barColor);

    rect (zX + blk * 5, zY, blk, blkH, barColor);

  }

  function C_1 () {

    rect (zX, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 4, zY, blk * 2, blkH, barColor);

  }

  function C_2 () {

    rect (zX, zY, blk * 2, blkH, barColor);

    rect (zX + blk * 3, zY, blk * 2, blkH, barColor);

  }

  function C_3 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 5, zY, blk, blkH, barColor);

  }

  function C_4 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 2, zY, blk * 3, blkH, barColor);

  }

  function C_5 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 3, zY, blk * 3, blkH, barColor);

  }

  function C_6 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 2, zY, blk, blkH, barColor);

  }

  function C_7 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 4, zY, blk, blkH, barColor);

  }

  function C_8 () {

    rect (zX, zY, blk, blkH, barColor);

    rect (zX + blk * 3, zY, blk, blkH, barColor);

  }

  function C_9 () {

    rect (zX, zY, blk * 3, blkH, barColor);

    rect (zX + blk * 4, zY, blk, blkH, barColor);

  }

// Отрисовка  блоков типа Начало и Конец

  function SE () {

    rect (zX, zY, blk, blkHE, barColor);

    rect (zX + blk * 2, zY, blk, blkHE, barColor);

  }

// Отрисовка  блоков тип в Центре

  function CENTER () {

    rect (zX + blk, zY, blk, blkHE, barColor);

    rect (zX + blk * 3, zY, blk, blkHE, barColor);

  }

  function writeINI () {

    myINIFile = new File (pathJSX + '/barcode.ini');

    myINIFile.open('e'); // 'e' read-write open file.

    myINIFile. writeln(win.coord.name1.e1.text);

    myINIFile. writeln(win.coord.name1.e2.text);

    if (dlgext.dopparam.name3.chkLayer.value == true)

      myINIFile. writeln('Y');

    else

      myINIFile. writeln('N');

    if (dlgext.dopparam.name3.chkScale.value == true) {

      myINIFile. writeln('Y');

      myINIFile. writeln(dlgext.dopparam.name3.eScale.text);

    }

    else {

      myINIFile. writeln('N');

      myINIFile. writeln('100');

    }

    if (win.dopparamonoff.chkExtParam.value == true) {

      myINIFile. writeln('Y');

      myINIFile. writeln(dlgext.dopparam.pages.ePages.text);

      myINIFile. writeln(dlgext.dopparam.name4.eColumn.text);

      myINIFile. writeln(dlgext.dopparam.name4.eRow.text);

      myINIFile. writeln(dlgext.dopparam.name5.eDistanceX.text);

      myINIFile. writeln(dlgext.dopparam.name5.eDistanceY.text);

    }

    else {

      myINIFile. writeln('N');

      myINIFile. writeln(dlgext.dopparam.pages.ePages.text);

      myINIFile. writeln(dlgext.dopparam.name4.eColumn.text);

      myINIFile. writeln(dlgext.dopparam.name4.eRow.text);

      myINIFile. writeln(dlgext.dopparam.name5.eDistanceX.text);

      myINIFile. writeln(dlgext.dopparam.name5.eDistanceY.text);

    }

    myINIFile. writeln(destFolder);

    myINIFile.close();

  }

} ())