To add code to an existing project that will let you recognize pages:
Start with the program you created in Working with Pages.
Define the following global IDs in Ezfunc.h in the OCR_Ltdoc2 directory:
#define IDM_FIND_ZONES 201#define IDM_ZONES_COUNT 202#define IDM_ADD_VERIFICATION_ZONE 203
Edit EZFUNC.RC file in the OCR_Ltdoc2 directory and add the following lines:
MAIN_MENU MENUBEGIN......MENUITEM "Find Zones" IDM_FIND_ZONESMENUITEM "Zone Count" IDM_ZONES_COUNTMENUITEM "Add Verification Zone" IDM_ADD_VERIFICATION_ZONEEND
Define the following global variables in Ezfunc.H in the OCR_Ltdoc2 directory:
L_INT nZoneCount; In Ezfunc.cpp in the MainWndProc procedure, add the following code to the switch ("switch(LOWORD(wParam))") statement for WM_COMMAND:
case IDM_FIND_ZONES:{AUTOZONEOPTS2 ZoneOpts;memset(&ZoneOpts, 0, sizeof(AUTOZONEOPTS2));ZoneOpts.uStructSize = sizeof(AUTOZONEOPTS2);ZoneOpts.bEnableForceSingleColumn = TRUE;ZoneOpts.bDetectNonGridedTables = TRUE;L_Doc2SetZoneOptions(hDoc, &ZoneOpts);nRet = L_Doc2FindZones(hDoc, 0);if (nRet == SUCCESS)MessageBox(NULL, TEXT("The automatic zone method found all available zones in the specified pages successfully."), TEXT("Notice!"), MB_OK);else{wsprintf (achBuff, TEXT("Error %d in finding available zones in the specified page."), nRet);MessageBox (NULL, achBuff, TEXT("Error"), MB_OK);}// Now the engine will build the OCR zone list, and we need to specify a verification event for each zone// but the engine allows adding a verification event only for user zones. So, we need to duplicate these zones in the same coordinates...DuplicateOcrZones(0);InvalidateRect (hWnd, NULL, FALSE);}break;case IDM_ZONES_COUNT:{nRet = L_Doc2GetZoneCount(hDoc, 0, &nZoneCount);if (nRet == SUCCESS){wsprintf(achBuff, TEXT("Total Zones count = %d\n"), nZoneCount);MessageBox(NULL, achBuff, TEXT("Zones Count"), MB_OK);}}break;case IDM_ADD_VERIFICATION_ZONE:{ZONEDATA2 Zone;L_INT i;for(i=0; i<nZoneCount; i++){memset(&Zone, 0, sizeof(ZONEDATA2));nRet = L_Doc2GetZone(hDoc, 0, i, &Zone, sizeof(ZONEDATA2));if (nRet == SUCCESS){if ((Zone.uFlags & DOC2_ZONE_CHK_CHECKCBF_PROHIBIT) == DOC2_ZONE_CHK_CHECKCBF_PROHIBIT)Zone.uFlags &= ~ DOC2_ZONE_CHK_CHECKCBF_PROHIBIT;Zone.pfnCallback = VerificationCB;nRet = L_Doc2UpdateZone(hDoc, 0, i, &Zone);if (nRet != SUCCESS){wsprintf (achBuff, TEXT("Error %d in updating zone # %d"), nRet, i);MessageBox (NULL, achBuff, TEXT("Error"), MB_OK);}}}}break;
Add the following function at the end of the file in EZFUNC.CPP in the OCR_Ltdoc2 directory.
L_INT EXT_CALLBACK VerificationCB(L_INT nZoneIndex, L_TCHAR * pszWord, DOC2_VERIFYCODE * pVerify, L_VOID * pUserData){UNREFERENCED_PARAMETER(nZoneIndex);UNREFERENCED_PARAMETER(pszWord);UNREFERENCED_PARAMETER(pUserData);*pVerify = DOC2_VERIFY_ACCEPT;return SUCCESS;}
Also, add the following statement before the MainWndProc function.
L_INT EXT_CALLBACK VerificationCB(L_INT nZoneIndex, L_TCHAR * pszWord, DOC2_VERIFYCODE * pVerify, L_VOID * pUserData); Add the following at the end of the code in EZFUNC.CPP in the OCR_Ltdoc2 directory:
L_INT DuplicateOcrZones(L_INT nPageIndex){L_INT nOcrCount=0;L_Doc2GetZoneCount(hDoc, nPageIndex, &nOcrZonesCount);pZONEDATA2 pZones = (pZONEDATA2)GlobalAllocPtr(GHND, sizeof(ZONEDATA2) * nOcrZonesCount);if (!pZones)return ERROR_NO_MEMORY;L_INT nRet;for (int i=0; i<nOcrZonesCount; i++){nRet = L_Doc2GetZone(hDoc, nPageIndex, i, &pZones[i], sizeof(ZONEDATA2));if (nRet != SUCCESS)return nRet;}for (int i=0; i<nOcrZonesCount; i++)L_Doc2AddZone(hDoc, nPageIndex, -1, &pZones[i]);return SUCCESS;}
Also, add the following statement before the MainWndProc function.
L_INT DuplicateOcrZones(L_INT nPageIndex); Build SimpleLoad.exe.
Run SimpleLoad.exe.