&НаКлиенте
Процедура КонвертацияПДФ()
ПутькФайлуУтилиты = КаталогВременныхФайлов()+"pdftotext.exe";
двУтилита = ПолучитьИзВременногоХранилища(ФайлУтилиты());
двУтилита.Записать(ПутькФайлуУтилиты);
ФайлУтилиты = Новый Файл(ПутькФайлуУтилиты);
Для каждого ЭлементСписка Из Объект.МассивФайловЗагрузки Цикл
ПутьФайлПДФ = ЭлементСписка.Значение;
Если СтрНайти(ПутьФайлПДФ, " ") Тогда
Сообщить("Выбранный путь к файлу содержит пробелы, конвертация не возможна, исправьте");
Продолжить;
КонецЕсли;
мФайлПДФ = СтрРазделить(ПутьФайлПДФ, "\");
ФайлПДФ = мФайлПДФ[мФайлПДФ.Количество()-1];
Индекс = мФайлПДФ.Количество()-1;
мФайлПДФ.Удалить(Индекс);
ДиректорияПДФ = СтрСоединить(мФайлПДФ,"\");
ПутьКТекстовомуФайлу = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(СтрЗаменить(ФайлПДФ,"pdf","txt"));
ПутьКТекстовомуФайлу = КаталогДокументов()+ПутьКТекстовомуФайлу;
// Еще параметры утилиты конвертации:
//-nopgbrk - вставляет FF перевод страницы - полезно оставить
//-fixed 4 (размер tabular)
//-bom
Команд = ПутькФайлуУтилиты +" -layout -table -enc UTF-8 -nodiag " + ПутьФайлПДФ + " " + ПутьКТекстовомуФайлу;
СписокПараметров = Новый Структура("ПутькФайлуУтилиты,ПутьКТекстовомуФайлу",
ПутькФайлуУтилиты, ПутьКТекстовомуФайлу);
Оповещение = Новый ОписаниеОповещения("ПослеКонвертацииПдфВТекст", ЭтаФорма,СписокПараметров);
НачатьЗапускПриложения(Оповещение,Команд,,Истина);
КонецЦикла;
КонецПроцедуры
Смотрим, если не было ошибок после конвертации и создался промежуточный текстовый файл
&НаКлиенте
Процедура ПослеКонвертацииПдфВТекст(Результат, СписокПараметров) Экспорт
//The Xpdf tools use the following exit codes:
СписокОшибок = Новый Соответствие;
СписокОшибок.Вставить(1, "Error opening a PDF file");
СписокОшибок.Вставить(2, "Error opening an output file");
СписокОшибок.Вставить(3, "Error related to PDF permissions");
СписокОшибок.Вставить(99, "Other error");
Если Результат = Неопределено ИЛИ СписокОшибок.Получить(Результат)<>Неопределено Тогда
ОписаниеОшибки = СписокОшибок.Получить(Результат);
Сообщить(?(ОписаниеОшибки=Неопределено,"Other error при конвертации PDF", ОписаниеОшибки));
ИначеЕсли Результат = 0 Тогда //0 - No error
txt = СписокПараметров.ПутьКТекстовомуФайлу;
Если ФайлСуществует(txt) Тогда
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтотОбъект, СписокПараметров);
НачатьПомещениеФайла(ОбработкаОкончанияПомещения,,txt,Ложь,ЭтаФорма.УникальныйИдентификатор);
Иначе
Сообщить("Не удалось конвертировать файл");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Переходим в модуль объекта и там парсим текстовый файл
Функция Фирма1_ПрочитатьФайлPDF(ДвДанные)
Поток = ДвДанные.ОткрытьПотокДляЧтения();
ФайлЧтение = Новый ЧтениеТекста(Поток,КодировкаТекста.UTF8);
ЧислоСтраниц = СтрЧислоВхождений(ФайлЧтение.Прочитать(),Символы.ПФ);
// вернуться в начало файла после чтения страниц
Поток.Перейти(-Поток.ТекущаяПозиция(),ПозицияВПотоке.Конец);
НомерСтраницы = 1;
фСтрока = ФайлЧтение.ПрочитатьСтроку();
// Парсер текстового файла
Пока фСтрока <> Неопределено Цикл
Если СтрНачинаетсяС(фСтрока, Символы.ПФ) Тогда // перевод страницы FF - определелим
НомерСтраницы = НомерСтраницы + 1;
КонецЕсли;
мСтрока = СтрЗаменить(фСтрока," ","");
Если НомерСтраницы = 1 Тогда
// первая страница документа
// при желании парсим 1ую страницу
Иначе
фСтрока = ВРег(фСтрока);
//парсим таблицы и остальные данные на следующих страницах
// например через разложить строку в массив и потом анализирую элементы массива
МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(фСтрока," ",Истина,Истина);
КонецЕсли;
фСтрока = ФайлЧтение.ПрочитатьСтроку();
КонецЦикла;
ФайлЧтение.Закрыть();
Поток.Закрыть();
Возврат "Something";
КонецФункции