Кейс: автоматизируем верстку пропусков/бейджей со сложной персонализацией

Я рассказываю, как мы автоматизировали верстку более 800 пропусков/бейджей со сложной персонализацией (id, фото, фио, должность, чип) на примере реального проекта, с помощью PHP и Data Merge в Adobe InDesign.

 

  • Обновлено: 13 декабря 2019
  • Автор: Юрий Юрков
  • Время чтения: 10 минут

Вместо вступления...

Нам всегда интересно открывать для себя что-то новое, нестандартное. Когда приходят интересные заказы, это всегда повод для радости от того, что к реализации заказа можно подойти креативно и превратить рутинную работу в приятный процесс, сэкономив при этом массу времени, одновременно с высоким качеством исполнения. Не иначе как без магии тут не обходится :)

Кейс

Наша задача изготовить 800 пропусков для детского центра. Пропуска должны быть оснащены программируемым чипом MIFARE 1K, размер изделия должен быть 86*54 мм. Печать полноцветная двусторонняя, поверхность пропусков матовая. В каждом пропуске необходимо сделать пробой отверстия для крепления карабина ретрактора (такая рулетка, чтобы было удобно оттягивать пропуск к считывателю). Пропуск одновременно является и бейджем, поэтому на нём предполагается нанесение набора переменных данных: фото, ФИО, должность, ID номер. А также, будет несколько вариантов цветовых решений макета, для указания принадлежности к отделу, в котором владелец пропуска/бейджа работает.

В итоге, в шаблоне пропуска/бейджа будут следующие переменные:

  1. Фото
  2. ФИО
  3. Должность
  4. ID номер
  5. Цвет фона (картинка фона)

Чтобы верстать такой набор данных вручную, у верстальщика нервы должны быть как стальные канаты, времени уйдёт масса, то и дело будут возникать ошибки. Однако, выход есть!

Автоматизация заполнения переменных данных с помощью инструмента Data Merge (Объединение данных) программы Adobe InDesign

Для упрощения процесса верстки мы будем использовать инструмент Data Merge программы Adobe InDesign. Нам потребуется заранее подготовить шаблон макета, где мы определим области с переменными данными и таблицу с данными в виде специально подготовленного документа “источник данных”. Для того, чтобы InDesign мог корректно прочитать данные, их нужно упаковать согласно спецификации программы.

Приведу цитату из официального сайта программы Adobe InDesign:

Все, что необходимо для объединения данных, — это файл источника данных и целевой документ.

  • Файл источника данных содержит сведения, которые различаются в разных экземплярах целевого документа, например имена и адреса получателей в стандартном письме. Файл источника данных состоит из полей и записей. Поля содержат определенные данные, например имена компаний или почтовые индексы, а записи — это строки с полным набором данных, например с именем компании, адресом, городом, областью и почтовым индексом. Источником данных может быть файл с разделителями-запятыми (CSV) или файл с разделителями-табуляциями (TXT), где поля данных разделены запятыми или символами табуляции соответственно.
  • Целевой документ — это документ InDesign, который содержит заполнители полей данных, а также содержимое шаблона (текст и другие элементы, которые остаются неизменными в каждом объединенном документе).

Объединенный документ — это итоговый документ InDesign, содержащий шаблонные элементы целевого документа, которые повторяются столько раз, сколько необходимо для обработки каждой записи в источнике данных.

Подводные камни подготовки источника данных

Файлы источников данных обычно сохраняют в формате файла с разделителями-запятыми (CSV) или с разделителями-табуляциями (TXT).

Ссылка на мануал по Data Merge: https://helpx.adobe.com/ru/indesign/using/data-merge.html

Если клиент сделает все правильно, то мы получаем аккуратно заполненный файл со всеми данными и ссылками на внешние ресурсы (фото и другие графические элементы). Фотографии собраны в отдельной папке, обработаны и названия фото соответствуют данным в источнике данных. В этом случае, нам остаётся только подготовить шаблон и сформировать документ.

Но, как показывает практика, добится от клиента подобного формата предоставления данных не представляется возможным по причине, что это слишком сложно и не понятно. После долгих объяснений, все равно приходится переделывать. Что в принципе и понятно, автоматизация наша забота, а не клиентская. Поэтому, мы можем рассчитывать на получение данных в формате который удобен клиенту и с которым мы в дальнейшем сможем работать.

В данном кейсе, наши с заказчиком мнения сошлись на том, что персональные данные мы будем записывать прямо в название фото. Т.е. формат названия фотографии выглядел следующим образом:

ID_ФИО_Должность_цвет бейджа.jpg или 12345_Иванов Иван Иванович_Дворник_green.jpg В качестве разделителя используется символ нижнего подчёркивания “_”.

Основным преимуществом данного решения, является простота. Сфотографировали, внесли данные в название фото и готово. Все данные в одном месте их удобно просматривать.

Конечно, в процессе работы и у этого способа обнаружились и минусы. Самой частой проблемой, был пропущенный разделитель, т.е. некоторые данные сливались. Приходилось самостоятельно проставлять разделитель там где необходимо, но на удивление, это не заняло много времени.

Как на основе списка фотографий, мы упаковали файл источника данных?

Не долго думая, мы решили запустить веб-сервер и сформировать файл средствами языка PHP. В качестве веб-сервера на локально машине запуслили OpenServer (https://ospanel.io/) В нем из коробки уже имеются все необходимые инструменты, они не требуют какой-то сложной настройки, поэтому сразу после установки можно приступать к работе.

Алгоритм программы не сложный. Сначала мы получаем из папки “photo” список всех файлов. Затем, с помощью регулярного выражения (записано в переменную $pattern), вытаскиваем все данные и уже структурировано записываем в массив $data. После чего выводим на экран полученные данные в переработанном виде, как это нужно для загрузки в InDesign.

Создаем на сервере файл index.php и пишем вот такой PHP скрипт:

Первой строкой выводим название полей (переменных), и далее каждый раз с новой строки выводим данные по конкретному человеку. В качестве разделителя мы используем табуляцию (в PHP обозначается как “t”).

Запускаем и получаем готовый набор данных. Копируем результат в блокнот и сохраняем в кодировке Юникод, это принципиальный момент работы с русскими символами. Если кодировка будет отличаться, то вместо русских букв, будут отображаться всякие каракули.

Подготовительные работы

Кроме списка фотографий и файла с данными, нам необходимо подготовить несколько шаблонов и макет разметки.

Нам потребуется 4 (четыре) вида шаблонов: red, green, blue, yellow. Их мы будем использовать при формировании макета как основной шаблон бейджа. Создавать сами шаблоны мы будем в программе Adobe Illustrator. Важно соблюдать основные рекомендации по созданию макета. Самое основное это учести поля под обрезка +2мм с каждой стороны. В этих шаблонах мы создаем все основное оформление бейджей/пропусков и определяем места для размещения персональных данных. Сохраняем макеты соответственно: red.ai, green.ai, blue.ai и yellow.ai И кладём в папку /template/ на сервере.

Кроме самих шаблонов, нам понадобится разметка. Она нужна для последующей вырубки готовых изделий. Её мы рисуем также в Иллюстраторе, и сохраняем в папке со всеми шаблонами. Разметка рассчитывается исходя их исходных размеров будущих изделий.

Теперь, кажется, все готово. Еще раз проверим. У нас есть, файл с данными, папка с фотографиями и сами фотографии, папка с шаблонами и сами шаблоны. Все верно, можем приступать к верстке.

Приступаем к верстке макетов

  1. Запускаем InDesign и создаем новый документ. В шаблон и помещаем в него файл с нашей разметкой.
  2. Открываем окно Объединение данный (Data Merge) Окно > Утилиты > Объединение данных
  3. Выбираем источник данных (наш сгенерированный файл на сервере)
  4. Создаем шаблон макета и добавляем в него переменные, группируем
  5. Жмём “создать объединенный документ”
  6. Выбираем количество записей на страницу документа. Ставим несколько и переходим на вкладку “Макет с несколькими записями” и настраиваем поля и отступы
  7. Жмём “ОК” и получаем готовый результат
  8. Сохраняем результат. Когда мы получили сформированный документ, сохраняем его в формате .PDF для последующей печати.

Скачать архив с готовыми файлами программы можно здесь

Финальная обработка

После печати сформированного документа, мы формируем нечто напоминающее бутерброд из листов пластика, инлеев MIFARE 1k, и листов ламината. Затем, отправляем заготовки на “запекание”. В результате запекания наших заготовок, мы получаем монолитный лист пластика толщиной примерно 0,8-0,9 миллиметра из которого будут высечены уже готовые изделия.

После вырубки делается пробой отверстия и бейдж комплектуется ланьярдом и ретрактором. На этом этапе, можно сказать что изделия готовы :)

Спасибо, что дочитали нашу публикацию до конца! Всем желаю отличного здоровья и позитивного настроения. Если возникли вопросы задавайте по электронной почте.