PDA

Показать полную графическую версию : Send("^s") не срабатывает каждый раз, когда надо


donbaton
21-06-2017, 14:35
помогите советом, что ещё можно попробовать сделать.
Вот это при обработке одних файлов работает, а с другими нужно вручную жать Cntrl+S. Уже Send("^s") совал после каждой строки и по несколько раз дублировал. Также и Sleep тоже вставлял дополнительно в разные места и время ожидания увеличивал. Операционная система Windows XP. Версия AutoIt: 3.3.12.0.

WinWaitActive("ABBYY")
Sleep(1000);
Send("^s")
WinWait("Save")
Sleep(500);Полный код скрипта автоматического распознавания Finereaderом множества PDF (этот отрывок примерно в конце):
Const $FR_dir = "E:\Program Files\ABBYY FineReader 8.0 Professional Edition\"
Run($FR_dir&"FineReader.exe")
AutoItSetOption ( "WinTitleMatchMode" , 2 )
$search = FileFindFirstFile("*.pdf")
If $search = -1 Then
MsgBox(0, "Error", "No pdf files")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$file_name= StringTrimRight($file, 4); имя файла без расширения ".pdf"
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
Send("^n", 0); новый пакет
Send("!f") ;
Send("v")
WinWaitActive("Save")
Sleep(500)
ControlSetText ( "Save", "", "Edit1", @WorkingDir&"\"&$file_name ); создаем папку пакета
Sleep(500)
Send("{ENTER}")
Sleep(500)
Send("^o")
Sleep(500)
ControlSetText ( "Open", "", "Edit1", @WorkingDir&"\"&$file ); открытие и распознавание pdf файла
Send("{ENTER}")
WinWaitClose("Adding")
Sleep(500)
WinWaitActive("ABBYY")
Sleep(500)
Send("^+R")
WinWaitClose("Reading")
Sleep(500);
WinWaitActive("ABBYY")
Sleep(1000);
Send("^s")
WinWait("Save")
Sleep(500);
ControlSetText ( "Save", "", "Edit1", @WorkingDir&"\"&$file_name&"\"&$file_name ); сохраняем результаты распознавания в папку пакета
Send("{ENTER}")
Sleep(500);
WinWaitClose("Saving")
Send("!f")
Send("c") ;Закрываем пакет
WEnd

FileClose($search)

Iska
21-06-2017, 14:54
donbaton, возможностей FineOCR.exe (или FineCmd.exe в более новых версиях) Вам недостаточно?

donbaton
21-06-2017, 17:19
Дело в том, что не программист и поэтому воспользоваться вашим советом сейчас не могу, потому что выучил несколько команд по урокам, а на весь AutoIt нету времени, чтобы освоить.

Iska
21-06-2017, 17:55
Откройте Справку по ABBYY FineReader 8.0 Professional Edition в разделе Automating a Task и почитайте. Прочтите также содержимое файла FineOCR.txt.

donbaton
21-06-2017, 19:30
А как настроить FineOCR.exe, чтобы при пакетном распознавании множества PDF и сохранении в этом же формате текст был под изображением? Не могли бы Вы привести пример командной строки, как скормить множество PDF с цифровыми именами в имени файла, чтобы всё это автоматически распознавалось и сохранялось в нужном виде? А то в английском не силён, не могу сообразить сам. Языки при распознавании нужны: русский+английский+латинский. Формат сохранения: высокое качество (для печати) + цветные Jpeg (фото). Иногда нужно бывает среднее качество сжатия (Medium (for screen)). Настройки, как с галочкой "Keep original image size" и с "Enable tagged PDF".
Font: Use standart fonеs c посславленной галочкой ″Embed fonts″.

Iska
21-06-2017, 20:10
А как настроить FineOCR.exe, чтобы при пакетном распознавании множества PDF и сохранении в этом же формате текст был под изображением? »
Вы про что? Это ж PDF, а не DjView. Поясните.

donbaton
21-06-2017, 20:17
На странице инструкции (http://vedomo.ru/a/s/paketnaia/AutoItOcrpdf.htm) к скрипту, который здесь привёл, на первом скриншоте эта настройка выставлена в выпадающем списке «Text under the page image».

Iska
24-06-2017, 19:15
donbaton, я делать не буду, но могу подсказать общий путь — как.

Первым делом нужно задать искомые настройки для pdf в параметрах FineReader — те, которые Вы выше перечислили, а затем сохранить их (на первой вкладке) в виде файла параметров .fbt.

Ваше приложение на AutoIt, або ещё на чём должно делать следующее:
проверить, запущено ли оно с параметром, и если нет, то…
переназначить себя в качестве глагола по умолчанию для pdf-файлов, сохранив прежние настройки;
перебрать в указанном исходном каталоге файлы, отбирая среди них *.pdf;
для каждого найденного файла исполнить команду с ожиданием:
"%ProgramFiles%\ABBYY FineReader 8.0 Professional Edition\FineOCR.exe" "Путь\Имя очередного найденного файла.pdf" /read /lang Russian English Latin /send Acrobat /OptionsFile "Путь\Имя файла ранее сохранённых параметров.fbt"
таким образом другой экземпляр Вашего приложения будет запущен, и ему будет передано в качестве параметра имя временного файла .pdf с результатом сканирования и распознавания (FineOCR.exe не поддерживает сохранение результирующего файла в указанном месте, видимо, для того, чтобы не составлять конкуренции для более дорогой Corporate Edition);
этот другой экземпляр Вашего приложения также проверяет, запущено ли оно с параметром, и, поскольку — да, то он должен просто взять переданный путь ко временному файлу, скопировать этот файл в целевой каталог и завершить свою работу;
прежний экземпляр продолжит повторять перебор файлов до их исчерпания;
в конце работы нужно вернуть вобрат прежние сохранённые настройки глагола по умолчанию для pdf-файлов.

Есть вариант без назначения себя приложением по умолчанию для pdf, и это даже правильнее будет, но тут понадобится больше работы и кода — проверять, какое назначено приложение, отслеживать его запуск, затем смотреть его командную строку на предмет определения имени временного файла, копировать файл, затем закрывать приложение.

Примерно так.

donbaton
29-06-2017, 17:28
Сейчас заработало, если добавить в начало рабочего скрипта строку Opt("SendKeyDelay", 700)

Также по вашей рекомендации человек написал код, который у него не заработал. Вот что он написал:
Попробовал консольный вариант FineOCR, у меня не пошло, проблемы с активацией ФР. 123.fbt - файл настроек, сохраненный в папке с ФР.
Const $FR_dir = "c:\Program Files (x86)\ABBYY FineReader 8.0 Professional Edition\"

$search = FileFindFirstFile("*.pdf")
If $search = -1 Then
MsgBox(0, "Error", "No pdf files")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop


RunWait($FR_dir&"FineOCR.exe "&$file&" /read /lang Russian English Latin /send Acrobat /OptionsFile "& $FR_dir&"123.fbt")
Sleep(1000)

WEnd

FileClose($search)[/CODE]




© OSzone.net 2001-2012