Собственно решил допилить под себя скрипт вставки мультистраничного PDF. Нашел в сети другой скрипт в котором была функция отвечающая за поверку количества страниц в PDF
Вставил - работает, но...
Это работает не всегда. Обычно - да, и работает быстро, так как /N находиться в 3-4 строке pdf, но например в pdf полученном из Preps - количество страниц идет значительно дальше и после /Counters. ладно, дописываю ещё одну функцию. Работает (опять таки - я так понял в спецификации pdf нет четкого задания количества станиц, то есть иногда количество страниц может быть вообще могут быть не указано в файле, а генерится в процессе чтения программой ?) дописываю, что если ничего не найдено - пусть выводит 9999 - там я укажу вручную.
Но есть проблема, - скрипт работает безобразно долго.. особенно на больших файлах. И не удивительно - построчная проверка, цикл... Пытаюсь обойтись вообще без строк - пусть загружает файл целиком. Работает и быстро, просто пуля - но если файл большой (500-800 Мб и такое бывает при спусках)- Out of memory (32 bit - печалька).
Так как не программист - вопрос,
1. Почему на 500M файле затык, если Indesign занимает пусть 500-800мБ оперативки. Он что, байт за два считает?
2. Можно ли считывать файл блоками (по 10-50-100 Mb)
3. Можно-ли ускорить построчный перебор.
4. Можно ли из скрипта (теоретически, код не прошу, просто для понимания) вызвать Acrobat, и получить уже из Acroba-та (передав ему другой скрипт например в виде параметра) точное количество страниц.
Код:
function getNumberOfPdfPages(pdfFile){
pdfFile.resolve();
pdfFile.open("r", "TEXT", "");
oneLine = pdfFile.readln();
while (oneLine.indexOf("/N ") < 0){
oneLine = pdfFile.readln();
slashN = oneLine.indexOf("/N ");
nextSlash = oneLine.indexOf("/" , slashN+1);
pdfP = oneLine.substring(slashN+3 , nextSlash);
}
return(parseInt(pdfP));
Это работает не всегда. Обычно - да, и работает быстро, так как /N находиться в 3-4 строке pdf, но например в pdf полученном из Preps - количество страниц идет значительно дальше и после /Counters. ладно, дописываю ещё одну функцию. Работает (опять таки - я так понял в спецификации pdf нет четкого задания количества станиц, то есть иногда количество страниц может быть вообще могут быть не указано в файле, а генерится в процессе чтения программой ?) дописываю, что если ничего не найдено - пусть выводит 9999 - там я укажу вручную.
Но есть проблема, - скрипт работает безобразно долго.. особенно на больших файлах. И не удивительно - построчная проверка, цикл... Пытаюсь обойтись вообще без строк - пусть загружает файл целиком. Работает и быстро, просто пуля - но если файл большой (500-800 Мб и такое бывает при спусках)- Out of memory (32 bit - печалька).
Так как не программист - вопрос,
1. Почему на 500M файле затык, если Indesign занимает пусть 500-800мБ оперативки. Он что, байт за два считает?
2. Можно ли считывать файл блоками (по 10-50-100 Mb)
3. Можно-ли ускорить построчный перебор.
4. Можно ли из скрипта (теоретически, код не прошу, просто для понимания) вызвать Acrobat, и получить уже из Acroba-та (передав ему другой скрипт например в виде параметра) точное количество страниц.