Sets the cells of a zone.
#include "ltocr.h"
L_LTOCR_API L_INT EXT_FUNCTION L_OcrPage_SetZoneCells(page, index, cells, count)
Handle to the OCR page.
Zone index to remove.
Array of L_OcrZoneCell structure to update the zone at the specified index with. pass NULL for this parameter to clear the zone cells.
Number of elements inside the cells array.
| Value | Meaning |
|---|---|
| SUCCESS | The function was successful. |
| < 1 | An error occurred. Refer to Return Codes. |
Sets the cells of a zone. Only zone of type table (L_OcrZoneType_Table) can contain cells.
L_INT L_OcrPage_SetZoneCellsExample(){BITMAPHANDLE bitmap = { 0 };L_OcrEngine ocrEngine = NULL;L_OcrPage ocrPage = NULL;L_OcrDocumentManager ocrDocumentManager = NULL;L_OcrDocument ocrDocument = NULL;// Create an instance of the engineL_INT retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_LEAD, &ocrEngine);if(retCode != SUCCESS)return retCode;// Start the engine using default parametersL_OcrEngine_Startup(ocrEngine, NULL, OCR_LEAD_RUNTIME_DIR);// Load an imageretCode = L_LoadBitmap(MAKE_IMAGE_PATH(L_TEXT("Clean.tif")), &bitmap, sizeof(BITMAPHANDLE), 0, ORDER_RGB, NULL, NULL);if(retCode != SUCCESS)goto CLEANUP;// Add image to OCR pageretCode = L_OcrPage_FromBitmap(ocrEngine, &ocrPage, &bitmap, L_OcrBitmapSharingMode_AutoFree, NULL, NULL);if(retCode != SUCCESS){L_FreeBitmap(&bitmap);goto CLEANUP;}// Transfer ownership to OCR pagebitmap.Flags.Allocated = 0;// Get the setting managerL_OcrSettingManager ocrSettingManager = NULL;L_OcrEngine_GetSettingManager(ocrEngine, &ocrSettingManager);// Remove the "Table Cells as Zones" flag from the Recognition.Zoning.Options setting in order to detect the whole// table as one zone so we can get its cells laterretCode = L_OcrSettingManager_SetStringValue(ocrSettingManager, TEXT("Recognition.Zoning.Options"), TEXT("Detect Text,Detect Graphics,Detect Table,Detect Accurate Zones,Use Advanced Table Detection"));if(retCode != SUCCESS)goto CLEANUP;// Auto zone the pageretCode = L_OcrPage_AutoZone(ocrPage, NULL, NULL);if(retCode != SUCCESS)goto CLEANUP;// Loop through page zones to find the table zone and manipulate its cellsL_UINT zonesCount = 0;L_OcrPage_GetZoneCount(ocrPage, &zonesCount);for(L_UINT i = 0; i < zonesCount; i++){L_OcrZone zone = {0};zone.StructSize = sizeof(L_OcrZone);L_OcrPage_GetZoneAt(ocrPage, i, &zone);if(zone.ZoneType == L_OcrZoneType_Table){L_OcrZoneCell* cells = NULL;L_UINT cellsCount = 0;L_OcrPage_GetZoneCells(ocrPage, i, &cells, &cellsCount);if(cellsCount > 0){// you can do any change you want here for the zone cells, below we will replace the first cell with another one we createL_OcrZoneCell newCell = {0};L_OcrCell_Default(&newCell);newCell.Bounds = cells[0].Bounds;newCell.LeftBorderWidth = 2;newCell.TopBorderWidth = 2;newCell.RightBorderWidth = 2;newCell.BottomBorderWidth = 2;cells[0] = newCell;// set eh cells back to engine after we changed themL_OcrPage_SetZoneCells(ocrPage, i, cells, cellsCount);}}}// Recognize the page (automatically zoned)L_OcrPage_Recognize(ocrPage, NULL, NULL);// Recognize and save the file to the output formatL_OcrEngine_GetDocumentManager(ocrEngine, &ocrDocumentManager);// Create file-based OCR documentL_OcrDocumentManager_CreateDocument(ocrDocumentManager, &ocrDocument, L_OcrCreateDocumentOptions_AutoDeleteFile, NULL);// In Document File Mode, add OcrPage to OcrDocument after recognitionL_OcrDocument_AddPage(ocrDocument, ocrPage);L_OcrPage_Destroy(ocrPage);// Save the document we haveL_OcrDocument_Save(ocrDocument, MAKE_IMAGE_PATH(L_TEXT("Output.pdf")), DOCUMENTFORMAT_PDF, NULL, NULL);CLEANUP:if(ocrDocument != NULL)L_OcrDocument_Destroy(ocrDocument);if(ocrEngine != NULL)L_OcrEngine_Destroy(ocrEngine);return SUCCESS;}