# include“ltocr.h”
L_LTOCR_APIL_INTEXT_FUNCTIONL_OcrAutoRecognizeManager_SetJobOperationCallback(autoRecognizeManager, callback, userData)
使用此函数设置一个回调,当任何OCR作业正在运行以获取当前操作的信息(创建OCR文档、加载页面、分区、识别、保存等)时触发该回调。
OCR引擎自动识别管理器的处理。
指针L_OcrAutoRecognizeJobOperationCallback函数在作业运行时调用。
传递给回调函数的可选用户数据。
价值 | 意义 |
---|---|
成功 | 活动很成功。 |
< 1 | 发生错误。指返回代码。 |
使用此函数设置一个回调,当任何OCR作业正在运行以获取当前操作的信息(创建OCR文档、加载页面、分区、识别、保存等)时触发该回调。
此回调在作业运行时发生。有关在此回调期间将获得的信息类型的详细信息,请参阅L_OcrAutoRecognizeJobOperationCallbackData。
必需的dll和库
L_INT EXT_CALLBACK runJobOperationCB(常量L_OcrAutoRecognizeJobOperationCallbackData* data, /*userData*/)
{
//我们没有将zone传递给作业,所以引擎将尝试执行L_OcrPagge_AutoZone,除非我们没有
//添加任何区域到输入文档。
//我们也可以检查data->IsPostOperation是否等于L_TRUE并操作这些区域
//引擎在此位置找到
如果(!data->IsPostOperation && data->ImagePageNumber == 1)
{
/ /调试信息
开关(数据- >操作)
{
情况下L_OcrAutoRecognizeManagerJobOperation_Other:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_Other"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_CreateDocument:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_CreateDocument"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_LoadPage:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_LoadPage"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_PreprocessPage:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_PreprocessPage"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_ZonePage:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_ZonePage"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_RecognizePage:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_RecognizePage"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_SavePage:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_SavePage"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_Append:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_Append"< < std:: endl;
打破;
情况下L_OcrAutoRecognizeManagerJobOperation_ConvertDocument:
std::wcout << L"DEBUG——runjobbcb操作:JobOperation_ConvertDocument"< < std:: endl;
打破;
}
//结束调试信息
//添加图形区。
//如果你注释掉这段代码,结果PDF将包含文本,但由于我们将在这里添加一个区域,
//引擎不会自动分区文件。而且,因为我们要加入的区域是
//占用整个页面的图形,结果PDF将包含光栅图像,没有文本。
如果(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(数据- >页面,数);
std::wcout << L“调试——区域计数:”<< count << std::endl;/ /调试输出
如果(data->Page != NULL)
{
L_OcrPage_AddZone(数据- >页面,&ocrZone);
std::wcout << L“调试—单个区域插入”< < std:: endl;/ /调试输出
L_OcrPage_GetZoneCount(数据- >页面,数);
std::wcout << LDEBUG——插入分区后的分区计数:<< count << std::endl;/ /调试输出
}
其他的
std::wcout << L“调试——OCR页面为空:”<< count << std::endl;/ /调试输出
}
}
返回成功;
}
L_INT L_OcrAutoRecognizeManager_SetJobOperationCallbackExample ()
{
L_INT retCode = -1;
L_OcrEngine ocrEngine = NULL;
L_OcrAutoRecognizeManager autoRecognizeManager = NULL;
L_OcrAutoRecognizeJob = NULL;
retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);
如果(retCode != SUCCESS)
返回retCode;
//使用默认参数启动引擎
retCode = L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);
如果(retCode != SUCCESS)
返回retCode;
L_OcrEngine_GetAutoRecognizeManager (ocrEngine &autoRecognizeManager);
L_OcrAutoRecognizeJobOperationCallback jobOperationCallback;
L_OcrAutoRecognizeManager_GetJobOperationCallback(autoRecognizeManager, &jobOperationCallback, NULL);
如果(jobOperationCallback == NULL)
{
//在线程中运行作业并等待它完成
//当任务完成时,我们将使用回调函数来获得通知
L_OcrAutoRecognizeManager_SetJobOperationCallback(autoRecognizeManager, &runJobOperationCB, NULL);
}
L_OcrAutoRecognizeJobData jobData = {0};
jobData。StructSize =运算符(L_OcrAutoRecognizeJobData);
wcscpy_s (jobData。ImageFileName MAKE_IMAGE_PATH (L_TEXT (“OCR1.tif”)));
wcscpy_s (jobData。文档FileName, MAKE_IMAGE_PATH(L_TEXT(“OCR1.pdf”)));
jobData。格式= 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);
/ /清理
L_OcrAutoRecognizeJob_Destroy (autoRecognizeJob);
L_OcrEngine_Destroy (ocrEngine);
返回retCode;
}