Блог

Переменные данные в Adobe Illustrator

  • Цветков Максим
  • 14.05.2015

Работа многих дизайнеров однообразна. Адаптировать листовку от звездного дизайнера под контактные данные филиалов компании, вставить кучу фотографий в шаблон визитки, экспортировать пригодные для печати графики с отчетностью за день. Все это требует много времени, сил, и не приносит никакого удовольствия. Обычно дизайнеры предпочитают творить, нежели заниматься вырезкой/вставкой контента. К счастью, Illustrator позволяет динамически изменять объекты в макете и экономить нам кучу времени, как и inDesign. Давайте изучим эту не очень популярную функцию.

Во первых, вам нужно разработать дизайн-шаблон, состоящий из связанных (linked) изображений, текста, графиков или прочих объектов. Каждый из этих объектов вы также сможете скрыть/показать при работе с переменными данными в Illustrator.

Динамические данные в Illustrator
Динамические данные в Illustrator

Теперь назначим переменные. Выберите объект, который Вы хотите сделать динамическим, откройте панель Variables. Нажмите кнопку Make Object Dynamic для создания cвязанной переменной (Linked File variable) или кнопку Make Visibility Dynamic в палитре Variables. Как вы понимаете, если вы используете текстовую строковую переменную, то и меняться будет текст в текстовом объекте.

Переменные определяют признаки динамических объектов и могут быть следующих типов:

  • Graph Data (Данные для графика) — позволяют создавать графики;
  • Linked File (Связанный файл) — предназначены для создания динамических изображений, которые связаны с файлами картинок или других прилинкованных документов. Обязательно через File=>Place;
  • Text String (Текст) — создание динамического текста;
  • Visibility (Видимый) — видимость объекта или группы объектов. В XML файле она будет меняться параметрами true/false.
  • Тип не задан — вы зададите тип в дальнейшем. Тип объекта в любом случае будет присвоен.

Когда вы создаете переменные, желательно их переименовывать. Переменная 1 — ужасное название, а вот name_person уже выглядит куда понятнее. Вы можете назначить на объект две переменные, если одна из этих переменных Visibility.

Нажмите кнопку Capture data set в палитре Variables, чтобы зафиксировать данные переменных, отображенных на холсте. И затем выберите Save Variable Library из меню палитры Variables. Получаем XML-шаблон, который клиент должен заполнить.

Создание динамического текста в Illustrator
Создание динамического текста в Illustrator

А теперь представим, что мы находимся на стороне клиента, и заполнять все это безобразие придется нам же. Можно пойти к программисту, показать созданный XMLник, рассказать что к чему. Программист привяжет переменные и наборы данных к имеющейся базе данных, и экспортирует все в подходящем виде. Вы вернетесь в панель Variables, выберите Load Variable Library, и загрузите отредактированную библиотеку переменных. Но, к сожалению, этот вариант получения XML редко удается осуществить. В большинстве случаев заполнять данные в нужном формате вы будете собственноручно.

Уверен, вам отдадут простой файл формата Excel/CSV, со словами, что менеджеры слишком заняты и не собираются решать проблемы дизайнеров. Многие ушлые умы сразу прикинут, что в этом случае можно по старинке использовать XML, экспортированный из FileMaker Pro. Этот способ работает в InDesign, но не в Illustrator. Придется поработать ручками в Excel. В Excel важно обратить внимание, что названия первой строки это названия переменных для Illustrator’а. Сохраняем файл в формате ods, csv, либо xls. Далее нам нужно конвертировать полученный файл в XML, так как Illustrator не умеет обрабатывать ничего другого. Идем на онлайн-сервис (которых много), и методом копипаста создаем себе XML файл.

Загнать данные в Illustrator можно и с помощью этого замечательного скрипта. Скрипт мне представляется наиболее хорошим способом перегнать данные, ведь он позволяет сохранить XML из CSV / TXT, работает со всеми типами данных, в том числе true/false для видимости объекта.

В итоге, каким бы способом для генерации XML мы не действовали, нужно загрузить полученный XML обратно в программу. И если все сделано правильно, в окне variables станут активны стрелочки для переключения между подгруженными данными.

variable_illustrator

Теперь нам придется воспользоваться пакетной обработкой (batch). Для начала имена объектов должны соответствовать соглашениям об именовании XML, так что проследуйте в настройки и поставьте вот такую полезную галочку.

setting_illustrator

Щелкая кнопку Next data set в палитре Variables, убедитесь, что все данные легли в шаблон красиво и аккуратно. Мы будем использовать пакетную обработку, чтобы сохранить каждую визитную карточку. Но сначала, мы должны создать действие (action), которое сохранит работу в необходимом формате с правильными настройками для печати.

По окончании работы сохраните шаблон в формате SVG, воспользовавшись командой File=>Save As (Файл=>Сохранить как). Это нужно для продолжения работы в других продуктах Adobe, например Adobe® Graphics Server, и тогда разработчик сможет связать напрямую данные сервера и ваш макет. Для этого нужно в настройках при сохранении поставить галочку «Включить данные Adobe Graphics Server».

Создадим Actions. Все действия аналогичны созданиям экшена в Photoshop. Нажмите New Action button. Введите название вашего экшена, и нажмите Record. Сохраните шаблон в желаемом формате и прекратите запись экшена. Теперь нам нужна пакетная обработка. Выберите Batch в диалоговом меню палитры Action и выберите наш свежесозданный экшен.

Пакетная обработка в Illustrator
Пакетная обработка в Illustrator

Для Source выберите созданный Data set. Для Destination выберите None, и определите имя файла в File Name. Нажмите OK, чтобы запустить пакетную обработку. Готово, вы сохранили себе пару часов времени и освоили variables illustrator, поздравляю.

Вы можете создавать более продвинутые скрипты. Например, на текущем месте работы я разработал скрипт для перевода макетов на другой язык. Из Adobe Illustrator перегоняется текст в Excel. Один клик генерирует таблицу Exсel с текстом из макета, после перевода таблица загружается обратно в Adobe Illustrator и весь текст заменяется на переведенный.

Если у вас проблема со скриптами, часто помогает команда defaults write com.adobe.CSXS.9 PlayerDebugMode 1. Любой .zxp необходимо переименовать в .zip, распаковать и перекинуть в папку ~/Library/Application Support/Adobe/CEP/extensions.

16 комментариев

  1. Евгений

    27.08.2016

    Доброй ночи, срочный вопрос. Как правильно обмениваться данными между Illustrator в другим софтом?

    • your-scorpion

      27.08.2016

      Настройки illustrator: включите AICB и Preserve Path в File Handling Preference, это предпочтения для буфера обмена. Без этой галочки файлы будут вставляться в другие редакторы как bitmap. Если нужно увидеть превью файла после импорта в другую программу, сохраните с галочкой Create PDF Compatible File. Эта галочка спасла много жизней: если ваш прилинкованный .ai файл был утерян, то до тех пор, пока импортированный файл содержит PDF превью, вы сможете его вытащить и использовать как картинку.

      inDesign: если хотите вставить редактируемый текст, в inDesign выберите Preferences -> Clipboard Handling и выберите Text Only (без форматирования). Либо выберите All Information в том же меню, если нужно сохранить appearance, паттерны, прозрачность, стили из Word. Подберите подходящие вам настройки и сохраните отдельно для doc и для rtf.
      При импорте файла можно нажать галочку Show Import Options и с помощью Object -> Object Layer Options и выбрать, какие слои отображать (работает с форматами psd/pdf/ai/indd).

      В Photoshop: не умеет импортировать векторную графику. Единственный путь которым вы можете получить кривые это буфер обмена. Меньше проблем возникает, если импортировать сложные данные как Smart Object с последующим добавлением Smart Filters. Тогда можно работать без деградации пикселей.
      Из Photoshop: для сохранения редактируемого текста, откройте Illustrator’ом файл PSD или с помощью File -> Place без галочки Link. И поставьте галочку Convert to Layers. Adjustment layers в illustrator импортировать нельзя, нужно объединять слои. Почитайте более подробный гайд в разделе «из Photoshop и обратно».

      Если нужно будет сбросить настройки к заводским, зажмите во время старта программы Cmd-Opt-Ctrl-Shift для MacOS или Alt-Crtl-Shift для Windows.

      Текстовые редакторы: стандартный общепринятый вариант это сохранить .doc в .docx, а потом обратно в .doc. Потом можно сохранить в .rtf и после скопировать в нужный редактор с помощью Ctrl+D. Если не помогло, то скопировать весь текст в docs.google.com, и пересохранить оттуда как .docx или .rtf.

      Если начинаются проблемы, то попробуйте скрипт DoTextOk. Принудительные переносы (31-й символ ASCII) в режиме TextOnly из Preferences -> Clipboard Handling не переносятся. Если переносить текст через копипаст, то переносы перенесутся как дискреционные.

  2. Дивин

    13.12.2016

    Максим, привет! Подскажи, пожалуйста, есть ли возможность из одного файла в отдельности сохранить все имеющиеся в нем объекты (которых более 100)? Собственно, как сохранить ВЫБРАННЫЙ объект через Action — понятно, но там нет возможности научить программу ВЫБИРАТЬ отдельно эти объекты. Перелопатил весь рунет, но так и не нашел ответа. В твоей статье нашел много интересного, но все же задача стоит немного другая. Спасибо!!

    • your-scorpion

      15.12.2016

      Все имеющиеся объекты расположены хаотично, или структурированы на разных слоях/артбордах? Сохранить в какой формат?

      Если хаотично, выделите все объекты, и выберите в панели Align -> Horizontal distribute space. Это позволит разместить все объекты друг за другом с одинаковым интервалом. После этого нужно создать много артбордов для объектов. Артборды можно делать из квадратных shape. Создайте столько же квадратов, сколько объектов вам нужно экспортировать (для этого хорошо подойдет Blend Tool). И примените к квадратам функцию Object > Artboards > Convert to Artboards, вы получите артборды.

      Либо использовать скрипт:

      function make_artboards(){  
          // written by Qwertyfly  
          // this may not work as expected if art contains Clipping paths  
          if(app.documents.length==0){return;}  
          var doc = app.activeDocument;  
          var grps = doc.pageItems;  
          var abs = doc.artboards;  
          var c = 0;  
          for(var i=0; i<grps.length; i++){  
              if(grps[i].parent.typename == "Layer"){  
                  c++  
              }  
          }  
          if(c<=100){  
              for(var i=1; i<abs.length; i++){  
                  abs[i].remove();  
              }  
              for(var i=0; i<grps.length; i++){  
                  if(grps[i].parent.typename == "Layer"){  
                      //this one needs an artboard  
                      var box = grps[i].visibleBounds;  
                      var AB = doc.artboards.add(box);  
                      if(!i){abs[0].remove();}  
                  }  
              }  
          }else{  
              alert(c + " is too many items, max of 100 artboards per document");  
          }  
      }  
      make_artboards();

      В результате проделанных действий у вас будут артборды, и внутри них объекты. Осталось использовать скрипт для экспорта слоев и артбордов. Либо File -> Export -> Export for screen.

      • Дивин

        09.01.2017

        СпасибО! Как раз воспользовался этим вариантом. Правда объектов более 100, поэтому пришлось в два этапа сохранять, но все равно экономия времени.

  3. Евгений

    16.12.2016

    Доброго времени суток.

    Когда экспортирую варианты пакетной обработкой (что «Экспорт — JPG», что «Сохранить копию — PDF), Иллюстратор просто поочерёдно перезаписывает один и тот же файл.

    Что я делаю не так?

    http://i.imgur.com/0MK5MRO.png

    • your-scorpion

      16.12.2016

      Причин может быть много.
      Но почти наверняка: поставьте галочку «Override Action “Save” Commands». У вас этот чекбокс называется «Игнорировать команды Открыть».

      Также, попробуйте в окне «Пакетной обработки» указать папку, куда сохранять файлы.

  4. Мария Марганец

    26.05.2019

    Здравствуйте, а можно в люстре как-то порезать картинку на множество составляющих?

    • Цветков Максим

      26.05.2019

      Поверх картинки рисуете белые плашки в режиме multiple, выделяете все, и применяете Flatten Transparency с настройкой Vector 100% и Preserve alpha transparency.

  5. Dasha

    06.10.2020

    Здраствуйте!
    Помогите пожалуйста! Нигде не могу найти информацию по данному вопросу.
    Есть данные из экселя для постройки графиков. Графиков очень много.
    Мне для верстки буклета нужно построить и вставить туда множество графиков. Как можно упростить работу?
    Верстаю я в индизайне, но если там это не реализовать, то может можно в иллюстраторе.
    Я делала это вручную, но теперь хотелось бы это как-то оптимизировать. Подтаскивать текстовые данные из экселя в индизайн у меня получается. А вот с графиками не знаю, что можно сделать. Графики обычные, не сложные.

    • Цветков Максим

      07.10.2020

      Так в вас уже есть в Excel графики или только данные для графиков?
      Если графики уже готовы, то можно экспортировать их как картинки и с помощью Data Merge расставить.
      Если только данные для графиков, то есть специальный шрифт для создания графиков в inDesign и плагины.

      • Dasha

        08.10.2020

        Есть в Excel данные для графиков.
        Почти все методы эти пробовала.
        Для прошлого раза, когда все делалось вручную, то строились графики в Excel, потом сохранялись, а потом вручную вставлялись. Но, заметила, что Excel не позволяет сделать картинки с графиками одного размера, всегда разное расстояние вокруг графика. Приходилось после их вставки в индизайн даже их еще выравнивать, чтобы они шли ровно как надо. То есть, если все же можно их как-то в одном размере сохранить и построить все сразу и сохранить все сразу в несколько кликов, было бы круто.
        C data merge пересмотрела кучу видео, пробовала делать, не выходит. Хотя все делаю как в видео. Указываю правильный путь и в названии собаку ставлю. Но когда уже работаю в индизайне, то текст подтягивается, а картинки нет. Ругается «Источник данных ссылается на один или несколько отсутствующих изображений». Дальше дело не идет. И несколько раз пробовала, и путь проверяла. Не выходит. Программа у меня лицензионная.
        Про спец шрифт тоже знаю. Но пока не понимаю, как подтянуть автоматически эти данные с экселя и еще и таких цветов, как нужно. Плюс там же все вроде как в процентах надо указывать, а в экселе не всегда так.
        Было бы здорово, если бы вы смогли мне помочь. Потому что мне это очень нужно, я перерыла все возможные источники, и пока никак не могу это решить :(

        • Цветков Максим

          08.10.2020

          Надо видеть, что за графики и в каком виде они у вас в Excel. Вы можете сохранить из экселя страницу как Web Page (формат файла), и в папке имя_файла_files будут все ваши графики. Предположим, что вариант с экспортом графиков из Excel устроит (если нет — дайте знать), и теперь проблема в inDesign.

          Сама по себе ошибка «Источник данных ссылается на один или несколько отсутствующих изображений» как раз говорит о причине: неправильный путь, формат, нет одного файла, кириллица в пути.
          Чтобы этого избежать, используйте скрипт. Все графики должны быть в одной папке:

          Запускаете скрипт из inDesign и указываете ему папку с картинками, скрипт создаст корректную .csv с правильными путями в папке с картинками:

          Выбираете созданную .csv в DataMerge, и далее по уроку.

          Касательно разного размера графиков, есть функция Content Placement Options, она должна суметь решить эту проблему в приемлемой степени.

          Вот скрипт. Сам скрипт сохраняете в формате .jsx и закидываете в папку скриптов inDesign:

          Array.prototype.inArray = function(obj){
              var arrMax = this.length-1;
              for(var i=arrMax; i>=0; i--){
                  if(this[i]===obj){
                      return true;
                  }
              }   
              return false;
          }
           
          var csvParser = (function(){
              var csvFile;
              return{
                  create:function(fo){
                    csvFile=File(fo+"/"+fo.name+".csv");  
                  },
                  write:function(csvContent){
                      csvFile.open('w');
                      csvFile.encoding="UTF-8";
                      csvFile.write(csvContent);
                      csvFile.close();
                  },
                  execute:function(){
                     csvFile.execute(); 
                  },
                  getCSV:function(){
                      return csvFile;
                  }
              }
          })();
           
          function imagesToCSVthenChoose(){
              var doc,
                  fo,
                  fis,
                  fiMax,
                  fi,
                  fiName,
                  fiPath,
                  imgFormats=["eps","jpg","tif","psd","pdf","png","ai","bmp","jpeg"],
                  imgFormatMax = imgFormats.length-1,
                  imgOk = [],
                  csvContent = [], 
                  ext,
                  csvLine=[],
                  csvSep=",";
           
              if(app.documents.length==0){
                  alert("No documents open !");
                  return
              }
           
              doc=app.activeDocument;
              fo = Folder.selectDialog("Please choose a folder with images");
              if(!fo) return
           
              fis = fo.getFiles();
              fiMax=fis.length;
           
              for(var i=0; i<fiMax; i++){
           
                  fi=fis[i];
                  ext = fi.name.match(/.([a-z]+)$/i);
                  if(ext==null) continue;
                  ext = ext[1].toLowerCase();
                  if(!imgFormats.inArray(ext)) continue;
                  fiName = decodeURI(fi.name);
                  fiPath=decodeURI(fi.fsName);
                  csvContent.push(fiName+csvSep+fiPath);
              }
           
             csvContent = "Name"+csvSep+"@imagesr"+csvContent.join("r");
             csvParser.create(fo);
             csvParser.write(csvContent);
           
          }
           
          imagesToCSVthenChoose();

          или скачиваете его отсюда.

          • Dasha

            08.10.2020

            Спасибо большое!
            Со скриптами попробую, пока на примере просто любых изображений. Правда, почему-то у меня в индизайне на маке не могу найти где запускать скрипты, в папку я их добавляла нужную.
            Графики у меня будут круговые и два вида линейных гистограмм. Проблема в том, что они не построены и мне нужно их строить вручную. Можно ли как-то это сделать быстро? Может не в экселе, а в иллюстраторе.

          • Dasha

            12.10.2020

            У меня получилось разобраться со скриптом, который создает корректную .csv с правильными путями в папке с картинками. Только вот дальше вопрос. Получается, что при запуске этого созданного csv в data merge подгружаются только картинки. А мне нужно, как у вас в примере с визиткой, и текст и картинки. Но при применении скрипта будут подгружаться только картинки.
            Еще вопрос по работе со вторым скриптом, который помогает сделать одинаковые размеры. Я его запускаю, также выбираю ту же папку с картинками и все. Больше ничего не происходит. Скажите пожалуйста как с ним работать.
            Также, повторюсь как уже сказала выше, так и не получается решить проблему как построить массово много графиков в любой программе, лишь бы это сократило время). Помогите пожалуйста советом.

  6. Сергей

    14.02.2021

    Доброго дня
    Подскажите пожалуйста:
    возможно ли в csv файле указать названия набора данных для переменных и связанных с ними динамических объектов которые будут импортированы в панель «Переменные» с помочью команды
    «Загрузить библиотеку перерменных».
    Если возможно то как ?
    Использую csv файл без этих данных и в этом случае название набора данных определяеться по умолчинию : «Набор данных 1, Набор данных 2 и т.д. » , что не устраивает. Использование xml файла не мой случай и скрипт тоже не хочу , хочу использовать для этих целей исключительно csv файл в котором бы прописывал названия набора данных еще в Excel , потом сохранял как csv файл, менял точку с запятой на запятую и импортировал бы это счастье в Иллюстратор в панель «Переменные».

Добавить комментарий для your-scorpion Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.