Acrobat и JavaScript

Довольно давно мне хотелось попробовать написать что-нибудь простенькое под Акробат, раз уж там есть поддержка JS.

И вот наконец такой случай представился. В почту постучался старый посетитель сайта с нестандартной просьбой: нужен инструмент, быстро показывающий размеры всех полос в PDF в удобном для восприятия формате. Не помню уже, зачем конкретно это было нужно; главное, что в работу поступали дикие необъезженные PDF с очень разными размерами полос и с этим надо было эффективно бороться.

Да, можно создать в PitStop такой action (или префлайт-профиль), который сравнивает размеры полос с заведомо недопустимым 0x0mm, но результат его работы выглядит совершенно нечитабельно:

Легко ли увидеть здесь, что 1, 4 и 5 полосы имеют размер 216x280mm, а 2 и 3 — размер 100х280mm? А если полос 80? Неудобно.

Так родился этот скрипт:

function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i+1);
    }
    return indexes;
}

function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

var msg = ""
var arr = [];
for (var p = 0; p < this.numPages; p++) {
    var box = this.getPageBox("Trim", p);
    var width = Math.round((box[2] - box[0]) / 2.83);
    var height = Math.round((box[1] - box[3]) / 2.83);
    size = width + "x" + height
    arr.push(size);
}

var uniq = arr.filter( onlyUnique );

uniq.forEach(function(value) {
    indexes = getAllIndexes(arr, value);
    c = indexes.length;
    msg = msg+"Размер "+value+"mm имеют "+c+" страниц: "+indexes+"\r\n";
});

app.alert(msg, 3);

Его удобно повесить на панель Акробата и запускать оттуда буквально одним нажатием кнопки. Отработав, скрипт покажет размеры страниц, их количество и номера:

Сам скрипт доступен по этой ссылке. Видеоинструкция по установке (я пользуюсь ретроградским Acrobat XI, в более современных версиях вынос скрипта на панель будет выглядеть иначе):

Напоследок не могу упомянуть ужасно неудобный акробачий интерфейс работы со скриптами. Это просто издевательство какое-то! Чтобы добраться до редактирования скрипта, нужно прокликать чёртову уйму кнопок. Дебаггера практически нет (тот, что есть — недоразумение!). Если вы знаете какой-то более удобный способ — молю, напишите в почту. Буду благодарен. 🙂

И на всякий случай: архив с Acrobat SDK. Мало ли кому-нибудь захочется написать что-то своё под Акробат, а Adobe его решит удалить как “никому не нужный”. Плавали, знаем, уже было похожее.