люди_будущего
Участник
- Сообщения
- 37
- Реакции
- 34
Как успехи? : -) Это же юмористический пример, классика? Поиск констант перебором в цикле...Вот такой код (нашла где-то):
Решений, не сомневаюсь, масса. Вот вариант для mutool, давно хотелось попробовать что-то сделать, благодаря вам дошли руки, забавная вещица. Поступаем так (батник, ярлык и т.п. самостоятельно):
Код:
mutool run this_file(utf-8).js input1.pdf input2.pdf ...
Код:
mutool.exe run bookmarkThem.js Заглавная_страница.pdf
Фразы для закладок жестко закодированы, -- исправьте, если требуется, + я не знаток 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, '+$&' ));
}
})();