Возникла необходимость распознавать pdf файлы. Наткнулся на работы
//infostart.ru/public/1217607/
//infostart.ru/public/1535600/
Очень интересно. Первый вариант очень хорошо работает с пдф файлами, которые сохранены из word, excel или другие программы, но он не распознает отсканированные документы (пдф, собранный из картинок).
Вторая работа тоже очень интересная, захотелось опробовать оба, собрать в одной обработке и описать в данной статье.
Первый вариант, описанный в //infostart.ru/public/1217607/ - работает очень хорошо
Но стоить распечатать и отсканировать данный текст - уже не распознает
Воспользуемся OCR Tesseract
Скачал его отсюда https://github.com/UB-Mannheim/tesseract/wiki
Суть его работы очень простая: подаете на вход картинки - на выходе получаете текст. Управление через командную строку.
1. Преобразуем ПДФ в картинки - любым удобным способом (я воспользовался работами из //infostart.ru/public/1217607/)
2. Разместил их в каталоге временных файлов
ФайлывКаталоге = НайтиФайлы(КаталогСохраненияФайлов,"*.png");
ФайлыКУдалению = новый Массив;
ТекстИзПДФ = "";
Для каждого Элемент Из ФайлывКаталоге Цикл
ЗапуститьПриложение("""C:\Program Files\Tesseract-OCR\tesseract.exe"" """+Элемент.ПолноеИмя+""" "+КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+" -l rus",,Истина); //Скармлеваем тесеракту
Текст = Новый ЧтениеТекста;
Текст.Открыть(КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+".txt",КодировкаТекста.UTF8); //считываем распознанный текст
Строка = Текст.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
ТекстИзПДФ = ТекстИзПДФ + Строка+Символы.ПС;
Строка = Текст.ПрочитатьСтроку();
КонецЦикла;
Текст.Закрыть();
ФайлыКУдалению.Добавить(Элемент.ПолноеИмя);
ФайлыКУдалению.Добавить(КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+".txt");
КонецЦикла;
//Удаляем все созданные файлы
Для каждого Стркудал Из ФайлыКУдалению Цикл
УдалитьФайлы(Стркудал);
КонецЦикла;
Все
Реализовал это в обработке
Тестировалась на платформе 8.3.17.2256. ОС Windows (x64).
Обработку скачивать не обязательно, все описано выше и вышеуказанных работах.