[jawsscripts] Re: OCRSnapObject Failing!

  • From: "Donald Marang" <donald.marang@xxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Sun, 31 Jan 2010 09:47:13 -0500

I guess I had wrongly assumed that registering of the MODI object 
executables (the one time thing)would have been done when Office was 
installed.  For those who said my code worked on their system, did they 
perform this registration first?

Don Marang

--------------------------------------------------
From: "Soronel Haetir" <soronel.haetir@xxxxxxxxx>
Sent: Saturday, January 30, 2010 11:01 PM
To: <jawsscripts@xxxxxxxxxxxxx>
Subject: [jawsscripts] Re: OCRSnapObject Failing!

> The VB Dim bit isn't going to work in JAWS since it only has the 4
> basic types, the bit from Homer JAX looks good though and is what I
> would expect to do.  For this style of object programming (known as
> Automation in Windows circles) the executable file path doesn't really
> matter.
>
> For the CreateObjectEx to succeed the binary will still need to have
> been registered.
>
> There are two registration concepts at play here, the first is
> registration of the executable (this is done via regsvr32 or in the
> case of some applications a command line switch) and is done
> beforehand and only needed once. The second is registering running
> objects, which is done via function calls at run time. and needed
> every time the program starts.  This second type of registration is
> what GetObject looks at.  Either way, getting or creating, the first
> type of registration needs to have occurred for JAWS scripting to be
> able to use exposed objects.
>
> If you have a more specific question I must not have noticed it.
>
> On 1/30/10, Donald Marang <donald.marang@xxxxxxxxx> wrote:
>> I think I have the basic structure and JAWS Script statements I thought
>> should work.  Unfortunately it returns nothing!  How do you know if the
>> CreateObject function returns the expected object?  I attempt to retrieve
>> the number of images (pages), I would expect a value of one, but nothing 
>> is
>> returned.  Could someone familiar with objects in JAWS look to see if I 
>> made
>> a dumb mistake?
>> I included a copy of a Visual Basic routine to OCR an image file and 
>> writes
>> the plain text to a file.  I simplified this as I converted it to JAWS
>> script code.  I would think a screenshot image would only be one page.
>>
>> Following the example is my script.  Some of the necessary lines are
>> commented out until I ensure the active code is working.  I also 
>> attempted
>> to use my constant, MODI_DLL_PATH, directly in the CreateObject 
>> statements.
>> Both with single '\' and double '\\' characters.  Doing so caused all 
>> three
>> statements to fail.
>>
>> --- Start of example
>> Example from Wikipedia and MSDN for "MODI OCR" in Visual Basic .NET
>> </wiki/Visual_Basic_.NET> follows:
>> You can program the MODI object model from any development tool that
>> supports
>> the Component Object Model (COM) by setting a reference to the Microsoft
>> Office
>> Document Imaging 11.0 (Office 2003) (or 12.0, which is Office 2007,  I 
>> saw
>> somewhere else) Type Library.
>>
>> Dim inputFile As String = "C:\test\multipage.tif"
>> Dim strRecText As String = ""
>> Dim Doc1 As MODI.Document
>>
>> Doc1 = New MODI.Document
>> Doc1.Create(inputFile)
>> Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
>> Doc1.Save() ' this will save the deskewed reoriented images, and the OCR
>> text, back to the inputFile
>>
>> For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your 
>> way
>> through each page of results
>>     strRecText &= Doc1.Images(imageCounter).Layout.Text    ' this puts 
>> the
>> ocr results into a string
>> Next
>>
>> File.AppendAllText("C:\test\testmodi.txt", strRecText)     ' write the 
>> OCR
>> file out to disk
>>
>> Doc1.Close() ' clean up
>> Doc1 = Nothing
>> --- End of example
>> Include "hjconst.jsh"
>>
>> Const
>>  CRLF = "\13\10", ; Cariage return followed by line feed character
>>  SCREEN_CAPTURE_FILE = "ScreenCapture.tif", ; Temp file placed in the 
>> JAWS
>> user settings directory
>>  NIRCMD = "nircmd.exe", ; Command Line Utility from:
>> http://www.nirsoft.net/utils/nircmd.html
>>  IMAGE_OCR = "MSPVIEW.EXE -o ",
>>  IMAGE_READ = "MSPVIEW.EXE -r ",
>>  ; Microsoft Office Document Imaging Viewer Control 11.0 or 12.0
>> (MDIVWCTL.DLL)
>>  MODI_DLL_PATH = "\"C:\\Program Files\\Common Files\\Microsoft
>> Shared\\MOD\\MDIVWCTL.DLL\""
>>
>> Script OCRSnapshotObject ()
>> Var
>>  String sImageFile,
>>  String sCmdUtility,
>>  String sExecute,
>>  Object oNull,
>>  Object oDoc,
>>  Object oAllImages,
>>  Object oImage,
>>  Object oLayout,
>>  Int iCount,
>>  Int iChars,
>>  Int iWords,
>>  String sText
>>
>> ; Close virtual buffer if open
>> If UserBufferIsActive () Then
>>  UserBufferDeactivate ()
>> EndIf
>> ; Set temporary image filename
>> Let sImageFile = GetJAWSSettingsDirectory () + "\\" + SCREEN_CAPTURE_FILE
>> Let sImageFile = "\"" + sImageFile  + "\"" ; Enclose in quotes in case 
>> there
>> is a space in the path
>> ; Set Command Line Utility path
>> Let sCmdUtility = GetJAWSSettingsDirectory () + "\\" + NIRCMD
>> Let sCmdUtility = "\"" + sCmdUtility + "\"" ; Enclose in quotes in case
>> there is a space in the path
>> ; Capture image of foreground active window
>> Let sExecute = sCmdUtility + " savescreenshotwin " + sImageFile
>> ; SayString ("Will perform save screenshot to file = \"" + sExecute + 
>> "\"")
>> Run (sExecute)
>> SayMessage (OT_MESSAGE, "Screen image has been captured.  Please wait for
>> OCR conversion.")
>> Delay (10) ; make sure the file is not in use
>>
>> ; Run Microsoft Office Document Imageing Object Model to perform OCR
>> ; Not sure how to create / open / register ovject as performed by 
>> Visual.Net
>> Basic in the nnext two lines
>> ; Dim Doc1 As MODI.Document
>> ; Let oDoc = New MODI.Document
>>
>> ; Method used in Homer Jax
>> Let oDoc = CreateObjectEx ("MODI.Document", False)
>> If ! oDoc Then
>>  SayMessage (OT_ERROR, "Could not create object using first call!")
>>  Let oDoc = CreateObject ("MODI.Document")
>> EndIf
>> If ! oDoc Then
>>  SayMessage (OT_ERROR, "Could not create objectusing second call!")
>>  ; Running out of possibilities, try the last variety
>>  Let oDoc = CreateObjectEx ("MODI.Document", True)
>> EndIf
>> If ! oDoc Then
>>  SayMessage (OT_ERROR, "Could not create objectusing third call!")
>>     Return oNull
>> EndIf
>> SayString ("Document object created!")
>> oDoc.Create(sImageFile) ; loads the image into the object
>> ; SayString ("Image file =" + sImageFile)
>> Let oAllImages = oDoc.Images
>> Let iCount = oAllImages.Count
>> SayString ("pages in file = " + IntToString (iCount))
>> ; oDoc.OCR() ; this will ocr all pages of a multi-page tiff file
>> ; oDoc.Save() ; this will save the deskewed reoriented images, and the 
>> OCR
>> text, back to the inputFile
>> ; Let oImage = oDoc.Images(0) ; first page of possible multi-page image
>> SayString ("OCR complete!")
>> ; Let oLayout = oImage.Layout ; OCR information
>> ; Let sText = oLayout.Text ; this puts the ocr results into a string
>> SayString ("text = \"" + sText + "\"")
>> ; Let iChars = oLayout.NumChars
>> ; Let iWords = oLayout.NumWords
>> SayMessage (OT_MESSAGE, "Screen image has been converted to text.")
>> SayMessage (OT_MESSAGE, "Converted " + IntToString (iChars) + " 
>> characters,
>> and " + IntToString (iWords) + " words")
>>
>> ; View converted text
>> SayMessage (OT_USER_BUFFER  , sText + CRLF + "Press Escape to close this
>> message.")
>> oDoc.Close() ; Clean up
>> Let oLayout = oNull
>> Let oImage =oNull
>> Let oAllImages = oNull
>> Let oDoc =oNull
>> EndScript
>>
>> Don Marang
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>
>
> -- 
> Soronel Haetir
> soronel.haetir@xxxxxxxxx
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
> 
__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: