当前位置: 首页 > news >正文

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。

http://www.jsqmd.com/news/1363342/

相关文章:

  • 2026 年更新:大安资质齐全的无机纤维施工服务团队找哪家,你家保温层漏热掉渣?这道隐蔽工程怎么才能不翻车?-峰朝无机纤维喷涂 - 企业信息推荐-2
  • C语言函数传参机制与调用栈深度解析
  • U盘容量检测工具Validrive原理与应用指南
  • AI音乐制作实战指南:从音色克隆到工程化整合
  • MBTI性格测试:解码你的职业与人生密码
  • 编程新手突破期:11天练习指南与算法入门
  • 从工具调用到认知伙伴:Agent记忆系统的架构演进与实践路径
  • 深度解析:Montserrat字体家族的完整实战指南
  • Python农业种植管理系统开发:Flask与Django技术选型
  • Windows平台流媒体服务器架构演进:SRS在WSL环境下的高性能部署实践
  • 2026 年当下,巴林左旗正规的防水金属雕花保温装饰板生产厂家哪个好,旧房子翻修不用愁,这玩意儿居然能集保温、防水、雕花于一身? - 行业鉴选官
  • Kubernetes中cert-manager实现ACME自动化证书管理实战
  • 如何快速拯救损坏的Minecraft存档:Region-Fixer完整使用指南
  • qBittorrent专业级BT客户端功能解析与优化指南
  • 偏远地区视频监控解决方案:EasyCVR技术架构与优化实践
  • DouyinLiveRecorder:40+平台直播录制神器,告别错过精彩瞬间的遗憾
  • gprMax电磁波仿真完整指南:地质雷达建模终极解决方案
  • 去水印工具有免费版吗?轻量图片视频处理工具搜罗 - 免费软件工具方法教程
  • 使用Apache Batik实现SVG到PNG的高质量转换
  • 终极指南:Windows版微信/QQ/TIM防撤回补丁完整教程
  • 开源离线风险矩阵引擎RAE:实现ISO 27005等标准风险评估自动化
  • 2026年实测:6大宁波暑假语文小升初机构综合评测
  • Zotero插件商店:重新定义文献管理插件生态的完整解决方案
  • 消防安全绳定做厂家如何选?2025年专业采购指南 - 装修教育财税推荐2026
  • AI Agent框架对比:从OpenClaw到Hermes Agent的技术演进与选型指南
  • 如何免费解锁专业级生物图像分析:QuPath完全指南
  • SpringSecurity核心JAR包解析与实战避坑指南
  • 如何免费解锁加密音乐文件:Unlock Music终极使用指南
  • WPF开发中Stylet框架的窗体管理实践
  • HLS可综合设计技巧--时钟 复位