[AI CC-CC2022] Вставка имени файла в текстовый блок

  • Автор темы Автор темы Schekoch
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Schekoch

Топикстартер
12 лет на форуме
Сообщения
47
Реакции
2
Подскажите как сделать динамически меняющийся текст в иллюстраторе, содержащий имя файла, список используемых красок и дату.
Спасибо.
 
Можно использовать вот такой скрипт:
Код:
/**
* jsx for Ai MaratShagiev m_js@bk.ru 30.06.2016
*/

//@target illustrator

(function addDocInfo () {

  var doc = activeDocument,
      sws = doc.swatches;

  var lay = _getLay (doc);

  _delAllUnused ();

  var txtDocName = _addFrame (lay, [0, 0], doc.name);

  var txtSwatches = _addFrame (
    lay,
    [0, txtDocName.position[1] - txtDocName.height],
    _getSwsNames (sws)
  );

  var txtDate = _addFrame (
    lay,
    [0, txtSwatches.position[1] - txtSwatches.height],
    _formatDate (new Date ())
  )

  /**
   * LIB
   * */

  function _formatDate (date) {

    var dd = date.getDate ();
    if (dd < 10) dd = '0' + dd;

    var mm = date.getMonth () + 1;
    if (mm < 10) mm = '0' + mm;

    var yy = date.getFullYear () % 100;
    if (yy < 10) yy = '0' + yy;

    return dd + '.' + mm + '.' + yy;
  }

  function _getSwsNames (sws) {
    var swStr = '';
    for (var i = 0; i < sws.length; i++) {
      var sw = sws[i];
      swStr += sw.name + '; ';
    }
    return swStr;
  }

  function _delAllUnused () {
    var str = '/version 3' +
      '/name [ 12' +
      '    64656c416c6c556e75736564' +
      ']' +
      '/isOpen 0' +
      '/actionCount 1' +
      '/action-1 {' +
      '    /name [ 12' +
      '        64656c416c6c556e75736564' +
      '    ]' +
      '    /keyIndex 0' +
      '    /colorIndex 2' +
      '    /isOpen 0' +
      '    /eventCount 8' +
      '    /event-1 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_swatches)' +
      '        /localizedName [ 8' +
      '            5377617463686573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 11' +
      '        }' +
      '    }' +
      '    /event-2 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_swatches)' +
      '        /localizedName [ 8' +
      '            5377617463686573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 13' +
      '                44656c65746520537761746368' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-3 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_brush)' +
      '        /localizedName [ 5' +
      '            4272757368' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 8' +
      '        }' +
      '    }' +
      '    /event-4 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_brush)' +
      '        /localizedName [ 5' +
      '            4272757368' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 12' +
      '                44656c657465204272757368' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-5 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_styles)' +
      '        /localizedName [ 14' +
      '            47726170686963205374796c6573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 14' +
      '        }' +
      '    }' +
      '    /event-6 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_styles)' +
      '        /localizedName [ 14' +
      '            47726170686963205374796c6573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 20' +
      '                44656c6574652047726170686963205374796c65' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-7 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_symbol_palette)' +
      '        /localizedName [ 7' +
      '            53796d626f6c73' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 12' +
      '        }' +
      '    }' +
      '    /event-8 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_symbol_palette)' +
      '        /localizedName [ 7' +
      '            53796d626f6c73' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 13' +
      '                44656c6574652053796d626f6c' +
      '            ]' +
      '            /value 5' +
      '        }' +
      '    }' +
      '}';
    runAction ('delAllUnused', 'delAllUnused', str);
    function runAction (actName, setName, actStr) {
      _makeAct (actStr);
      app.doScript (actName, setName, false); // action name, set name
      app.unloadAction (setName, ""); // set name

      function _makeAct (actStr) {
        var f = new File ('~/ScriptAction.aia');
        f.open ('w');
        f.write (actStr);
        f.close ();
        app.loadAction (f);
        f.remove ();
      }
    }
  }

  function _addFrame (lay, pos, cont) {
    var doc           = lay.parent;
    var txtFrame      = lay.textFrames.add ();
    txtFrame.position = pos;
    txtFrame.contents = cont;
    return txtFrame;
  }

  function _getLay (doc) {
    var lay;
    try {
      lay = doc.layers.getByName ('_info_layer_');
    } catch (e) {
      lay      = doc.layers.add ();
      lay.name = '_info_layer_';
    }
    if (lay.pageItems) {
      lay.pageItems.removeAll ();
    }
    return lay;
  }

} ());
 
  • Спасибо
Реакции: Jeine и _MBK_
Дофига лишнего, но вцелом полезная вещь.
 
Немного почистил:
Код:
/**
* jsx for Ai MaratShagiev m_js@bk.ru 01.07.2016
*/

//@target illustrator

(function addDocInfo () {

  var doc = activeDocument,
      sws = doc.swatches;

  var lay = _getLay (doc);

  _delAllUnused ();

  var txtDocName = _addFrame (
    lay,
    [0, 0],
    doc.name + '\n' + _getSwsNames (sws) + '\n' + _formatDate (new Date ())
  );

  /**
   * LIB
   * */

  function _formatDate (date) {
    var dd = date.getDate ();
    if (dd < 10) dd = '0' + dd;

    var mm = date.getMonth () + 1;
    if (mm < 10) mm = '0' + mm;

    var yy = date.getFullYear () % 100;
    if (yy < 10) yy = '0' + yy;

    return dd + '.' + mm + '.' + yy;
  }

  function _getSwsNames (sws) {
    var swStr = '';
    for (var i = 0; i < sws.length; i++) {
      var sw = sws[i];
      swStr += sw.name + '; ';
    }
    return swStr;
  }

  function _addFrame (lay, pos, cont) {
    var doc           = lay.parent;
    var txtFrame      = lay.textFrames.add ();
    txtFrame.position = pos;
    txtFrame.contents = cont;
    return txtFrame;
  }

  function _getLay (doc) {
    var lay;
    try {
      lay = doc.layers.getByName ('_info_layer_');
    } catch (e) {
      lay      = doc.layers.add ();
      lay.name = '_info_layer_';
    }
    if (lay.pageItems) lay.pageItems.removeAll ();
    return lay;
  }

  function _delAllUnused () {
    var actStr = '/version 3' +
      '/name [ 12' +
      '    64656c416c6c556e75736564' +
      ']' +
      '/isOpen 0' +
      '/actionCount 1' +
      '/action-1 {' +
      '    /name [ 12' +
      '        64656c416c6c556e75736564' +
      '    ]' +
      '    /keyIndex 0' +
      '    /colorIndex 2' +
      '    /isOpen 0' +
      '    /eventCount 8' +
      '    /event-1 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_swatches)' +
      '        /localizedName [ 8' +
      '            5377617463686573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 11' +
      '        }' +
      '    }' +
      '    /event-2 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_swatches)' +
      '        /localizedName [ 8' +
      '            5377617463686573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 13' +
      '                44656c65746520537761746368' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-3 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_brush)' +
      '        /localizedName [ 5' +
      '            4272757368' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 8' +
      '        }' +
      '    }' +
      '    /event-4 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_brush)' +
      '        /localizedName [ 5' +
      '            4272757368' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 12' +
      '                44656c657465204272757368' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-5 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_styles)' +
      '        /localizedName [ 14' +
      '            47726170686963205374796c6573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 14' +
      '        }' +
      '    }' +
      '    /event-6 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_styles)' +
      '        /localizedName [ 14' +
      '            47726170686963205374796c6573' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 20' +
      '                44656c6574652047726170686963205374796c65' +
      '            ]' +
      '            /value 3' +
      '        }' +
      '    }' +
      '    /event-7 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_symbol_palette)' +
      '        /localizedName [ 7' +
      '            53796d626f6c73' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 17' +
      '                53656c65637420416c6c20556e75736564' +
      '            ]' +
      '            /value 12' +
      '        }' +
      '    }' +
      '    /event-8 {' +
      '        /useRulersIn1stQuadrant 0' +
      '        /internalName (ai_plugin_symbol_palette)' +
      '        /localizedName [ 7' +
      '            53796d626f6c73' +
      '        ]' +
      '        /isOpen 0' +
      '        /isOn 1' +
      '        /hasDialog 1' +
      '        /showDialog 0' +
      '        /parameterCount 1' +
      '        /parameter-1 {' +
      '            /key 1835363957' +
      '            /showInPalette -1' +
      '            /type (enumerated)' +
      '            /name [ 13' +
      '                44656c6574652053796d626f6c' +
      '            ]' +
      '            /value 5' +
      '        }' +
      '    }' +
      '}';

    var f = new File ('~/ScriptAction.aia');
    f.open ('w');
    f.write (actStr);
    f.close ();
    app.loadAction (f);
    f.remove ();
    app.doScript ('delAllUnused', 'delAllUnused', false); // action name, set name
    app.unloadAction ('delAllUnused', ""); // set name
  }

} ());
 
  • Спасибо
Реакции: Valentin, Jeine и Seysi
Я имел в виду, зачем удаление неиспользуемых свотчей, да еще и таким нетрадиционноориентированным способом в скрипт тащить? Сильно отвлекает и, кстати, повышает неустойчивость работы, хотя необходимость близка к нулю.
 
удаление неиспользуемых свотчей, да еще и таким нетрадиционноориентированным способом
Ясно, а какой более традиционный способ?
Если что, я конечно же поправлю. Это ведь так, на пробу ;)
 
Ясно, а какой более традиционный способ?
Да нет, тут, конечно, сложно что-либо прямо сделать с подобным нетрадиционноориентированным яваскриптом. Но я б, к примеру, не стал бы формировать AIA и загружать на лету прямо в скрипте - для иллюстрации хорошо, а в практической работе иногда вызывает много неприятных моментов.
Просто б создал его и подгрузил руками отдельно - не так красиво, но на порядок надежнее ;)
 
  • Спасибо
Реакции: Jeine и dumbm1
Не много в сторону - по скрипту - попробовал его...
1. Но он не ставит у меня почему-то в цвета весь CMYK, хотя пантоны пишет...
2. Логика вставки этого текстового блока какова? Если куда-то ставлю текстовый курсор, то скрипт его игнорирует...
Как это поправить?
 
Не много в сторону - по скрипту - попробовал его...
1. Но он не ставит у меня почему-то в цвета весь CMYK, хотя пантоны пишет...
2. Логика вставки этого текстового блока какова? Если куда-то ставлю текстовый курсор, то скрипт его игнорирует...
Как это поправить?
Вам же сразу сказали - сперва внятно сформулируйте свои хотелки, и напишите. А то местные ванги уже надорвались все.
С чего вы взяли, что скрипт должен каким то волшебным образом отслеживать положение курсора в текстовом блоке? В топикстартовом сообщении об этом ни слова. И что означает в переводе на человеческий
Но он не ставит у меня почему-то в цвета весь CMYK, хотя пантоны пишет.
'hmmm''hz'
 
  • Спасибо
Реакции: Jeine
1. Перечисление ВСЕХ используемых цветов: перечисления Cyan, Magenta, Yellow, Black - нет, есть только Registration и пантон (частный случай)
2. По поводу - курсора. Я вот и спрашиваю - КАК поправить скрипт, что бы он вписывал всю инфу в текущее (нужное) место

вот как-то так - помощь Ванги вроде не нужна - все просто )
 
1. Перечисление ВСЕХ используемых цветов: перечисления Cyan, Magenta, Yellow, Black - нет, есть только Registration и пантон (частный случай)
Насколько я понимаю, скрипт просто перечисляет все сватчи. Загрузите перед выполнением скрипта используемые сватчи из активного документа - он будет перечислять и их. Можно сделать для этого экшн и вставить его вызов в скрипт, как и удаление неиспользованных. А можно просто добавить загрузку перед удалением.
 
  • Спасибо
Реакции: Jeine и dandy
По поводу - курсора. Я вот и спрашиваю - КАК поправить скрипт, что бы он вписывал всю инфу в текущее (нужное) место
А вот тут мы, похоже, в большой беде. Иллюстратор - не индизайн, доступа к позиции текстового курсора из скриптинга у него, похоже что нету. Можно было бы как нибудь извернуться, скопировав нужный текст в клипбоард и вызвав app.paste(), но прямого доступа к клипбоарду тоже нет. Можно разве, что, вставлять текст в какое то фиксированное место выделенного целиком текстового блока 'hmmm'
 
  • Спасибо
Реакции: Jeine
проще так:

app.selection.contents = myText;
 
Статус
Закрыто для дальнейших ответов.