Имя: Пароль:
1C
1С v8
Как определить, сколько листов в PDF-файле?
,
0 le_
 
25.01.12
12:04
Есть какой-нибудь простой способ программно определить, сколько листов в PDF-файле?
1 le_
 
25.01.12
12:51
Сделал так:
Функция ОпределитьКоличествоСтраниц(ПутьКФайлуPDF)
   ВозвращаемоеЗначение = 0;
   
   ТД = Новый ТекстовыйДокумент;
   ТД.Прочитать(ПутьКФайлуPDF);
   КолСтр = ТД.КоличествоСтрок();
   //будем использовать регулярные выражения
   RegExp = Новый COMОбъект("VBScript.RegExp");
   RegExp.Global = Истина;
   RegExp.MultiLine = Ложь;
   RegExp.Pattern = "Count [0-9]";
   
   Для а = 1 По КолСтр Цикл
       
       Matches = RegExp.Execute(ТД.ПолучитьСтроку(а));
       ЧислоВхождений = Matches.Count();
       
       Если ЧислоВхождений > 0 Тогда
           Для к = 0 По ЧислоВхождений - 1 Цикл
               Match = Matches.Item(к);
               Стр = Число(СтрЗаменить(Match.Value, "Count ", ""));
               Если Стр > ВозвращаемоеЗначение Тогда
                   ВозвращаемоеЗначение = Стр;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;
   Возврат ВозвращаемоеЗначение;
КонецФункции
2 le_
 
25.01.12
17:25
Если кому-то интересно, в (1) есть ошибка.
Вот так правильно и гораздо быстрее:
Функция ОпределитьКоличествоСтраниц(ПутьКФайлуPDF)
   ВозвращаемоеЗначение = 0;
   
   ТД = Новый ТекстовыйДокумент;
   ТД.Прочитать(ПутьКФайлуPDF);
   КолСтр = ТД.КоличествоСтрок();
   
   //будем использовать регулярные выражения
   RegExp = Новый COMОбъект("VBScript.RegExp");
   RegExp.Global = Истина;
   RegExp.MultiLine = Ложь;
   RegExp.Pattern = "Count [0-9]+";
   
   Matches = RegExp.Execute(ТД.ПолучитьТекст());
   ЧислоВхождений = Matches.Count();
   
   Для к = 0 По ЧислоВхождений - 1 Цикл
       Match = Matches.Item(к);
       //Сообщить(Match.Value);
       Стр = Число(СтрЗаменить(Match.Value, "Count ", ""));
       Если Стр > ВозвращаемоеЗначение Тогда
           ВозвращаемоеЗначение = Стр;
       КонецЕсли;
   КонецЦикла;
   
   Возврат ВозвращаемоеЗначение;
КонецФункции
3 1с-кин
 
26.01.12
09:13
спасибо!
4 le_
 
26.01.12
10:44
К сожалению, способ (2) не со всеми файлами работает корректно, только с линеаризованными PDF.

В итоге пришлось использовать утилиту pdfinfo, которая входит в состав набора утилит Xpdf. Скачать можно здесь: http://www.foolabs.com/xpdf/download.html

запуск: pdfinfo.exe file.pdf
запуск с сохранением результата в файл: cmd /c pdfinfo.exe file.pdf > 1.txt
Ну, а файл уже можно читать 1с-кой.
Программист всегда исправляет последнюю ошибку.