# include“ltocr.h”
L_LTOCR_APIL_INTEXT_FUNCTIONL_OcrDocumentManager_CreateDocument(documentManager, document, options, fileName)
创建一个新的OCR文件或基于内存的文档句柄。
OCR引擎文档管理器的句柄。
地址L_OcrDocument变量要用创建的文档句柄进行更新,该句柄可以参与识别和保存操作。
选项,用于控制如何创建或加载文档。
文档文件名。该值可以为NULL。
价值 | 意义 |
---|---|
成功 | 活动很成功。 |
< 1 | 发生错误。指返回代码. |
该方法既可以创建一个文件或基于内存的OCR文档,也可以根据fileName的值和选项加载先前创建的基于文件的文档,如下所示:
要创建一个基于内存的文档,将L_OcrCreateDocumentOptions_InMemory传递给options。没有使用fileName,引擎不会使用磁盘文件来存储文档数据。
要创建一个不会被重用的基于文件的文档,将NULL传递给fileName,将L_OcrCreateDocumentOptions_AutoDeleteFile传递给options。在这种情况下,引擎将在磁盘上创建一个临时文件,用作文档文件的存储。文件被删除时L_OcrDocument被摧毁。请注意,您在fileName中使用自己的文件名以及L_OcrCreateDocumentOptions_AutoDeleteFile,如果该文件存在,引擎将覆盖该文件,并在销毁时自动删除它。
要创建一个基于文件的文档,可以将文件名传递给fileName,并将L_OcrCreateDocumentOptions_None传递给options。在这种情况下,如果这个文件存在,引擎将覆盖它,但不会删除它L_OcrDocument被摧毁。
要重新加载使用前一个选项创建的文档,将相同的文件名传递给fileName,并将l_ocrcreatedocumentoptions_loadeexists传递给options。在这种情况下,引擎将根据文件中的数据重新生成文档。
使用L_OcrDocument_IsInMemory测试文档是基于内存的还是基于文件的L_OcrDocument_GetFileName获取基于文件的文档使用的磁盘文件的名称。这将被设置为传递给fileName或创建临时文件的名称的相同值。
有关内存和基于文件的文档的更多信息,请参阅编程与LEADTOOLS OCR模块- LEAD引擎.
使用OCR引擎的典型OCR操作包括启动并使用L_OcrDocumentManager_CreateDocument方法创建OCR文档,然后将页面添加到其中并执行自动或手动分区。一旦完成,L_OcrPage_Recognize在每个页面上调用,以收集识别数据并将其存储在页面内部。在收集到识别数据之后,您可以使用各种L_OcrDocument_Save或L_OcrDocument_SaveXml方法将文档保存为最终格式。
当你用完L_OcrDocument用此方法创建的句柄,应尽快销毁它以释放其资源。摧毁一个L_OcrDocument句柄将释放存储在其内部页列表中的所有页。
笔记:
必需的dll和库
L_INT L_OcrDocumentManager_CreateDocumentExample (保龄球inMemoryMode)
{
BITMAPHANDLE bitmap = {0};
L_OcrEngine ocrEngine = NULL;
L_OcrPage ocrPage = NULL;
L_OcrDocumentManager = NULL;
L_OcrDocument ocrDocument = NULL;
//创建引擎实例
L_INT retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);
如果(retCode == SUCCESS)
{
//使用默认参数启动引擎
retCode = L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);
如果(retCode != SUCCESS)
返回retCode;
//加载一个被识别的页面
retCode = L_LoadBitmap(MAKE_IMAGE_PATH(L_TEXT(“Ocr1.tif”)),位图,运算符(bitmaphandle), 0, order_rgb, null, null);
如果(retCode != SUCCESS)
转到清理;
//添加图像到OCR页面。将位图的所有权转移到页面
retCode = L_OcrPage_FromBitmap(ocrEngine, &ocrPage, &bitmap, L_OcrBitmapSharingMode_AutoFree, NULL, NULL);
如果(retCode != SUCCESS)
转到清理;
//我们有一个有效的页面,位图所有权已经转移。因此,我们不再需要释放位图。
//当ocrPage被销毁时,位图将被释放。
bitmap.Flags.Allocated = 0;
//自动查找页面上文本所在的区域/区域
retCode = L_OcrPage_AutoZone(ocrPage, NULL, NULL);
如果(retCode != SUCCESS)
转到清理;
//识别页面
//注意:无需调用AutoZone或手动添加区域即可调用Recognize。
//引擎会自动检查并自动分区页面。
retCode = l_ocrpage_recognition (ocrPage, NULL, NULL);
如果(retCode != SUCCESS)
转到清理;
//获取文档管理器
retCode = L_OcrEngine_GetDocumentManager(ocrEngine, &ocrDocumentManager);
如果(retCode != SUCCESS)
转到清理;
//创建一个OCR文档
如果(inMemoryMode)
retCode = L_OcrDocumentManager_CreateDocument(ocrDocumentManager, &ocrDocument, L_OcrCreateDocumentOptions_InMemory, NULL);
其他的
retCode = L_OcrDocumentManager_CreateDocument(ocrDocumentManager, &ocrDocument, L_OcrCreateDocumentOptions_AutoDeleteFile, NULL);
如果(retCode != SUCCESS)
转到清理;
//显示创建的OCR文档类型
L_BOOL isInMemory = L_FALSE;
L_OcrDocument_IsInMemory (ocrDocument &isInMemory);
如果(isInMemory)
std:: cout < <OCR文档类型:基于内存的;
其他的
{
L_TCHAR documentFileName[MAX_PATH] = {0};
L_OcrDocument_GetFileName(ocrDocument, documentFileName, _countof(documentFileName));
std:: cout < <OCR文档类型:基于文件的<<"文件路径:"< < documentFileName;
}
//向文档中添加页面。注意:在文件模式下使用OcrDocument时,
//将页面添加到文档必须在识别之后。如果OcrPage,
//是在被识别之前添加的,没有识别数据将被关联
//在OcrDocument中的OcrPage。
retCode = L_OcrDocument_AddPage(ocrDocument, ocrPage);
如果(retCode != SUCCESS)
转到清理;
//将页面添加到基于文件的文档中,将捕获识别数据的快照并将其存储在文档中。在这
//点,该页不再需要。所以销毁它来释放不再使用的内存
L_OcrPage_Destroy (ocrPage);
//将句柄设置为NULL,这样我们就不会在清理代码中释放它
ocrPage = NULL;
//将文档保存为PDF格式
retCode = L_OcrDocument_Save(ocrDocument, MAKE_IMAGE_PATH(L_TEXT(“Ocr1.pdf”)), documentformat_pdf, null, null);
}
清理:
如果(bitmap.Flags.Allocated)
L_FreeBitmap(位图);
如果(ocrPage != NULL)
L_OcrPage_Destroy (ocrPage);
如果(ocrDocument != NULL)
L_OcrDocument_Destroy (ocrDocument);
如果(ocrEngine != NULL)
L_OcrEngine_Destroy (ocrEngine);
返回retCode;
}