[ID CC2025] Нужен скрипт для экспорта jpg с персональными названиями через стиль символа

diz.ot.333

Участник
Топикстартер
Сообщения
2
Реакции
0
Здравствуйте, нужна помощь со скриптом для экспорта jpg (система Windows 10). Скрипт должен делать экспорт всех страниц и названия файлов должны быть слова на которые применен стиль символа. Допустим, есть визитки и на ФИО дополнительно применен стиль символа NamePage, соответственно каждая сохраненная визитка (страница) будет сохранена под своим ФИО.

Есть хороший скрипт Export Named Pages с богатыми настройками, но сейчас его никак не купить. Искал бесплатные аналоги и на одном форуме нашел следующий скрипт. Пробовал его отредактировать, но не силен в этой теме. Что в нем нужно подправить: 1 вместо стиля абзаца, сделать стиль символа (прописать в коде название его NamePage); 2 сделать чтоб сохранял все страницы или давал выбор, сейчас надо ставить курсор; 3 сделать чтоб сохранял в папку с файлом Индизайна, сейчас сохраняет только на рабочий стол. Настройки качества, разрешения можно прописать в коде, без окна выбора, это я уже смогу настроить в коде. Или может проще с нуля его сделать, тут вопрос к экспертам. Помощь прошу не бесплатно, готов скинуть донат или заплатить адекватную сумму.

Код:
if (app.documents.length != 0){
var myDoc = app.activeDocument;
MakeJPEGfile();
} else {
alert("Please open a document and try again.");
}
function myPS() {
try {
return myDoc.selection[0].appliedParagraphStyle;
} catch (e) {
alert("Place cursor to text with paragraph style for filenames");
exit();
}
}
function MakeJPEGfile() {
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.high;
app.jpegExportPreferences.exportResolution = 300;
app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.exportRange;
app.findGrepPreferences = null;
app.findGrepPreferences.appliedParagraphStyle = myPS();
var f = myDoc.findGrep();
for (var myCounter = 0; myCounter < f.length; myCounter++) {
try {
var curPage = f[myCounter].parentTextFrames[0].parentPage;
if (curPage.appliedSection.name != "") {
curPage.appliedSection.name = "";
}
var objName = f[myCounter].contents.replace(/ /g,"_").toLowerCase();
app.jpegExportPreferences.pageString = curPage.name;
var myFilePath = "~/Desktop/" + "/" + objName + ".jpg"; //export to a folder of the current document
var myFile = new File(myFilePath);
myDoc.exportFile(ExportFormat.jpg, myFile, false);
}
catch(e){}//pasteboard?
}
}
 
Код:
if (app.documents.length === 0) {
    alert("Пожалуйста, откройте документ и попробуйте снова.");
    exit();
}

var myDoc = app.activeDocument;

// Проверяем, существует ли стиль символа "NamePage"
var charStyle = myDoc.characterStyles.item("NamePage");
if (!charStyle.isValid) {
    alert('Стиль символа "NamePage" не найден в документе. Создайте его и примените к нужному тексту.');
    exit();
}

MakeJPEGfile();

function MakeJPEGfile() {
    // Настройки экспорта JPEG
    app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.HIGH;
    app.jpegExportPreferences.exportResolution = 300;
    app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.EXPORT_RANGE;

    // Сбрасываем GREP-поиск и настраиваем поиск по стилю символа
    app.findGrepPreferences = NothingEnum.nothing;
    app.findGrepPreferences.appliedCharacterStyle = charStyle;

    var foundItems = myDoc.findGrep();
    if (foundItems.length === 0) {
        alert('Не найдено ни одного текстового фрагмента со стилем символа "NamePage".');
        return;
    }

    // Определяем путь к папке документа
    var docPath = myDoc.fullName.parent.fsName; // путь к папке с .indd файлом

    for (var i = 0; i < foundItems.length; i++) {
        try {
            var textFrame = foundItems[i].parentTextFrames[0];
            var page = textFrame.parentPage;

            // Пропускаем, если элемент не на странице (например, на pasteboard)
            if (!page || page.constructor.name !== "Page") {
                continue;
            }

            // Снимаем имя секции, если есть (чтобы использовать номер страницы)
            if (page.appliedSection.name !== "") {
                page.appliedSection.name = "";
            }

            // Формируем имя файла из содержимого текста
            var baseName = foundItems[i].contents.replace(/[^a-zA-Z0-9а-яА-ЯёЁ]/g, "_").toLowerCase();
            var fileName = baseName + ".jpg";
            var filePath = docPath + "/" + fileName;
            var file = new File(filePath);

            // Устанавливаем страницу для экспорта
            app.jpegExportPreferences.pageString = page.name;

            // Экспортируем
            myDoc.exportFile(ExportFormat.JPG, file, false);

            $.writeln("Экспортирована страница " + page.name + " → " + fileName);

        } catch (e) {
            // Пропускаем элементы, вызывающие ошибки (например, вне страницы)
            $.writeln("Пропущен элемент: " + e.message);
            continue;
        }
    }

    alert("Экспорт завершён. Найдено и экспортировано " + foundItems.length + " элементов.");
}
 
  • Спасибо
Реакции: Oleg Butrin и diz.ot.333
Код:
if (app.documents.length === 0) {
    alert("Пожалуйста, откройте документ и попробуйте снова.");
    exit();
}

var myDoc = app.activeDocument;

// Проверяем, существует ли стиль символа "NamePage"
var charStyle = myDoc.characterStyles.item("NamePage");
if (!charStyle.isValid) {
    alert('Стиль символа "NamePage" не найден в документе. Создайте его и примените к нужному тексту.');
    exit();
}

MakeJPEGfile();

function MakeJPEGfile() {
    // Настройки экспорта JPEG
    app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.HIGH;
    app.jpegExportPreferences.exportResolution = 300;
    app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.EXPORT_RANGE;

    // Сбрасываем GREP-поиск и настраиваем поиск по стилю символа
    app.findGrepPreferences = NothingEnum.nothing;
    app.findGrepPreferences.appliedCharacterStyle = charStyle;

    var foundItems = myDoc.findGrep();
    if (foundItems.length === 0) {
        alert('Не найдено ни одного текстового фрагмента со стилем символа "NamePage".');
        return;
    }

    // Определяем путь к папке документа
    var docPath = myDoc.fullName.parent.fsName; // путь к папке с .indd файлом

    for (var i = 0; i < foundItems.length; i++) {
        try {
            var textFrame = foundItems[i].parentTextFrames[0];
            var page = textFrame.parentPage;

            // Пропускаем, если элемент не на странице (например, на pasteboard)
            if (!page || page.constructor.name !== "Page") {
                continue;
            }

            // Снимаем имя секции, если есть (чтобы использовать номер страницы)
            if (page.appliedSection.name !== "") {
                page.appliedSection.name = "";
            }

            // Формируем имя файла из содержимого текста
            var baseName = foundItems[i].contents.replace(/[^a-zA-Z0-9а-яА-ЯёЁ]/g, "_").toLowerCase();
            var fileName = baseName + ".jpg";
            var filePath = docPath + "/" + fileName;
            var file = new File(filePath);

            // Устанавливаем страницу для экспорта
            app.jpegExportPreferences.pageString = page.name;

            // Экспортируем
            myDoc.exportFile(ExportFormat.JPG, file, false);

            $.writeln("Экспортирована страница " + page.name + " → " + fileName);

        } catch (e) {
            // Пропускаем элементы, вызывающие ошибки (например, вне страницы)
            $.writeln("Пропущен элемент: " + e.message);
            continue;
        }
    }

    alert("Экспорт завершён. Найдено и экспортировано " + foundItems.length + " элементов.");
}
Большое спасибо! Все работает.