#include "ltocr.h"
L_LTOCR_API L_INT EXT_FUNCTION L_OcrAutoRecognizeManager_SetJobOperationCallback(autoRecognizeManager, callback, userData)
Use this function to set a callback to get fired when any OCR job is running to get information on the current operation (creating an OCR document, loading a page, zoning, recognizing, saving, etc.).
Handle to the OCR engine auto recognize manager.
Pointer to L_OcrAutoRecognizeJobOperationCallback function to get called while job is running.
Optional user data to pass to the callback function.
| Value | Meaning |
|---|---|
| SUCCESS | The function was successful. |
| < 1 | An error occurred. Refer to Return Codes. |
Use this function to set a callback to get fired when any OCR job is running to get information on the current operation (creating an OCR document, loading a page, zoning, recognizing, saving, etc.).
This callback occurs while a job is running. For more information about the kind of information you will get during this callback, refer to L_OcrAutoRecognizeJobOperationCallbackData.
Required DLLs and Libraries
L_INT EXT_CALLBACK runJobOperationCB(const L_OcrAutoRecognizeJobOperationCallbackData* data, L_VOID* /*userData*/){// We did not pass a zone to the job, so the engine will attempt to do L_OcrPagge_AutoZone unless we// add any zone to the input document.// We can also check for data->IsPostOperation equals to L_TRUE and manipulate the zones// found by the engine at this pointif(!data->IsPostOperation && data->ImagePageNumber == 1){//Debug informationswitch(data->Operation){case L_OcrAutoRecognizeManagerJobOperation_Other:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_Other" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_CreateDocument:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_CreateDocument" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_LoadPage:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_LoadPage" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_PreprocessPage:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_PreprocessPage" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_ZonePage:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_ZonePage" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_RecognizePage:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_RecognizePage" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_SavePage:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_SavePage" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_Append:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_Append" << std::endl;break;case L_OcrAutoRecognizeManagerJobOperation_ConvertDocument:std::wcout << L"DEBUG --RunJobCB operation: JobOperation_ConvertDocument" << std::endl;break;}//end debug info// Add a graphics zone.// If you comment out this code, the result PDF will contain text, but since we will be adding a zone here,// the engine will not auto-zone the document for us. Also, since the zone we are adding is// graphics that takes up the whole page, the result PDF will contain a raster image and no text.if(data->PageBitmap != NULL && data->Operation == L_OcrAutoRecognizeManagerJobOperation_LoadPage){L_RECT rect = {0, 0, data->PageBitmap->Width, data->PageBitmap->Height};L_OcrZone ocrZone = { 0 };L_OcrZone_Default(&ocrZone);ocrZone.ZoneType = L_OcrZoneType_Graphic;ocrZone.Bounds = rect;L_UINT count = 0;L_OcrPage_GetZoneCount(data->Page, &count);std::wcout << L"DEBUG -- Zone count: " << count << std::endl; //Debug outputif(data->Page != NULL){L_OcrPage_AddZone(data->Page, &ocrZone);std::wcout << L"DEBUG -- Single zone inserted" << std::endl; //Debug outputL_OcrPage_GetZoneCount(data->Page, &count);std::wcout << L"DEBUG -- Zone count after inserting zone: " << count << std::endl; //Debug output}elsestd::wcout << L"DEBUG -- OCR page is NULL: " << count << std::endl; //Debug output}}return SUCCESS;}L_INT L_OcrAutoRecognizeManager_SetJobOperationCallbackExample(){L_INT retCode = -1;L_OcrEngine ocrEngine = NULL;L_OcrAutoRecognizeManager autoRecognizeManager = NULL;L_OcrAutoRecognizeJob autoRecognizeJob = NULL;retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);if(retCode != SUCCESS)return retCode;// Start the engine using default parametersretCode = L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);if(retCode != SUCCESS)return retCode;L_OcrEngine_GetAutoRecognizeManager(ocrEngine, &autoRecognizeManager);L_OcrAutoRecognizeJobOperationCallback jobOperationCallback;L_OcrAutoRecognizeManager_GetJobOperationCallback(autoRecognizeManager, &jobOperationCallback, NULL);if(jobOperationCallback == NULL){// Run the job in a thread and wait for it to be done// We will use the callback to get notified when the job is finishedL_OcrAutoRecognizeManager_SetJobOperationCallback(autoRecognizeManager, &runJobOperationCB, NULL);}L_OcrAutoRecognizeJobData jobData = {0};jobData.StructSize = sizeof(L_OcrAutoRecognizeJobData);wcscpy_s(jobData.ImageFileName, MAKE_IMAGE_PATH(L_TEXT("OCR1.tif")));wcscpy_s(jobData.DocumentFileName, MAKE_IMAGE_PATH(L_TEXT("OCR1.pdf")));jobData.Format = DOCUMENTFORMAT_PDF;wcscpy_s(jobData.JobName, L"MyJob");jobData.FirstPageNumber = 1;jobData.LastPageNumber = -1;jobData.UserData = NULL;wcscpy_s(jobData.ZonesFileName, L_TEXT(""));L_OcrAutoRecognizeManager_CreateJob(autoRecognizeManager, &autoRecognizeJob, &jobData);retCode = L_OcrAutoRecognizeManager_RunJob(autoRecognizeManager, autoRecognizeJob);//CLEANUPL_OcrAutoRecognizeJob_Destroy(autoRecognizeJob);L_OcrEngine_Destroy(ocrEngine);return retCode;}