编写AAMVA驾照条码- Windows C DLL

本教程展示了如何创建一个Windows C/ c++ API应用程序,该应用程序使用LEADTOOLS SDK编写PDF417 AAMVA标准条形码。

概述
总结 本教程介绍如何在Windows C DLL应用程序中使用LEADTOOLS AAMVA Builder SDK技术。
完成时间 30分钟
Visual Studio项目 下载教程项目(20kb)
平台 Windows C DLL应用程序
IDE Visual Studio 2017, 2019
开发许可 下载LEADTOOLS
用另一种语言试试

所需的知识

在开始之前编写AAMVA驾照条码- Windows C DLL教程,熟悉创建项目和加载/显示图像的基本步骤添加引用和设置License而且加载,显示和保存图像教程。

创建项目并添加LEADTOOLS引用

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

要使用LEADTOOLS构建AAMVA数据并编写条形码,请添加所需的头文件和DLL文件。打开预编译的头文件(或pch.hstdafx.h,取决于所使用的Visual Studio版本),并添加以下行:

# include“C: \ LEADTOOLS22 \ \ Ltbar.h包括”#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltbar_x.lib”//条形码和AAMVA支持

请注意

有关特定工具箱功能或文件格式所需dll的完整列表,请参阅你的申请中包含的文件

有关所需的Barcode dll的详细信息,请参阅帮助主题应用程序中包含的条形码文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱功能之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License

有两种类型的运行时许可证:

请注意

中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。

添加AAMVA构建数据代码

创建项目、添加引用、设置许可证以及添加加载和显示图像代码之后,就可以开始编码了。

以下步骤适用于Visual Studio 2019;对于Visual Studio的其他版本,它们可能有所不同。

解决方案资源管理器双击资源文件(.rc)。

添加一个新的条形码菜单旁边的下拉菜单文件菜单。在新增的条形码菜单,添加&写入AAMVA条形码菜单项。新项目的ID应该是ID_BARCODE_WRITEAAMVABARCODE

指向函数和开关(wmId)语句的下面WM_COMMANDCase,添加一个新的Case:

开关(wmId)情况下ID_BARCODE_WRITEAAMVABARCODE://创建一个空的位图并用浅色填充BITMAPHANDLE BarcodeBmp = {0};intW = 700 h = 450;L_CreateBitmap (&BarcodeBmp运算符LEADBmp, TYPE_CONV, w, h, 24, ORDER_BGR, NULL, BOTTOM_LEFT, NULL, 0);BarcodeBmp。XResolution = BarcodeBmp。YResolution = 200;L_FillBitmap(&BarcodeBmp, RGB(255,200,150));L_CHAR*数据= NULL;L_UINT数据长度= 0;L_INT nRet = SetAAMVAIDInformation(&data, &dataLength);如果(nRet != SUCCESS)对话框(hWnd,文本("设置AAMVA信息错误"),文本(“条形码演示”), MB_ICONERROR);如果(数据)L_BarCodeAAMVAMemoryFree(数据);打破如果(WritePdf417Barcode(hWnd, &BarcodeBmp, data, dataLength) == SUCCESS)如果(LEADBmp.Flags.Allocated)L_FreeBitmap (&LEADBmp);LEADBmp = BarcodeBmp;//复制结构而不复制图像数据InvalidateRect(hWnd, NULL, TRUE);如果(数据)L_BarCodeAAMVAMemoryFree(数据);打破//保留其余的代码

添加一个新的SetAAMVAIDInformation函数并向其添加以下代码。这个函数可以放在指向功能:

(L_CHAR** pData, L_UINT* pDataLength)AAMVAIDBUILDER Builder = {0};L_INT nRet = L_BarCodeAAMVAIDBuilderInit(&Builder);如果(nRet != SUCCESS)返回nRet;nRet = l_barcodeaamvaidbuilderset管辖权(&Builder, L_AAMVA_JURISDICTION_PENNSYLVANIA, NULL);如果(nRet != SUCCESS)返回nRet;nRet = l_barcodeaamvaidbuilderset司法权版本(&Builder,“00”);如果(nRet != SUCCESS)返回nRet;nRet = L_BarCodeAAMVAIDBuilderSetVersion(&Builder, L_AAMVA_VERSION_2016);如果(nRet != SUCCESS)返回nRet;nRet = L_BarCodeAAMVAIDBuilderSetNumberOfEntries(&Builder, 1);如果(nRet != SUCCESS)返回nRet;nRet = L_BarCodeAAMVAIDBuilderSetSubfileType(&Builder, 0, L_AAMVA_SUBFILE_TYPE_DL, NULL);如果(nRet != SUCCESS)返回nRet;//添加每个AAMVA cd所需的所有数据元素//可以对枚举D20类型的数据元素值使用L_BarCodeAAMVAIDLookup*函数//宏声明一个日期字符串变量,并用日期填充它//日期值等于今天的数据向前或向后偏移数年# DeclareDate(szVar, nYearOffset) \字符szVar [9];\strcpy_s(szVar, 9, GetCurrentDate(nYearOffset))//下面的例子使用日期值为17岁的人DeclareDate (szNow 0);//今天的日期DeclareDate (szExpiry 6);// 6年后到期DeclareDate (szBirthday, -17);// 17年前出生DeclareDate (szBirthPlus21 4);//再过4年就21岁了DeclareDate (szBirthPlus19 2);//再过两年我就19岁了DeclareDate (szBirthPlus18, 1);//再过一年就满18岁了常量字符* driversLicenseData[][2] = {“地区指定基金”“N”},//名字截断(N =未截断)“DDE”“N”},//姓氏截断(N =未截断)“常规心电图”“美国”},//国家识别“贴现”“没有”},//文档标识符“数据收集”“1234567890”},// ID“驿站”“123456”},//邮政编码“DAJ”“啪”},//地址管辖代码“戴”“任何城市”},//地址“DAG”“大街123号”},//地址“道”“072年”},//高度(英寸或厘米)“天”“兄弟”},//眼睛颜色“DBC”“1”},//性别(男= 1,女= 2,9 =未指定)“数据备份系统”szBirthday},//出生日期“DBD”szNow},//文档发布日期“爸爸”“没有”},//中间名“DAC”“约翰。”},//名字“DCS”“母鹿”},//姓氏“DBA”szExpiry},//截止日期“民国”“M”},//司法管辖区特定背书代码“DCB”“没有”},//司法管辖区限制代码“DCA”“C”},//管辖车辆类别“最大”szBirthPlus21},//未满21岁“DDI”szBirthPlus19},//未满19岁“DDH”szBirthPlus18},//未满18岁“戴兹”“兄弟”//头发颜色};intelementCount =运算符driversLicenseData /运算符driversLicenseData [0];intI = 0;i < elementCount;+ + i)L_UINT valueLen = (L_UINT)strlen(driversLicenseData[i][1]);nRet = L_BarCodeAAMVAIDBuilderAddDataElementToSubfile(&Builder, 0, driverlicensedata [i][0], driverlicensedata [i][1], valueLen);如果(nRet != SUCCESS)返回nRet;nRet = L_BarCodeAAMVAIDBuilderBuild(&Builder);如果(nRet != SUCCESS)返回nRet;//有效的AAMVAID现在在pBuilder->OutputIDnRet = L_BarCodeWriteAAMVAData(生成器。OutputID, pData, pDataLength);L_BarCodeFreeAAMVAID (Builder.OutputID);返回nRet;

添加一个名为GetDatePlusYears它返回具有指定偏移年数的当前日期。返回日期的任何函数名称Format可以代替它。

# include < time.h >L_CHAR * GetDatePlusYears (intnYears)静态字符currentDate [9];time_t t = time(NULL);结构体Tm local_t = {0};localtime_s (&local_t科技);wsprintfA (currentDate2.2 2.2 4.4“% d % d % d”, local_t。tm_year + 1900 + nYears, local_t。Tm_mon + 1, local_t.tm_mday);返回currentDate;

添加AAMVA PDF417写条码代码

添加一个新的WritePdf417Barcode函数,在成功构建AAMVA数据后将条形码写入图像,并向其添加以下代码:

L_INT WritePdf417Barcode(HWND HWND, pBITMAPHANDLE pBarcodeBmp, L_CHAR* pData, L_INT nDataLen)L_INT nRet = L_BarCodeInit(BARCODES_PDF_WRITE);如果(nRet != SUCCESS)返回nRet;BARCODEDATA = {0};BARCODECOLOR BarColor = {0};BARCODEWRITEPDF BarCodePDF = {0};BarColor。uStructSize =运算符BARCODECOLOR;BarColor。dwColorBar = RGB(0,0,0);BarColor。dwColorSpace = RGB(255, 255, 255);BarCodeData。uStructSize =运算符BarCodeData;BarCodeData.rcBarLocation.left = 50;BarCodeData.rcBarLocation.top = 50;BarCodeData.rcBarLocation.right = 650;BarCodeData.rcBarLocation.bottom = 400;BarCodeData。nUnits = BARCODE_SCANLINES_PER_PIXELS;BarCodeData。ulType = BARCODE_PDF417;BarCodeData。pszBarCodeData = pData;BarCodeData。nSizeofBarCodeData = nDataLen;BarCodePDF。uStructSize =运算符BarCodePDF;BarCodePDF。wModule = 15;BarCodePDF。wModAspectRatio = 3;BarCodePDF。wEccLevel = BARCODE_PDF417_ECCLEVEL_5;BarCodePDF。wAspectWidth = 4;//写入条码nRet = L_BarCodeWrite(pBarcodeBmp, &BarCodeData, &BarColor, BARCODE_USECOLORS, NULL, &BarCodePDF, NULL, NULL, NULL, NULL, NULL, NULL);如果(SUCCESS != nRet)对话框(hwnd,文本("无法写入PDF417条码"),文本(“条形码演示”), MB_ICONERROR);L_BarCodeExit ();返回nRet;

运行项目

按下运行项目F5,或选择Debug ->开始调试

如果正确地执行了这些步骤,应用程序将运行并允许用户进行选择条形码->写AAMVA条形码来创建一个空的位图,并将AAMVA数据写入其中。

生成的图像如下所示:

PDF417条码数据写入图像

总结

方法的使用AAMVAIDBUILDER结构和相关的构建器和条形码编写器功能。

另请参阅

iOS
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2023领德科技有限公司版权所有。