autoit modi.document 错误变量必须是 "Object" 类型
autoit modi.document error Variable must be of type "Object"
#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) : ==> 变量必须是 "Object" 类型:
$miDoc.Create(@TempDir & '\OCR_ImageResize.jpg')
$miDoc^ 错误
请帮帮我
MODI 库的唯一缺点是它 100% 依赖于 MS Office。
因此,如果您没有安装正确的版本,它将找不到所需的 COM 对象。
检查你安装的Office版本,里面有没有MODI。
进入卸载程序并单击您拥有的 MS Office 版本上的 Change/Repair。从那里你可以检查是否安装了 MODI 文件。
编辑:从 link 安装 MDI 到 TIFF 文件转换器和 SharePoint Designer:https://support.microsoft.com/en-us/kb/982760
安装它们后,转到 > 卸载程序 > MS Office SharePoint Designer 2007> 右键单击它并 select 更改 >select 添加或删除功能。
在菜单中,您会找到 Office 工具选项。展开它。
然后点击MODI(Microsoft Office Document Imaging)上的小箭头和select "Run all from my Computer".
你准备好了!
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
#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) : ==> 变量必须是 "Object" 类型: $miDoc.Create(@TempDir & '\OCR_ImageResize.jpg') $miDoc^ 错误
请帮帮我
MODI 库的唯一缺点是它 100% 依赖于 MS Office。 因此,如果您没有安装正确的版本,它将找不到所需的 COM 对象。
检查你安装的Office版本,里面有没有MODI。 进入卸载程序并单击您拥有的 MS Office 版本上的 Change/Repair。从那里你可以检查是否安装了 MODI 文件。
编辑:从 link 安装 MDI 到 TIFF 文件转换器和 SharePoint Designer:https://support.microsoft.com/en-us/kb/982760 安装它们后,转到 > 卸载程序 > MS Office SharePoint Designer 2007> 右键单击它并 select 更改 >select 添加或删除功能。 在菜单中,您会找到 Office 工具选项。展开它。 然后点击MODI(Microsoft Office Document Imaging)上的小箭头和select "Run all from my Computer".
你准备好了!
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