Как стать автором
Обновить

Photoshop Scripting для автоматизации печати многотиражной полиграфической продукции

Время на прочтение2 мин
Количество просмотров15K
Здравствуйте. Хотелось бы поделиться опытом автоматизации процесса печати большого количества документов из Adobe Photoshop.
Задача состоит в следующем:
имеется большое количество (в моем случае — 100 000 шт.) уже напечатанных документов. Необходимо на них в определенных местах определенным шрифтом напечатать их порядковый номер в заданном формате (или любую строку, сформированную по определенному алгоритму).
Чтобы было более понятно, приведу пример.

Исходное изображение:
image

Что должно получиться:
image

и таких — 100 000 документов. Явно, что вручную такой объем осилить достаточно сложно, поэтому надо искать возможности автоматизации.

В процессе поиска решения задачи автоматической нумерации документов по определенному алгоритму при печати, был найден способ, который использует Corel Draw и MS Office: генерируем таблицу с нужными значениями, производим слияние, и Corel генерирует нам необходимое количество листов с нужным содержанием. Вроде бы все — ничего, но все листы должны быть в памяти, а это говорит, что ресурсоемкость выполнения задачи возрастает с количеством печатаемых изделий. Кому интересно, вот ссылка на видео — Нумерация в Corel Draw. Безусловно, существуют макросы в Corel, но я с Corel не так хорошо знаком, как с Photoshop, поэтому именно Photoshop был выбран для решения поставленной задачи.

Решение



Приведу пример скрипта, который выполняет необходимые операции:

var start1 = 1; //номер, с которого начинать нумерацию
var count = 100000; //общее количество экземпляров

var doc = app.activeDocument;
var layer = doc.layers.getByName("text1");

function changeTextByLayerName(layerName,newText){ //функция изменения содержания текстового слоя по его имени на переданную строку
    layer = doc.layers.getByName(layerName);
    if(layer.kind == LayerKind.TEXT) layer.textItem.contents = newText; //присваиваем содержимое
}


function printIt(){ //функция отправки на печать
    app.bringToFront();
    doc.printSettings.flip = false;
    doc.printSettings.setPagePosition(DocPositionStyle.SIZETOFIT);
    doc.printSettings.negative = false;
    doc.printOneCopy();  
}

for(a=start1; a<=count; a++){
        
    changeTextByLayerName("text1", a);
    changeTextByLayerName("text2", a);
    changeTextByLayerName("text3", a);
    changeTextByLayerName("text4", a);
    
    $.sleep(2000); //задержка выполнения на 2 секунды, чтобы принтер успел обрабатывать запросы
    printIt();
}


Скрипты для Adobe Photoshop имеют расширение jsx.
Для успешного выполнения данного скрипта, необходимо иметь в открытом виде photoshop-проект с текстовыми слоями,
имена которых — text1, text2, text3, и text4.

Управление скриптом осуществляется из программы ExtendScript Toolkit.
Обратите внимание на то, что в левом верхнем углу окна программы ExtendScript Toolkit необходимо выбрать Adobe Photoshop, иначе скрипт не запустится.

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

Полезной информацией является то, что вместо
changeTextByLayerName("text4", a);

можно использовать
changeTextByLayerName("text4", "000" + a);

что явно демонстрирует возможность приведения типов и конкатенации строк.

С документацией по Photoshop Scripting можно ознакомиться тут.

Спасибо за внимание, надеюсь мое решение будет полезно общественности.
Теги:
Хабы:
Всего голосов 21: ↑17 и ↓4+13
Комментарии47

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн