【问题标题】:autoit modi.document error Variable must be of type "Object"autoit modi.document 错误变量必须是“对象”类型
【发布时间】:2015-09-18 15:16:00
【问题描述】:
#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^ 错误

请帮帮我

【问题讨论】:

    标签: ocr autoit modi


    【解决方案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 工具。展开它。 然后点击 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
    

    【讨论】:

    • 感谢您的帮助,但我解决了我的问题。我有一个 2013 年的办公室,而不是降级到 2007 年的办公室
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多