[ID CC-CC2022] Автоматическое переименование встроенных линков

  • Автор темы Автор темы design211
  • Дата начала Дата начала

design211

Участник
Топикстартер
Сообщения
26
Реакции
1
В файл книги строено более 1тыс изображений с часто встречающимися одинаковыми именами.
Мне нужно оттуда их достать в одну папку и обработать, после чего все изображения должны занять свои прежние места в книге.
Проблема в дубликатах, которые заменяют друг друга.

Нашел тему с аналогичной проблемой, однако представленные там решения не помогли. Damp pasted images просто достает линки из файла, но не переименовывает. Crop And Resize честно говоря не совсем понял, что сделал с файлами, но похоже не то, что мне требуется, либо я чего то не понял
 
Простой Package вам поможет. Он соберет все картинки в одну папку и переименует (filename_1.ext) те, у которых названия совпадут.
 
Простой Package вам поможет. Он соберет все картинки в одну папку и переименует (filename_1.ext) те, у которых названия совпадут.
я так понимаю, он собирает не встроенные линки только? попробовал, он упаковал только 60 моих не включенных линков. Мне то нужно вытащить встроенные и переименовать совпадающие, чтоб не автозаменяли друг друга
 
Unembed links же есть, а для тех, у кого нет, скрипт гуглится легко.
 
Unembed links же есть, а для тех, у кого нет, скрипт гуглится легко.
Он не переименовывает линки, а просто заменяет копию.

В результате, если в документе есть несколько РАЗНЫХ изображений с именем "р1" он убивает все и автозаменяет все на одно единственное изображение.

Т.е если на изображениях с именем "р1" изображен собор, на другом поезд, а на другом собака, то он заменит все картинки с именем "р1" на собаку.

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

JavaScript:
#target indesign

function toStringIndex (num, len) {
    var res = parseInt(num).toString();
    while (res.length < len) {
        res = '0' + res;
    }
    return res;
}

function linkSort (a, b) {
    if (a.name > b.name) {
        return 1;
    }
    if (a.name < b.name) {
        return -1;
    }
    return 0;
}

function getEmbeddedLinks (doc) {
    var res = [];
    for (var i = 0; i < doc.links.length; i++) {
        if (doc.links[i].status == LinkStatus.LINK_EMBEDDED) {
            res.push(doc.links[i]);
        }
    }
    return res;
}

function unembedLinks (doc, links, folder) {
    links.sort(linkSort);
    var names = []
    var count = 0;
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        if (i == 0 || links[i].name == links[i - 1].name) {
            count++;
        } else {
            count = 1;
        }
        var lname = link.name.toString();
        var fname = lname.replace(/(\.[^\.]+$)/gim, '_' + toStringIndex(count, 3) + '$1');
        names.push({id: link.id, fname: fname});
    }
    for (var i = 0; i < names.length; i++) {
        var link = doc.links.itemByID(names[i].id).getElements()[0];
        link.unembed(folder);
        var lfile = File(folder + '/' + link.name);
        var nfile = File(folder + '/' + names[i].fname);
        lfile.rename(nfile);
        link.relink(nfile);
    }
}

function main () {
    if (!app.documents.length) {
        return false;
    }
    var doc = app.activeDocument;
    var embedded = getEmbeddedLinks(doc);
    if (!embedded.length) {
        alert('No one links are embedded in document!');
        return false;
    }
    var folder = Folder.selectDialog('Select folder for unembedd links:');
    if (!folder) {
        return false;
    }
    unembedLinks(doc, embedded, folder);
    return true;
}

main();
 
  • Спасибо
Реакции: design211
Очень интересно, чем дело кончится.