2015-09-18 9 views
1
#include <Constants.au3> 
#include <ScreenCapture.au3> 
#Include <Misc.au3> 
#include <Array.au3> 
#include <GDIPlus.au3> 


$image = @MyDocumentsDir & "\aaa_teste.jpg" 
ConsoleWrite(OCR($image)) 


Func OCR($Image) 
    Local $miDoc, $Doc 
    Local $str 
    Local $oWord 
    Local $sArray[500] 
    Local $as_Text = "" 


    $miDoc = ObjCreate("MODI.Document") 
    ConsoleWrite("ObjCreate - The error value is: " & @error & @CRLF) 
    $miDoc.Create(@TempDir & '\OCR_ImageResize.jpg') 
    ConsoleWrite("Create - The error value is: " & @error & @CRLF) 
    $miDoc.Ocr(9, False, False) 
    ConsoleWrite("Ocr - The error value is: " & @error & @CRLF) 

    If $Error = False Then 
     $i = 0 
     For $oWord in $miDoc.Images(0).Layout.Words 

      $str = $str & $oWord.text & @CrLf 
       ConsoleWrite($oWord.text & @CRLF) 
      $sArray [$i] = $oWord.text 
      $i += 1 

     Next 

     $as_Text = _ArrayToString($sArray," ",0) 
     $as_Text = StringReplace($as_Text, " ", "", 0) 

    ElseIf $Error = True Then 

     $Error = False 
    EndIf 

    $miDoc.Close(False) 
    Return $as_Text 

EndFunc 

I`m стараясь прочитать текст из ScreenCapture Ошибка является:AutoIt ошибка modi.document Переменная должна быть типа "Объект"

«C: \ Users \ jose.barbosaneto \ Desktop \ TESTE .au3" (23): ==> Переменная должна быть типа "Object" .: $ miDoc.Create (@TempDir & '\ OCR_ImageResize.jpg') $ miDoc^ОШИБКА

Пожалуйста, помогите мне

ответ

1

Единственный недостаток библиотеки MODI в том, что он полагается на 100% на MS Office. Итак, если у вас нет надлежащей версии, она не найдет необходимый COM-объект.

Проверьте версию Office, которую вы установили, и посмотрите, есть ли там MODI. Перейдите в раздел «Программы удаления» и нажмите «Изменить/Восстановить» в версии MS Office. Оттуда вы можете проверить, установлены ли документы MODI.

Edit: Установка MDI для TIFF файлов конвертер и SharePoint Designer, по этой ссылке: https://support.microsoft.com/en-us/kb/982760 После установки их перейти в> Удалить программу> MS Office SharePoint Designer 2007> Щелкните правой кнопкой мыши на ней и выберите Изменить> выберите Добавить или удалить компоненты , Оттуда в меню вы найдете опцию «Офисные инструменты». Разверните его. Затем нажмите на маленькие стрелки на MODI (Microsoft Office Document Imaging) и выберите «Запустить все с моего компьютера».

И вы готовы к работе!

Редактировать2: Здесь приведен пример тестирования и работы.

#include <GUIConstants.au3> 
#include <Array.au3> 

Dim $miDoc, $Doc 
Dim $str 
Dim $oWord 
Dim $sArray[500] 

Const $miLANG_CZECH = 5 
Const $miLANG_DANISH = 6 
Const $miLANG_DUTCH = 19 
Const $miLANG_ENGLISH = 9 
Const $miLANG_FINNISH = 11 
Const $miLANG_FRENCH = 12 
Const $miLANG_GERMAN = 7 
Const $miLANG_GREEK = 8 
Const $miLANG_HUNGARIAN = 14 
Const $miLANG_ITALIAN = 16 
Const $miLANG_JAPANESE = 17 
Const $miLANG_KOREAN = 18 
Const $miLANG_NORWEGIAN = 20 
Const $miLANG_POLISH = 21 
Const $miLANG_PORTUGUESE = 22 
Const $miLANG_RUSSIAN = 25 
Const $miLANG_SPANISH = 10 
Const $miLANG_SWEDISH = 29 
Const $miLANG_TURKISH = 31 
Const $miLANG_SYSDEFAULT = 2048 
Const $miLANG_CHINESE_SIMPLIFIED = 2052 
Const $miLANG_CHINESE_TRADITIONAL = 1028 

Local $ImagePath = @DesktopDir & "\Untitled.png" ; you can choose .tif format if you also want 
; Initialize error handler 
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") 

$miDoc = ObjCreate("MODI.Document") 
$miDocView = ObjCreate("MiDocViewer.MiDocView") 

$Viewer = GUICreate("Embedded MODI Viewer", 640, 580, (@DesktopWidth - 640)/2, (@DesktopHeight - 580)/2, _ 
     $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS) 


;Creates an ActiveX Control in the GUI. 
$GUIActiveX = GUICtrlCreateObj($miDocView, -1, -1, 640, 580) 
GUICtrlSetResizing($Viewer, $GUI_DOCKAUTO) 


$miDoc.Create($ImagePath) 
$miDoc.Ocr($miLANG_ENGLISH, True, False) 

; Show GUI 
GUISetState() 

$miDocView.Document = $miDoc 
$miDocView.SetScale(0.75, 0.75) 


While 1 
    $msg = GUIGetMsg() 

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop 
WEnd 



$i = 0 

For $oWord In $miDoc.Images(0).Layout.Words 

    $str = $str & $oWord.text & @CRLF 
    ConsoleWrite($oWord.text & @CRLF) 
    $sArray[$i] = $oWord.text 
    $i += 1 
Next 

_ArrayDisplay($sArray, "OCR Result") 



;MsgBox(0,"",$miDocView.FileName) 

;------------------------------ This is a COM Error handler -------------------------------- 
Func MyErrFunc() 
    $HexNumber = Hex($oMyError.number, 8) 
    MsgBox(0, "COM Error Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _ 
      "err.description is: " & @TAB & $oMyError.description & @CRLF & _ 
      "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ 
      "err.number is: " & @TAB & $HexNumber & @CRLF & _ 
      "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ 
      "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ 
      "err.source is: " & @TAB & $oMyError.source & @CRLF & _ 
      "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ 
      "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ 
      ) 
    SetError(1) ; to check for after this function returns 
EndFunc ;==>MyErrFunc 
+0

Спасибо за помощь, но я решил свою проблему. У меня был офис 2013 года, чем я перешел в офис 2007 года – ZeNeto