張江鵬 楊文 張利軍 盧玉
摘 要: 二維碼技術(shù)應(yīng)用廣泛,但是針對(duì)大批量、標(biāo)簽式的二維碼應(yīng)用場(chǎng)景,仍缺乏簡(jiǎn)單易用、方便快捷的設(shè)計(jì)與生成系統(tǒng)。文章分析了常用二維碼標(biāo)簽生成系統(tǒng)的不足,設(shè)計(jì)并實(shí)現(xiàn)了一套QR Code二維碼標(biāo)簽批量生成系統(tǒng)。該系統(tǒng)采用VBA實(shí)現(xiàn)標(biāo)簽批量生成功能、采用動(dòng)態(tài)鏈接庫(kù)作為二維碼生成的編程接口。實(shí)驗(yàn)驗(yàn)證結(jié)果表明,該系統(tǒng)能夠滿足生產(chǎn)、經(jīng)營(yíng)、管理活動(dòng)中對(duì)大批量、標(biāo)簽式二維碼的需求,并具有靈活、便捷、高效等優(yōu)點(diǎn)。
關(guān)鍵詞: 二維碼; 動(dòng)態(tài)鏈接庫(kù); QR Code; VBA
中圖分類(lèi)號(hào):TP311? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ?文章編號(hào):1006-8228(2022)03-65-05
Abstract: Two-dimensional code technology is widely used, but there is still a lack of easy-to-use, convenient and fast design and generation systems for large-volume, label-type two-dimensional code application scenarios. This paper analyzes the shortcomings of commonly used QR Code label generation systems, and designs and implements a QR Code label batch generation system. The system uses VBA to realize the function of label batch generation, and uses dynamic link library as the programming interface for QR Code generation. Experimental verification results show that the system can meet the demand for large-volume, label-based QR Codes in production, operation, and management activities, and has the advantages of flexibility, convenience, and efficiency.
Key words: two-dimensional code; dynamic link library; QR Code; VBA
0 引言
在當(dāng)今移動(dòng)互聯(lián)網(wǎng)時(shí)代,二維碼技術(shù)在各類(lèi)生產(chǎn)經(jīng)營(yíng)、日常生活中得到了空前廣泛的應(yīng)用,智能手機(jī)的掃一掃功能使得二維碼應(yīng)用更加普遍[1-2]。二維碼具有信息量大、可靠性高、使用成本低廉等優(yōu)點(diǎn)[3-4]。QR Code是目前應(yīng)用最為廣泛的二維碼類(lèi)型之一[5]。
當(dāng)前,二維碼主要有兩大類(lèi)應(yīng)用場(chǎng)景。
第一類(lèi)是在日常生活中作為特定信息標(biāo)識(shí)、供個(gè)人使用的各類(lèi)單個(gè)式二維碼應(yīng)用場(chǎng)景。在該類(lèi)場(chǎng)景中,二維碼一般由特定的應(yīng)用軟件進(jìn)行生成、識(shí)別、解析,同時(shí)由于是單個(gè)式二維碼,一些在線式的二維碼生成系統(tǒng)也能簡(jiǎn)便、快捷地滿足個(gè)人使用需求。例如,微信、支付寶的收款碼、付款碼均可分別由微信、支付寶APP進(jìn)行生成、識(shí)別。
第二類(lèi)是在生產(chǎn)、經(jīng)營(yíng)、管理等活動(dòng)中作為設(shè)備、物資標(biāo)簽的大批量、標(biāo)簽式二維碼應(yīng)用場(chǎng)景[6,7]。在該類(lèi)場(chǎng)景中,標(biāo)簽具有樣式設(shè)計(jì)的需求,二維碼一般只是作為標(biāo)簽中的一項(xiàng)組成元素;同時(shí)還具有大批量生成的需求,一般需要針對(duì)具有相同數(shù)據(jù)格式的不同數(shù)據(jù)內(nèi)容,生成大批量的標(biāo)簽。
針對(duì)第二類(lèi)應(yīng)用場(chǎng)景,本文通過(guò)分析當(dāng)前常用二維碼標(biāo)簽生成系統(tǒng)現(xiàn)狀,發(fā)現(xiàn)目前仍缺乏簡(jiǎn)單易用、方便快捷、適用性強(qiáng)的二維碼標(biāo)簽設(shè)計(jì)與生成系統(tǒng)。
為此,本文采用Excel作為標(biāo)簽樣式設(shè)計(jì)器、采用VBA(Visual Basic for Applications)實(shí)現(xiàn)批量生成功能,設(shè)計(jì)并實(shí)現(xiàn)了一套二維碼標(biāo)簽生成系統(tǒng)。通過(guò)測(cè)試驗(yàn)證,該系統(tǒng)能夠滿足大批量、樣式靈活的二維碼標(biāo)簽設(shè)計(jì)與生成需求。
1 二維碼標(biāo)簽生成系統(tǒng)現(xiàn)狀
當(dāng)前常見(jiàn)的二維碼標(biāo)簽生成系統(tǒng)主要分為在線式和離線式兩大類(lèi)。
在線式二維碼標(biāo)簽生成系統(tǒng),以Web網(wǎng)頁(yè)形式提供二維碼標(biāo)簽生成服務(wù),其主要優(yōu)點(diǎn)在于可以直接使用瀏覽器進(jìn)行操作,無(wú)需安裝額外的平臺(tái)或工具,使用簡(jiǎn)便。一些網(wǎng)絡(luò)應(yīng)用軟件也具有生成二維碼的功能(例如在微信中生成收款碼),但它們是針對(duì)特定信息內(nèi)容生成特定樣式的二維碼,并不能作為一般的二維碼標(biāo)簽生成系統(tǒng)。
常見(jiàn)的離線式二維碼標(biāo)簽生成系統(tǒng)有兩種形式:一種是獨(dú)立的應(yīng)用軟件形式(如exe、apk程序),另一種是Office應(yīng)用軟件的加載項(xiàng)形式(如OCX控件等)。這兩種形式一般均需進(jìn)行安裝部署。
以上兩類(lèi)二維碼標(biāo)簽生成系統(tǒng),根據(jù)具體系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的不同,在功能靈活性、使用便捷性等方面均有差異,但針對(duì)前述的第二類(lèi)二維碼應(yīng)用場(chǎng)景(大批量、標(biāo)簽式),總體上均存在以下幾項(xiàng)缺點(diǎn):
⑴ 功能靈活性不足。一些二維碼標(biāo)簽生成系統(tǒng)對(duì)個(gè)別二維碼參數(shù)進(jìn)行了缺省設(shè)置,使得功能靈活性受到限制。
⑵ 批量生成功能不足。大部分二維碼標(biāo)簽生成系統(tǒng)沒(méi)有批量生成功能;個(gè)別雖然具有批量生成功能,但數(shù)據(jù)接口不靈活,或是存在其他問(wèn)題。如當(dāng)前常用的草料網(wǎng)二維碼生成器,雖然可以批量生成二維碼,但其內(nèi)容只是該網(wǎng)站的一個(gè)網(wǎng)址,需要該網(wǎng)站在線支持才能解析出原始數(shù)據(jù)內(nèi)容。
⑶ 二維碼標(biāo)簽樣式單一。二維碼只是二維碼標(biāo)簽的一個(gè)組成元素,對(duì)于二維碼標(biāo)簽的設(shè)計(jì),重點(diǎn)在于標(biāo)簽樣式設(shè)計(jì)而不是二維碼的生成。一般的二維碼標(biāo)簽生成系統(tǒng)最多只是內(nèi)置幾類(lèi)基本的標(biāo)簽樣式模板,很難滿足靈活多樣的二維碼標(biāo)簽設(shè)計(jì)需求。如Microsoft條形碼控件MSBCODE9.OCX,只提供了在二維碼下方顯示編碼文本信息這種簡(jiǎn)單樣式。
各類(lèi)二維碼生成系統(tǒng)功能對(duì)比詳見(jiàn)表1。
2 設(shè)計(jì)思路與實(shí)現(xiàn)
2.1 設(shè)計(jì)目標(biāo)
針對(duì)常見(jiàn)二維碼標(biāo)簽生成系統(tǒng)存在的上述不足,本文以目前應(yīng)用最廣泛的QR Code二維碼為例,設(shè)計(jì)一套二維碼標(biāo)簽生成系統(tǒng),以滿足用戶對(duì)標(biāo)簽式二維碼的設(shè)計(jì)與批量生成需求。
具體目標(biāo)要求如下:
⑴ 輕量級(jí),安裝部署便捷;
⑵ 對(duì)QR二維碼的糾錯(cuò)等級(jí)、符號(hào)版本、掩膜方案、模塊樣式等參數(shù)均可靈活地自定義設(shè)置;
⑶ 具有比較靈活多樣的標(biāo)簽樣式設(shè)計(jì)功能;
⑷ 具有批量生成功能,批量生成功能的數(shù)據(jù)接口需簡(jiǎn)單易用。
2.2 設(shè)計(jì)思路
針對(duì)上述要求,計(jì)劃采用如下設(shè)計(jì)思路。
⑴ 基于VBA,以Microsoft Office Excel作為二維碼標(biāo)簽設(shè)計(jì)與生成環(huán)境。
Excel是一種廣泛使用的辦公軟件;VBA是一種宏語(yǔ)言,內(nèi)嵌于Office中,提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法[8],為用戶提供了Office二次開(kāi)發(fā)功能,大大提高了工作效率[9]。
使用Excel+VBA作為二維碼標(biāo)簽設(shè)計(jì)與生成環(huán)境,有以下優(yōu)點(diǎn)。
① 既能滿足輕量級(jí)、安裝部署便捷的目標(biāo)要求,又能滿足常見(jiàn)標(biāo)簽樣式的設(shè)計(jì)需求。
② 數(shù)據(jù)接口便捷高效。由于Excel本身就是日常廣泛使用的數(shù)據(jù)處理工具,所以不需要設(shè)計(jì)另外的數(shù)據(jù)接口。
③ 批量生成功能容易實(shí)現(xiàn)。可以使用VBA方便快捷地對(duì)Excel進(jìn)行操作,通過(guò)簡(jiǎn)單的代碼就能實(shí)現(xiàn)批量生成功能。
⑵ 生成的二維碼符號(hào)數(shù)據(jù)采用數(shù)組形式,而不是直接采用圖片形式。采用數(shù)組形式便于在Excel中利用VBA進(jìn)行編程操作,使二維碼標(biāo)簽樣式設(shè)計(jì)功能更加靈活。
⑶ 生成二維碼符號(hào)的編程接口采用動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn),避免直接采用VBA編程在編碼簡(jiǎn)易性和運(yùn)行速度方面的劣勢(shì),同時(shí)能直接參考一些開(kāi)源二維碼生成程序的源代碼。
2.3 系統(tǒng)實(shí)現(xiàn)
按照以上思路,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)二維碼標(biāo)簽生成系統(tǒng)進(jìn)行示例演示,其功能結(jié)構(gòu)如圖1所示。
系統(tǒng)設(shè)計(jì)簡(jiǎn)要說(shuō)明:
⑴ 以Excel作為標(biāo)簽樣式設(shè)計(jì)器以及數(shù)據(jù)接口,進(jìn)行標(biāo)簽樣式設(shè)計(jì)和標(biāo)簽數(shù)據(jù)內(nèi)容的傳遞。
⑵ 通過(guò)采用VBA設(shè)計(jì)的用戶窗體與用戶進(jìn)行功能交互,進(jìn)行標(biāo)簽參數(shù)設(shè)置、調(diào)用批量生成功能。
⑶ 根據(jù)QR Code二維碼編碼與符號(hào)生成規(guī)則(參照GB/T 18284—2000《快速響應(yīng)矩陣碼》),本文使用C++語(yǔ)言編寫(xiě)了用于生成二維碼符號(hào)的動(dòng)態(tài)鏈接庫(kù)QRCben.dll。該動(dòng)態(tài)鏈接庫(kù)輸出的二維碼數(shù)據(jù)為數(shù)組形式,數(shù)組元素為字節(jié)類(lèi)型,每個(gè)元素對(duì)應(yīng)于二維碼的一個(gè)模塊,具體包含了模塊類(lèi)型(深模塊、淺模塊)和模塊所處區(qū)域(尋像圖形、分隔符、定位圖形、校正圖形、格式信息區(qū)、版本信息區(qū)、碼字區(qū))等信息。
⑷ VBA程序通過(guò)調(diào)用生成二維碼符號(hào)的動(dòng)態(tài)鏈接庫(kù)(QRCben.dll),獲得數(shù)組形式的二維碼符號(hào)數(shù)據(jù);根據(jù)獲得的二維碼符號(hào)各個(gè)模塊的類(lèi)型與所處區(qū)域信息,自定義不同區(qū)域模塊的圖案、生成二維碼符號(hào)圖形,并添加到Excel設(shè)計(jì)的標(biāo)簽樣式的相應(yīng)位置處。
3 使用流程與功能驗(yàn)證
下面以某單位裝備運(yùn)維系統(tǒng)中所需的裝備管理標(biāo)簽為例,簡(jiǎn)要說(shuō)明本文設(shè)計(jì)并實(shí)現(xiàn)的二維碼標(biāo)簽生成系統(tǒng)的使用流程,并對(duì)使用效果進(jìn)行驗(yàn)證。
3.1 設(shè)計(jì)二維碼標(biāo)簽樣式
在該二維碼標(biāo)簽生成系統(tǒng)的Excel文件中利用工作表進(jìn)行標(biāo)簽的樣式設(shè)計(jì)。主要涉及單元格文字與樣式、背景色填充、邊框設(shè)置、圖片插入等功能。圖2是設(shè)計(jì)完成的標(biāo)簽樣式示例。
在該示例中,對(duì)于標(biāo)簽中的可變字段,采用大括號(hào)“{ }”進(jìn)行標(biāo)識(shí)。在后續(xù)的標(biāo)簽生成中,VBA程序?qū)⒆詣?dòng)把可變字段替換為相應(yīng)的每個(gè)標(biāo)簽的具體內(nèi)容,從而進(jìn)行標(biāo)簽的自動(dòng)批量生成。
3.2 導(dǎo)入數(shù)據(jù)內(nèi)容
由于Excel本身就是日常辦公中最常用的數(shù)據(jù)處理工具,因而這里假設(shè)數(shù)據(jù)內(nèi)容已經(jīng)導(dǎo)入到了該系統(tǒng)的Excel文件的工作表中,然后只需按照格式要求對(duì)數(shù)據(jù)內(nèi)容進(jìn)行簡(jiǎn)單調(diào)整即可。圖3是調(diào)整后的數(shù)據(jù)內(nèi)容示例。
圖3中,粗線框中的“裝備名稱(chēng)”、“所屬單位”等欄與標(biāo)簽樣式中采用大括號(hào)“{ }”標(biāo)識(shí)的可變字段相對(duì)應(yīng),在具體生成每個(gè)標(biāo)簽時(shí),會(huì)自動(dòng)將對(duì)應(yīng)欄的數(shù)據(jù)內(nèi)容替換到標(biāo)簽中的相應(yīng)字段處。
3.3 設(shè)置參數(shù)
使用VBA生成的用戶窗體作為用戶與系統(tǒng)進(jìn)行功能交互的界面,進(jìn)行參數(shù)設(shè)置,圖4為設(shè)計(jì)的功能交互界面示例。
功能交互界面中,參數(shù)設(shè)置包括源數(shù)據(jù)、二維碼、標(biāo)簽以及輸出共四塊參數(shù)區(qū)域。
源數(shù)據(jù)參數(shù)區(qū)域中可以設(shè)置源數(shù)據(jù)段數(shù)、連接符以及標(biāo)簽數(shù)量。圖4中的參數(shù)設(shè)置表示:將數(shù)據(jù)內(nèi)容中的前四個(gè)源數(shù)據(jù)段用換行符連接,作為二維碼的源數(shù)據(jù),分別生成100個(gè)標(biāo)簽。
二維碼參數(shù)區(qū)域中可以設(shè)置二維碼的糾錯(cuò)等級(jí)、掩膜方案、符號(hào)版本以及模塊圖案。
標(biāo)簽參數(shù)區(qū)域用于設(shè)置工作表中標(biāo)簽的區(qū)域范圍以及標(biāo)簽中二維碼的區(qū)域范圍。
輸出參數(shù)區(qū)域用于設(shè)置生成標(biāo)簽的圖片格式、大小等。
3.4 批量生成及功能驗(yàn)證
按照上述流程完成標(biāo)簽設(shè)計(jì)、數(shù)據(jù)導(dǎo)入以及參數(shù)設(shè)置后,就可以批量生成二維碼標(biāo)簽了。具體測(cè)試驗(yàn)證方法見(jiàn)表2。
首先點(diǎn)擊用戶窗體中的“逐個(gè)生成”按鈕,生成第一個(gè)標(biāo)簽,檢查是否存在錯(cuò)誤。圖5為生成的第一個(gè)標(biāo)簽。
經(jīng)檢查,生成的第一個(gè)標(biāo)簽信息內(nèi)容正確,二維碼能正確識(shí)別。
接下來(lái)點(diǎn)擊用戶窗體中的“批量生成”按鈕,生成全部的100個(gè)標(biāo)簽。經(jīng)測(cè)試,程序運(yùn)行總用時(shí)約36s,即平均生成一個(gè)標(biāo)簽用時(shí)約為0.36s。對(duì)生成的二維碼標(biāo)簽圖片進(jìn)行檢查、識(shí)別,100個(gè)標(biāo)簽均信息正確、二維碼識(shí)別內(nèi)容無(wú)誤,如圖6所示。
4 結(jié)束語(yǔ)
以上使用流程、操作方法示例及功能驗(yàn)證結(jié)果表明,本文采用設(shè)計(jì)并實(shí)現(xiàn)的二維碼標(biāo)簽生成系統(tǒng),能滿足前述第二類(lèi)二維碼應(yīng)用場(chǎng)景即生產(chǎn)、經(jīng)營(yíng)、管理活動(dòng)中大批量、標(biāo)簽式二維碼設(shè)計(jì)與生成的需求,并具有以下優(yōu)點(diǎn):
⑴ 使用Excel作為設(shè)計(jì)與生成環(huán)境,不需要另外安裝部署,方便快捷;
⑵ 使用Excel作為標(biāo)簽樣式設(shè)計(jì)器,基本無(wú)使用操作門(mén)檻,設(shè)計(jì)功能靈活多樣,能夠滿足常用的標(biāo)簽樣式設(shè)計(jì)需求;
⑶ 使用Excel作為數(shù)據(jù)接口,數(shù)據(jù)導(dǎo)入簡(jiǎn)單便捷;
⑷ 用戶自定義設(shè)置功能靈活,可以對(duì)二維碼的糾錯(cuò)等級(jí)、掩膜方案、符號(hào)版本以及模塊圖案等進(jìn)行自定義設(shè)置;
⑸ 批量生成功能強(qiáng)大,可以靈活設(shè)置可變字段;
⑹ 標(biāo)簽生成速度快,平均生成一個(gè)標(biāo)簽用時(shí)約為0.36s。
參考文獻(xiàn)(References):
[1] 程裕強(qiáng),劉愛(ài)民,等.二維碼生成算法研究[J].玉林師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2014,35(5):118
[2] 宋濤.基于二維碼標(biāo)簽技術(shù)的燃?xì)夤芾砦锫?lián)網(wǎng)系統(tǒng)[J].上海煤氣,2020(5):29
[3] 劉寧鐘,楊靜宇.二維條碼的編碼理論和設(shè)計(jì)[J].計(jì)算機(jī)學(xué)報(bào),2007,30(4):686
[4] Villan R, Voloshynovskiy S, Koval O, Pun T .Multilevel 2d barcodes: towards high capacity storage modules for multimedia security and management[J]. IEEE Trans on Information Forensics and Security,2006,1(4):405
[5] 劉寧鐘,蘇軍,等.工業(yè)控制環(huán)境中QR Code的檢測(cè)和識(shí)別算法[J].電子學(xué)報(bào),2011(10):2459
[6] 蘆建文,郭闖,等.鋼材成品二維碼標(biāo)簽系統(tǒng)設(shè)計(jì)[J].包鋼科技,2020,46(3):68
[7] 張?chǎng)?基于物聯(lián)網(wǎng)應(yīng)用的二維碼標(biāo)簽智能化管理系統(tǒng)[D].山東大學(xué)信息科學(xué)與工程學(xué)院碩士學(xué)位論文,2018
[8] 伍云輝.精通Excel VBA[M].北京:電子工業(yè)出版社,2013
[9] 陳海生,彭峰.Excel VBA在醫(yī)院基本藥物數(shù)據(jù)統(tǒng)計(jì)中的應(yīng)用[J].中國(guó)現(xiàn)代應(yīng)用藥學(xué),2015,32(12):1494
3549501908255