[Acr DC] Можно ли расставлять закладки скриптом?

люди_будущего

Участник
Сообщения
37
Реакции
34
Вот такой код (нашла где-то):
Как успехи? : -) Это же юмористический пример, классика? Поиск констант перебором в цикле...

Решений, не сомневаюсь, масса. Вот вариант для mutool, давно хотелось попробовать что-то сделать, благодаря вам дошли руки, забавная вещица. Поступаем так (батник, ярлык и т.п. самостоятельно):
Код:
mutool run this_file(utf-8).js input1.pdf input2.pdf ...
Например:
Код:
mutool.exe run bookmarkThem.js Заглавная_страница.pdf
где PDF = сегодняшний [link], в основном для проверки, как поведет себя кириллица.

Фразы для закладок жестко закодированы, -- исправьте, если требуется, + я не знаток JS и не поклонник, извините если что. Но вроде работает.

Код:
// Artiflex's "mutool run" JavaScript

( function bookmarkThem() {

for ( var c = 1; c < argv.length; c ++ ) {

var headers = [
    'Добро пожаловать',
    'Текущие события',
    'Изображение дня',
    'Знаете ли вы?',
];

var doc = new PDFDocument( argv[ c ]);
var bmarks = [];

for ( var i = 0; i < doc.countPages(); i ++ ) {
    var page = doc.loadPage( i );

    for ( var j = 0; j < headers.length; j ++ ) {
        if ( page.search( headers[ j ]).length ) {
            var bmark = doc.addObject( doc.newDictionary());

            bmark.Title = doc.newString( headers[ j ]);
            bmark.Dest  = doc.newArray();
            bmark.Dest.push( doc.findPage( i ));
            bmark.Dest.push( 'XYZ' );
            bmark.Dest.push( page.bound()[ 0 ]);
            bmark.Dest.push( page.bound()[ 3 ]);
            bmark.Dest.push( 0 );
            bmarks.push( bmark );
          
            headers.splice( j --, 1 );
        }
    }
}

var root   = doc.addObject( doc.newDictionary());
root.First = bmarks[ 0 ];
root.Last  = bmarks[ bmarks.length - 1 ];
root.Count = bmarks.length;
doc.getTrailer().Root.Outlines = root;
doc.getTrailer().Root.PageMode = 'UseOutlines';

for ( var i = 0; i < bmarks.length; i ++ ) {
    bmarks[ i ].Parent = root;
    if ( i < bmarks.length - 1 ) bmarks[ i ].Next = bmarks[ i + 1 ];
    if ( i )                     bmarks[ i ].Prev = bmarks[ i - 1 ];
}

doc.save( argv[ c ].replace( /\.pdf$/i, '+$&' ));

}
})();
 
  • Спасибо
Реакции: _MBK_

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Странно что это не Рома написал ;)
 

RIKITIKI

20 лет на форуме
Сообщения
1 471
Реакции
522
  • Спасибо
Реакции: _MBK_ и George