←Select platform

RunJobAsync Method

Summary
Runs a job asynchronously
Syntax
C#
Objective-C
C++/CLI
Java
Python
public void RunJobAsync( 
   IOcrAutoRecognizeJob job 
) 
- (BOOL)runJobAsync:(LTOcrAutoRecognizeJob *)job error:(NSError **)error 
public void runJobAsync(OcrAutoRecognizeJob job) 
void RunJobAsync(  
   IOcrAutoRecognizeJob^ job 
)  
def RunJobAsync(self,job): 

Parameters

job
The IOcrAutoRecognizeJob to run this parameter cannot be null (Nothing in VB). Use CreateJob to create a job.

Remarks

This method will create an internal worker thread and return control immediately to the called. When the job is completed, the IOcrAutoRecognizeJob.Errors member of  job will contain any errors that might have occurred during the recognition process. To get notification when the job is completed (whether successfully or with aborted due to errors or through user action), subscribe to the JobCompleted events.

To run a job synchronously, use RunJob.

To use this method, initialize a new OcrAutoRecognizeJobData object with the job's parameters (input image file name, pages, output document format, output document name, optional zones file name, etc.), then use CreateJob to create the IOcrAutoRecognizeJob object passed as  job to this method. Finally, call RunJobAsync passing the IOcrAutoRecognizeJob object.

This method will perform the following operations:

  1. The JobStarted event is triggered.

  2. Creates one or more IOcrDocument object to store the pages into. The number of OCR documents created is dependent on MaximumThreadsPerJob. If this value is 0 (maximum CPUs/cores) or is greater than 1 and multiple threads is supported by this engine, then more than one document might be created to participate in the recognition process. The document will be created as disk-based.

  3. Loops through the pages specified in OcrAutoRecognizeJobData.FirstPageNumber and in OcrAutoRecognizeJobData.LastPageNumber in OcrAutoRecognizeJobData.ImageFileName or OcrAutoRecognizeJobData.ImageStream and for each page:

  4. When all pages are processed they are saved to result file name specified in OcrAutoRecognizeJobData.DocumentFileName using the format specified OcrAutoRecognizeJobData.Format If LTD was used, the temporary file is converted to the final document using DocumentWriter.Convert and optionally DocumentWriter.AppendLtd.

  5. All OCR documents and temporary files are deleted.

  6. The JobCompleted event is triggered.

  7. You can use the JobProgress event to show the operation progress or to abort it if threading is not used. For more information and an example, refer to OcrProgressCallback.

  8. You can use the JobOperation event to get information regarding the current operation being performed. For more information and an example, refer to JobOperation.

The IOcrAutoRecognizeManager interface also has the following options to use with this method:

Option Description
MaximumPagesBeforeLtd

Add support for converting a document with unlimited number of pages. An OCR recognition operation on a document that contains a large amount of pages (10 and more) might result in an out of memory error.

All of the LEADTOOLS OCR engines supports saving the intermediate recognition results to a temporary LTD file (DocumentFormat.LTD). The result of subsequent pages will be appended to this temporary file. When all the pages of the document have been recognized, the engine will convert the temporary LTD file to the desired output format.

The MaximumPagesBeforeLtd property defines the maximum number of pages processed as a whole. For example, if the original document has 20 pages and the value of this property is 8, the engine will recognize the first 8 pages and saves the result to a temporary file, recognizes the second 8 pages and append the results, and finally, recognize the last 4 pages and convert the temporary document to the final format.

PreprocessPageCommands

Holds an array of OcrAutoPreprocessPageCommand items to control what auto-preprocess operation to perform on each page document prior to recognition.

MaximumThreadsPerJob

Maximum number of threads to use per job. You can instruct IOcrAutoRecognizeManager to use all available machine CPUs/cores when recognizing a document. This will greatly reduce the time required to finish the OCR operation.

JobErrorMode

Ability to resume on none critical errors. For example, if a source document has a page that could not be recognized. The offending page will be added to the final document as a graphics images and recognition will continue to the next page.

JobStarted, JobProgress, JobOperation and JobCompleted events

Events to track when both synchronous and asynchronous jobs has started, being run and completed.

AbortAllJobs

Aborts all running and pending jobs.

EnableTrace

Output debug messages to the standard .NET trace listeners.

Example
C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Ocr; 
using Leadtools.Document.Writer; 
using Leadtools.Forms.Common; 
using Leadtools.WinForms; 
 
private AutoResetEvent _jobFinishedEvent; 
 
public void RunJobAsyncExample() 
{ 
   string tifFileName = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif"); 
   string pdfFileName = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.pdf"); 
 
   // Create an instance of the engine 
   using (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)) 
   { 
      // Start the engine using default parameters 
      Console.WriteLine("Starting up the engine..."); 
      ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir); 
 
      IOcrAutoRecognizeManager ocrAutoRecognizeManager = ocrEngine.AutoRecognizeManager; 
 
      // Create the job 
      OcrAutoRecognizeJobData ocrJobData = new OcrAutoRecognizeJobData(tifFileName, DocumentFormat.Pdf, pdfFileName); 
      ocrJobData.JobName = "MyJob"; 
      IOcrAutoRecognizeJob ocrJob = ocrAutoRecognizeManager.CreateJob(ocrJobData); 
 
      // Create the event 
      _jobFinishedEvent = new AutoResetEvent(false); 
 
      // Run the job in a thread and wait for it to be done 
      // We will use the JobCompleted event to get notified when 
      // the job is finished 
      ocrAutoRecognizeManager.JobCompleted += new EventHandler<OcrAutoRecognizeRunJobEventArgs>(ocrAutoRecognizeManager_JobCompleted); 
      Console.WriteLine("Running the job..."); 
      ocrAutoRecognizeManager.RunJobAsync(ocrJob); 
 
      Console.WriteLine("Waiting for the job to complete..."); 
      _jobFinishedEvent.WaitOne(); 
      Console.WriteLine("Done..."); 
      _jobFinishedEvent.Close(); 
      ocrAutoRecognizeManager.JobCompleted -= new EventHandler<OcrAutoRecognizeRunJobEventArgs>(ocrAutoRecognizeManager_JobCompleted); 
   } 
} 
 
private void ocrAutoRecognizeManager_JobCompleted(object sender, OcrAutoRecognizeRunJobEventArgs e) 
{ 
   // Tell main thread we are done 
   _jobFinishedEvent.Set(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
   public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS23\Bin\Common\OcrLEADRuntime"; 
} 
 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.FilenameFilter; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.atomic.AtomicInteger; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
 
import static org.junit.Assert.*; 
 
import leadtools.*; 
import leadtools.document.writer.*; 
import leadtools.internal.AutoResetEvent; 
import leadtools.ocr.*; 
 
 
private AutoResetEvent _jobFinishedEvent; 
 
public void OcrAutoRecognizeManagerRunJobAsyncExample() throws InterruptedException { 
   String LEAD_VARS_ImagesDir = "C:\\LEADTOOLS23\\Resources\\Images"; 
   String LEAD_VARS_OcrLEADRuntimeDir = "C:\\LEADTOOLS23\\Bin\\Common\\OcrLEADRuntime"; 
   String tifFileName = combine(LEAD_VARS_ImagesDir, "Ocr1.tif"); 
   String pdfFileName = combine(LEAD_VARS_ImagesDir, "Ocr1.pdf"); 
 
   // Create an instance of the engine 
   OcrEngine ocrEngine = OcrEngineManager.createEngine(OcrEngineType.LEAD); 
 
   // Start the engine using default parameters 
   System.out.println("Starting up the engine..."); 
   ocrEngine.startup(null, null, null, LEAD_VARS_OcrLEADRuntimeDir); 
   OcrAutoRecognizeManager ocrAutoRecognizeManager = ocrEngine.getAutoRecognizeManager(); 
 
   // Create the job 
   OcrAutoRecognizeJobData ocrJobData = new OcrAutoRecognizeJobData(tifFileName, DocumentFormat.PDF, pdfFileName); 
   ocrJobData.setJobName("MyJob"); 
   OcrAutoRecognizeJob ocrJob = ocrAutoRecognizeManager.createJob(ocrJobData); 
 
   // Create the event 
   // _jobFinishedEvent = new AutoResetEvent(false); 
   _jobFinishedEvent = new AutoResetEvent(); 
 
   // Run the job in a thread and wait for it to be done 
   // We will use the JobCompleted event to get notified when 
   // the job is finished 
   ocrAutoRecognizeManager.addJobCompletedListener(ocrAutoRecognizeManager_JobCompleted); 
   System.out.println("Running the job..."); 
   ocrAutoRecognizeManager.runJobAsync(ocrJob); 
 
   System.out.println("Waiting for the job to complete..."); 
   _jobFinishedEvent.waitOne(); 
 
   System.out.println("Done..."); 
   _jobFinishedEvent.close(); 
 
   ocrAutoRecognizeManager.removeJobCompletedListener(ocrAutoRecognizeManager_JobCompleted); 
   ocrEngine.dispose(); 
} 
 
OcrAutoRecognizeRunJobListener ocrAutoRecognizeManager_JobCompleted=new OcrAutoRecognizeRunJobListener(){ 
 
   @Override public void onJob(OcrAutoRecognizeRunJobEvent e) { 
      _jobFinishedEvent.set(); 
   } 
    
}; 
Requirements

Target Platforms

Help Version 23.0.2024.4.19
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Ocr Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.