Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Send("^s") не срабатывает каждый раз, когда надо (http://forum.oszone.net/showthread.php?t=327773)

donbaton 21-06-2017 14:35 2746409

Send("^s") не срабатывает каждый раз, когда надо
 
помогите советом, что ещё можно попробовать сделать.
Вот это при обработке одних файлов работает, а с другими нужно вручную жать 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 2746416

donbaton, возможностей FineOCR.exe (или FineCmd.exe в более новых версиях) Вам недостаточно?

donbaton 21-06-2017 17:19 2746479

Дело в том, что не программист и поэтому воспользоваться вашим советом сейчас не могу, потому что выучил несколько команд по урокам, а на весь AutoIt нету времени, чтобы освоить.

Iska 21-06-2017 17:55 2746486

Откройте Справку по ABBYY FineReader 8.0 Professional Edition в разделе Automating a Task и почитайте. Прочтите также содержимое файла FineOCR.txt.

donbaton 21-06-2017 19:30 2746508

А как настроить 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 2746519

Цитата:

Цитата donbaton
А как настроить FineOCR.exe, чтобы при пакетном распознавании множества PDF и сохранении в этом же формате текст был под изображением? »

Вы про что? Это ж PDF, а не DjView. Поясните.

donbaton 21-06-2017 20:17 2746523

На странице инструкции к скрипту, который здесь привёл, на первом скриншоте эта настройка выставлена в выпадающем списке «Text under the page image».

Iska 24-06-2017 19:15 2747038

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 2748144

Сейчас заработало, если добавить в начало рабочего скрипта строку
Код:

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]


Время: 07:45.

Время: 07:45.
© OSzone.net 2001-