Как автоматизировать подготовку в печать .ai-макетов
Делюсь скриптом, который принимает на вход файлы в формате .ai, разбирает текст на кривые, конвертирует в cmyk и после сохраняет в .ai, .eps и .pdf.
Для работы я создал директорию files-for-print
, внутри разместил ещё две папки: _src
и result
.
Перед началом работы я помещаю макеты в формате .ai
в папку _src
. Далее скрипт:
- открывает каждый файл;
- конвертирует его в цветовое пространство CMYK;
- разбирает на кривые все текстовые объекты;
- создаёт в папке
result
поддиректорию с именем содержащим текущую дату и время; - сохраняет в созданную папку изменённый файл;
- делает копии в форматах
.eps
и.pdf
.
А вот, собственно, сам скрипт со всеми комментариями.
/* Путь к исходной и результирующей папкам */
var srcFolderPath = "/Path/To/files-for-print/_src/";
var destFolderRootPath = "/Path/To/files-for-print/result/";
/* Получение текущей даты и времени для имени папки */
function getCurrentTimestamp() {
var now = new Date();
return (
now.getFullYear() +
"-" +
("0" + (now.getMonth() + 1)).slice(-2) +
"-" +
("0" + now.getDate()).slice(-2) +
"--" +
("0" + now.getHours()).slice(-2) +
"-" +
("0" + now.getMinutes()).slice(-2) +
"-" +
("0" + now.getSeconds()).slice(-2)
);
}
/* Создание новой папки для сохранения файлов */
function createFolder(path) {
var folder = new Folder(path);
if (!folder.exists) {
folder.create();
}
return folder;
}
/* Преобразование текстовых объектов в кривые */
function outlineText(doc) {
var textFrames = doc.textFrames;
for (var i = textFrames.length - 1; i >= 0; i--) {
textFrames[i].createOutline();
}
}
/* Конвертация цветового пространства в CMYK */
function convertToCMYK(doc) {
if (doc.documentColorSpace === DocumentColorSpace.RGB) {
doc.documentColorSpace = DocumentColorSpace.CMYK;
}
}
/* Обработка файлов */
function processFiles() {
var srcFolder = new Folder(srcFolderPath);
if (!srcFolder.exists) {
alert("Исходная папка не найдена: " + srcFolderPath);
return;
}
var files = srcFolder.getFiles("*.ai");
if (files.length === 0) {
alert("В папке нет файлов формата .ai");
return;
}
var destFolderName = getCurrentTimestamp();
var destFolder = createFolder(destFolderRootPath + destFolderName);
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (!(file instanceof File)) continue;
var doc = app.open(file);
/* Конвертация в CMYK и разбивка текста на кривые */
convertToCMYK(doc);
outlineText(doc);
/* Сохранение в форматах AI, EPS, PDF */
var baseFileName = file.name.replace(/\.ai$/, "");
/* Сохранение AI */
var aiOptions = new IllustratorSaveOptions();
var aiFile = new File(destFolder + "/" + baseFileName + ".ai");
doc.saveAs(aiFile, aiOptions);
/* Сохранение EPS */
var epsOptions = new EPSSaveOptions();
epsOptions.compatibility = Compatibility.ILLUSTRATOR17;
epsOptions.embedLinkedFiles = true;
epsOptions.includeDocumentThumbnails = true;
epsOptions.overprint = PDFOverprint.PRESERVEPDFOVERPRINT;
var epsFile = new File(destFolder + "/" + baseFileName + ".eps");
doc.saveAs(epsFile, epsOptions);
/* Сохранение PDF */
var pdfOptions = new PDFSaveOptions();
pdfOptions.compatibility = PDFCompatibility.ACROBAT8;
pdfOptions.preserveEditability = false;
var pdfFile = new File(destFolder + "/" + baseFileName + ".pdf");
doc.saveAs(pdfFile, pdfOptions);
/* Закрытие файла без сохранения изменений */
doc.close(SaveOptions.DONOTSAVECHANGES);
}
alert("Обработка завершена! Файлы сохранены в: " + destFolder.fsName);
}
/* Запуск скрипта */
processFiles();