autoit modi.document error Переменная должна иметь тип "Объект"

#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

Я пытаюсь прочитать текст из снимка экрана. Ошибка:

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

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

1 ответ

Решение

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

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

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

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

Edit2: вот проверенный и рабочий пример.

#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
Другие вопросы по тегам