QRCode近幾年來已日益普及,智慧型手機的流行帶動了這種編碼的使用率。相信程式開發上,多多少少也會遇到產生QRCode需求的情況,筆者也是因為工作的關係,才接觸到這塊,上網搜尋了不少的解決方案,有些需要外掛ActiveX來協助處理,或者要另外購買軟體的,我就都先略過了,在Excel上,有一套由Excel繪圖物件方式產生QR-Code的程式可用,網址如下:
barcode-vba-macro-only
但由於該程式僅適用於Excel上,因此這個項目,就僅供參考,未來有機會再來看看是否能移植到Access上面。
今天要介紹的,是透過Google Charts API來達成,我們可以參考以下網站:
Google Charts Infographics - QR Codes
目前網頁上寫說「Warning: This API is deprecated. Please use the actively maintained Google Charts API instead. See our deprecation policy for details.」,這部份Google似乎已不再維護,但尚未讓此服務中斷,目前使用還算正常,但未來就不是那麼確定。
以下程式碼,請建立一組新的模組存放:
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Function DownloadFile(url As String, LocalFileName As String) As Boolean
If URLDownloadToFile(0, url, LocalFileName, 0, 0) = 0 Then
DownloadFile = True
End If
End Function
Sub DownloadQRcode(url As String, pngName As String, size As Integer)
' Pixel Size S, M, L: 160, 260, 360
url = URLEncodeUTF8(url)
DownloadFile "http://chart.apis.google.com/chart?cht=qr&chs=" & size & "x" & size & "&chl=" & url, pngName
End Sub
傳遞網址的部份,有加上上一篇提到的URLEncodeUTF8子程式來轉換字串,透過這層轉換,產生的QR-Code才會正確。
以下為測試用的程式碼,請放模組中進行測試:
Sub DownloadQRcode測試()
Dim strQRCodeMsg As String
Dim strSavePathFile As String
'QR-Code訊息
strQRCodeMsg = "這是Google Charts API QR-Code產生測試"
'存檔路徑
strSavePathFile = "d:\temp\QR_Google.png"
'下載生成的QRCode影像檔
DownloadQRcode strQRCodeMsg, strSavePathFile, 300
'開啟檔案
RunCMD2 strSavePathFile, True, False, 0
End Sub
執行後,會產生此檔案,並開啟此檔案,有此需求的,可以透過這個子程式,產生PNG檔案後,將路徑紀錄到資料庫中,待產生報表時,將路徑寫到圖形物件上,即可使用,亦可將檔案附加到資料庫中,以OLE物件儲存,但筆者不是那麼建議,存取效率可能不會太高。
以上的介紹,希望對各位有幫助。