Data Merge в InDesign не учитывает мастер-страницы. Я написал скрипт, который это исправляет
Я верстаю навигацию. Таблички, указатели, стенды — всё, что помогает человеку не заблудиться в здании. Узкая сфера, но объёмы бывают серьёзные: от 10 до 500 макетов в одном заказе. Каждый макет — отдельная страница в InDesign, со своим оформлением, своими данными, своим местом в здании.
И каждый раз передо мной одна и та же таблица от заказчика, в которой написано: вот табличка для третьего этажа, вот для переговорной, вот для лестницы. А в InDesign — пять мастер-страниц, каждая со своим оформлением. И мне нужно соединить одно с другим.
Почему Data Merge тут не работает
Data Merge в InDesign — хороший инструмент, но он заточен под конкретную задачу: взять один шаблон и размножить его. Визитки, сертификаты, письма — всё, где макет один, а данные разные. Для этого он идеален.
Проблема в том, что навигация — это другая логика. У меня не один шаблон, а пять. Табличка для этажа выглядит не так, как табличка для кабинета. У каждой свой цвет, своя типографика, своя структура. И в таблице у заказчика это всё смешано: одна строка — этаж, следующая — кабинет, потом зона, потом лестница.
Data Merge не умеет смотреть в данные и говорить: «а, это строка для этажа, значит возьму мастер A-floor». Он просто берёт тот мастер, который открыт в шаблоне, и копирует его на все страницы. Всё. Один мастер — одна судьба.
Можно, конечно, разбить таблицу на пять файлов, запустить слияние пять раз, потом склеить документы. Или пройтись по всем страницам вручную и назначить мастера. При 50 макетах — терпимо. При 500 — это полтора часа монотонной работы, в которой невозможно не ошибиться.
Подход
Ещё одна вещь, которая меня раздражала: Data Merge схлопывает абзацные стили. Если у меня в фрейме три абзаца — заголовок, текст, подпись — и у каждого свой стиль с настроенным Next Style, после слияния всё превращается в один стиль. Приходится руками переформатировать.
В какой-то момент я понял, что пытаюсь приспособить инструмент не под ту задачу. Data Merge не сломан — он просто не для этого. Нужен другой подход.
Я Full-stack разработчик, хотя в навигации работаю как дизайнер-верстальщик. Ленивый — в том смысле, что если задачу можно автоматизировать, я её автоматизирую. Не потому что лень руками, а потому что ручная работа в цикле «данные → макет» — это то, для чего компьютеры и существуют.
Написал JSX-скрипт для InDesign. Принцип обратный Data Merge: не «один шаблон → много данных», а «каждая строка данных → свой мастер → своя страница».
Как это работает
Первый столбец CSV — имя мастера с префиксом mp:. Скрипт читает таблицу, для каждой строки создаёт страницу, назначает нужный мастер, копирует объекты с мастера на страницу (override) и заменяет плейсхолдеры %%1, %%2, %%3 на данные.
mp:floor-3;3 этаж;Левое крыло
mp:room-301;301;Переговорная
mp:room-302;302;Бухгалтерия
Ещё есть %%num — уникальный номер таблички, как ID в базе данных. По нему на производстве понимают, где именно эта табличка должна висеть. Без него — хаос: 500 табличек, и ни одну невозможно идентифицировать.
Скрипт сохраняет цепочку абзацных стилей. Если у первого абзаца настроен Next Style, форматирование прокидывается дальше. Это было важно: в навигации типографика — не украшение, а средство навигации. Неправильный стиль на указателе — и человек свернул не туда.
Что изменилось
200 макетов — пару минут вместо 50-60 лишних. Всё в одном Undo: если что-то пошло не так, Ctrl+Z откатывает весь процесс. Автоопределение кодировки и разделителя появилось не сразу — я добавил это после того, как в третий раз получил от заказчика CSV в Windows-1251 с точкой с запятой.
Скрипт не замена Data Merge для всех задач. Он не вставляет изображения, не показывает предпросмотр. Но для навигации, где данные напрямую определяют оформление, он работает там, где штатный инструмент не справляется.