本教程演示如何设置OCR处理,使用Windows C DLL应用程序中的LEADTOOLS SDK将任何支持的文件转换为可搜索的PDF。
概述 | |
---|---|
总结 | 本教程演示如何在Windows C DLL应用程序中加载、识别并将OCR数据保存到PDF中。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(19kb) |
平台 | Windows C DLL应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
用另一种语言试试 |
|
来熟悉创建项目和加载图像的基本步骤添加引用和设置License而且加载,显示和保存图像教程,在工作之前转换图像到可搜索的PDF与OCR - Windows C DLL教程。
中创建的64位Windows API项目的副本开始加载,显示和保存图像教程。如果项目不可用,请按照该教程中的步骤创建它。
为了利用LEADTOOLS OCR功能,需要额外的头文件和DLL文件。打开预编译的头文件(或pch.h
或stdafx.h
,取决于所使用的Visual Studio的版本)并添加以下行:
# include“C: \ LEADTOOLS22 \ \ ltocr.h包括”
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltocr_x.lib”)//支持OCR
许可证解锁项目所需的特性。它必须在调用任何工具包函数之前设置。有关详细信息,包括不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
创建了项目、添加了引用、设置了许可证并添加了加载文件代码之后,就可以开始编码了。
添加一个包含新项目的新菜单:
ID_OCR_RECOGNIZEANDEXPORTRESULTS
.请注意
有关如何在Visual Studio 2019中添加菜单项的详细信息,请参见加载,显示和保存图像教程。
有关特定工具包功能或文件格式需要哪些dll的完整列表,请参阅与您的应用程序包含的文件.
有关LEADTOOLS OCR模块文件的详细信息,请参见LEAD引擎运行时重分发表.
打开项目的CPP文件,并将以下声明添加到顶部的Global Variables部分。
// OCR全局变量:
L_OcrEngine ocrEngine = NULL;
L_OcrDocument;
L_OcrPage ocrPage = NULL;
L_OcrDocumentManager;
去InitInstance
函数,并在LEADTOOLS集许可代码下面添加以下初始化代码:
如果((SUCCESS != L_OcrEngineManager_CreateEngine(L_OcrEngineType_LEAD, &ocrEngine))
|| (SUCCESS != L_OcrEngine_Startup(ocrEngine, NULL, TEXT)“C: \ \ LEADTOOLS22 \ \ Bin \ \共同\ \ OcrLEADRuntime”)))
|| (SUCCESS != L_OcrEngine_GetDocumentManager(ocrEngine, &ocrDocumentManager)))
{
对话框(NULL,文本("初始化OCR错误..\nAborting"),文本(“LEADTOOLS演示”), MB_ICONERROR);
返回虚假的;
}
导航到指向
函数和修改下面的代码ID_FILE_OPEN
的情况。的调用下面立即添加以下代码L_LoadBitmap ()
功能:
如果(LEADBmp.Flags.Allocated)
{
如果(ocrDocument)
L_OcrDocument_Destroy (ocrDocument);
ocrDocument = NULL;
ocrPage = NULL;
L_OcrDocumentManager_CreateDocument(ocrDocumentManager, &ocrDocument, L_OcrCreateDocumentOptions_AutoDeleteFile, NULL);
L_OcrPage_FromBitmap(ocrEngine, &ocrPage, &LEADBmp, L_OcrBitmapSharingMode_None, NULL, NULL);
}
接下来,修改WM_DESTROY
实例代码,并在调用之前添加以下行PostQuitMessage ()
.
如果(ocrDocument)
L_OcrDocument_Destroy (ocrDocument);
如果(ocrEngine)
L_OcrEngine_Destroy (ocrEngine);
在指向
在开关(wmId)
语句的下面WM_COMMAND
Case,添加一个新的Case:
开关(wmId)
{
情况下ID_OCR_RECOGNIZEANDEXPORTRESULTS:
{
如果(LEADBmp.Flags.Allocated !)
{
对话框(hWnd,文本("无法执行OCR。未加载图像"),文本(“LEADTOOLS演示”), MB_ICONERROR);
打破;
}
OcrAndSaveResult (hWnd);
打破;
}
//保持代码的其余部分不变
创建一个名为OcrAndSaveResult
把它放在指向
函数。将以下代码添加到新函数中。
无效OcrAndSaveResult (HWND HWND)
{
如果(!ocrEngine || !ocrDocument || !
{
对话框(hwnd,文本(OCR引擎未正确初始化),文本(“LEADTOOLS OCR演示”), MB_OK);
返回;
}
L_OcrLanguageManager languageManager = NULL;
L_OcrLanguage languages [] = {L_OcrLanguage_EN};
常量TCHAR* outputFile = TEXT(“C: \ \ Temp \ \ output.pdf”);
L_OcrEngine_GetLanguageManager (ocrEngine &languageManager);
L_OcrLanguageManager_EnableLanguages(languageManager, langs, _countof(langs));
//尝试识别文档中的文本
l_ocrpage_recognition (ocrPage, NULL, NULL);
//将创建的OCR页面添加到基于文件的OCR文档中
L_OcrDocument_AddPage (ocrDocument ocrPage);
TCHAR消息[1024];
如果(L_OcrDocument_Save(ocrDocument, outputFile, DOCUMENTFORMAT_PDF, NULL, NULL) == SUCCESS)输出说明
wsprintf(消息、文本("OCR成功,结果已保存到%s"), outputFile);
其他的
wsprintf(消息、文本(“OCR失败”));
消息框(hwnd, message, TEXT)“LEADTOOLS OCR演示”), MB_OK);
}
通过按运行项目F5或者通过选择Debug ->开始调试.
如果正确地执行了步骤,应用程序应该会运行,并允许用户进行选择File ->打开以载入将进行OCR识别的文件。对于这个例子,这个扫描文档将会被使用。选择Ocr ->识别和导出结果让应用程序在输入文件上运行OCR并输出到一个可搜索的PDF文件:C: \ Temp \ output.pdf
以下是原始扫描文档的预期输出:输出PDF
本教程介绍了如何创建一个c++ Windows API OCR应用程序,该应用程序接受输入文件并将其导出为可搜索的PDF。