三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

LEADTOOLS 使用OCR将图像转换为可搜索PDF - C DLL

LEADTOOLS 使用OCR将图像转换为可搜索PDF - C DLL

使用 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 6+(WinForms)

  • Swift:macOS 控制台

  • C API:C DLL(Windows)

  • Java: Java

所需知识

在开始本教程之前,请先查看“添加引用和设置许可证”以及“加载、显示和保存图像”教程,熟悉创建项目和加载图像的基本步骤。

创建项目并添加 LEADTOOLS 引用

首先,请使用“加载、显示和保存图像”教程中创建的 64 位 Windows API 项目副本。如果该项目不存在,请按照该教程中的步骤创建它。

要使用 LEADTOOLS OCR 功能,需要额外的头文件和 DLL 文件。打开预编译的头文件,并添加以下代码行(根据所使用的 Visual Studio 版本,添加 `<head>`pch.h或`<DLL>`):stdafx.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函数中,添加一个新的 case:switch (wmId)WM_COMMAND

switch (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。

← 返回列表