
使用 OCR 将图像转换为可搜索的 PDF - Windows C DLL本教程展示了如何使用 Windows C DLL 应用程序中的 LEADTOOLS SDK 设置 OCR 处理将任何受支持的文件转换为可搜索的 PDF。概述概括本教程演示如何在 Windows C DLL 应用程序中加载、识别和保存 OCR 数据到 PDF。完成时间20分钟Visual Studio 项目下载教程项目19 KB平台Windows C DLL 应用程序集成开发环境Visual Studio 2019、2022开发许可证下载 LEADTOOLS尝试用其他语言C#. NET 6控制台、. NET 6WinFormsSwiftmacOS 控制台C APIC DLLWindowsJava Java所需知识在开始本教程之前请先查看“添加引用和设置许可证”以及“加载、显示和保存图像”教程熟悉创建项目和加载图像的基本步骤。创建项目并添加 LEADTOOLS 引用首先请使用“加载、显示和保存图像”教程中创建的 64 位 Windows API 项目副本。如果该项目不存在请按照该教程中的步骤创建它。要使用 LEADTOOLS OCR 功能需要额外的头文件和 DLL 文件。打开预编译的头文件并添加以下代码行根据所使用的 Visual Studio 版本添加 headpch.h或DLLstdafx.h#include C:\LEADTOOLS23\Include\ltocr.h #pragma comment (lib, C:\\LEADTOOLS23\\Lib\\CDLL\\x64\\Ltocr_x.lib) // OCR support设置许可证文件许可证用于解锁项目所需的功能。必须在调用任何工具包函数之前设置许可证。有关详细信息包括不同平台的教程请参阅“设置运行时许可证”。运行时许可证有两种类型评估许可证在下载评估工具包时获得。它允许对工具包进行评估。部署许可证。如果需要部署许可证文件和开发者密钥请参阅“获取许可证”部分。添加 OCR 代码项目创建完毕参考资料添加完毕许可证设置完毕加载文件代码添加完毕就可以开始编码了。添加一个包含新菜单项的新菜单在“文件”菜单旁边添加一个新的“OCR”菜单。在新增的OCR菜单下添加“识别并导出结果”菜单项。新菜单项的 ID 应为ID_OCR_RECOGNIZEANDEXPORTRESULTS。笔记有关如何在 Visual Studio 2022 中添加菜单项的详细信息请参阅“加载、显示和保存图像”教程。有关特定工具包功能或文件格式所需的 DLL 的完整列表请参阅“应用程序中包含的文件”。有关 LEADTOOLS OCR 模块文件的详细信息请参阅LEAD Engine Runtime Redistributables。打开项目的 CPP 文件并在顶部的全局变量部分添加以下声明。// OCR Global Variables: L_OcrEngine ocrEngine NULL;L_OcrDocument ocrDocument NULL;L_OcrPage ocrPage NULL; L_OcrDocumentManager ocrDocumentManager NULL;转到该InitInstance函数并在 LEADTOOLS 设置许可证代码下方添加以下初始化代码if ((SUCCESS ! L_OcrEngineManager_CreateEngine(L_OcrEngineType_LEAD, ocrEngine)) || (SUCCESS ! L_OcrEngine_Startup(ocrEngine, NULL, TEXT(C:\\LEADTOOLS23\\Bin\\Common\\OcrLEADRuntime)))|| (SUCCESS ! L_OcrEngine_GetDocumentManager(ocrEngine, ocrDocumentManager))){MessageBox(NULL, TEXT(Error initializing OCR..\nAborting), TEXT(LEADTOOLS Demo), MB_ICONERROR);return FALSE; }找到该WndProc函数并修改 case 下的代码ID_FILE_OPEN。在函数调用下方紧接着添加以下代码L_LoadBitmap()if(LEADBmp.Flags.Allocated) {if(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_DESTROYcase 代码并在调用之前添加以下几行PostQuitMessage()。if (ocrDocument) L_OcrDocument_Destroy(ocrDocument);if (ocrEngine)L_OcrEngine_Destroy(ocrEngine);在case语句下方的WndProc函数中添加一个新的 caseswitch (wmId)WM_COMMANDswitch (wmId) {case ID_OCR_RECOGNIZEANDEXPORTRESULTS:{if (!LEADBmp.Flags.Allocated){MessageBox(hWnd, TEXT(Cannot perform OCR. No image loaded), TEXT(LEADTOOLS Demo), MB_ICONERROR);break;}OcrAndSaveResult(hWnd);break;} // Keep rest of the code as is创建一个名为 new function 的新函数OcrAndSaveResult并将其放在现有WndProc函数上方。将以下代码添加到新函数中。void OcrAndSaveResult(HWND hwnd) {if (!ocrEngine || !ocrDocument || !ocrPage){MessageBox(hwnd, TEXT(OCR Engine not properly initialized), TEXT(LEADTOOLS OCR Demo), MB_OK);return;}L_OcrLanguageManager languageManager NULL;L_OcrLanguage langs[] { L_OcrLanguage_EN };const TCHAR* outputFile TEXT(C:\\Temp\\output.pdf);L_OcrEngine_GetLanguageManager(ocrEngine, languageManager);L_OcrLanguageManager_EnableLanguages(languageManager, langs, _countof(langs));// Try to recognize the text in the documentL_OcrPage_Recognize(ocrPage, NULL, NULL);// Add the created OCR page into the file-based OCR documentL_OcrDocument_AddPage(ocrDocument, ocrPage);TCHAR message[1024];if (L_OcrDocument_Save(ocrDocument, outputFile, DOCUMENTFORMAT_PDF, NULL, NULL) SUCCESS)wsprintf(message, TEXT(OCR succeeded and result saved to %s), outputFile);elsewsprintf(message, TEXT(OCR failed));MessageBox(hwnd, message, TEXT(LEADTOOLS OCR Demo), MB_OK); }运行项目按F5运行项目或者选择“调试”-“开始调试”。如果步骤正确应用程序应该可以运行并允许用户选择“文件”-“打开”来加载要进行 OCR 识别的文件。在本例中我们将使用此扫描文档。选择“OCR”-“识别并导出结果”应用程序将对输入文件运行 OCR并将结果输出到可搜索的 PDF 文件C:\Temp\output.pdf以下是原始扫描文档的预期输出输出 PDF本教程介绍了如何创建一个 C Windows API OCR 应用程序该应用程序接受一个输入文件并导出为可搜索的 PDF。