2023/08/16

ノーツで QR コード:#14)ライブラリの組み込みと QR コードの表示

Excel VBA で作成された QR コード生成ライブラリをノーツに移植する作業、延々と実施してきましたが、いよいよ大詰めです。

今回は移植できたライブラリを使用して、フォームに QR コードを表示します。


フォームの作成

まずは、QR コードをフォームに表示する仕様についてです。今回はライブラリの検証が目的なので、黒のマスを”■”、白のマスをスペースで表示するだけの単純な対応とします。

新規でフォーム ”QR” を作成し、以下のように作成します。

フィールドはテキストフィールドが2つだけです。ポイントは QR コードを表示するフィールド QRcode です。複数値を有効に設定し、区切り文字を”改行”に設定します。

もう一点が、QR コードの表示が崩れないよう、等幅フォントを指定します。今回は、MS ゴシックを選択しました。


エージェントの作成

続いて、QR コードを作成する処理をエージェントで作成します。

新規で、LotusScript のエージェント ”CreateQRcode” を作成し、移植したライブラリを呼び出します。メインルーチンの処理は次の通りです。

  • QR コード化する文字列を入力
  • エンコード文字列に変換(EncodeBarcode)
  • Boolean 型の2次元配列に QR コードを展開(bc_2Dms)
  • フォーム QR を作成し、QR コードを作画(CreateQRcodeDoc)

サンプルコードは次の通りです。

Option Declare
Use "lsQRcode"

Sub Initialize
   Dim sSrc As String
   Dim sEnc As String
   Dim iLv As Integer
   Dim abQR() As Boolean
   Dim asQR() As String

   iLv = 3 '誤り訂正レベル
   sSrc = InputBox("QRコードに変換する文字列を入力してください。", "QRコード作成")
   If MsgBox("『" & sSrc & "』の QR コードを作成しますか?", 36, "") = 6 Then
      sEnc = EncodeBarcode(sSrc, iLv)
      Call bc_2Dms(sEnc, abQR)
      Call CreateQRcodeDoc(sSrc, abQR)
   End If
End Sub


QR コードを作画する関数 CreateQRcodeDoc は、今回新規に作成し、エージェント内に配置しました。

QR コードの1行分を ”■” とスペースに変換しながら1つの文字列にします。それを行数分の配列に変換した後、フィールドにセットし、文書として保存しています。

Sub CreateQRcodeDoc(vsSrc As String, vabQR() As Boolean)
   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim nd As NotesDocument
   Dim x As Integer
   Dim y As Integer
   Dim sTmp As String

   'QR コードを文字列に変換
   ReDim asQR(UBound(vabQR, 2))
   For y = 0 To UBound(vabQR, 2)
      For x = 0 To UBound(vabQR, 1)
         If vabQR(x, y) = True Then
            sTmp = "■"
         Else
            sTmp = " "
         End If
         asQR(y) = asQR(y) & sTmp
      Next
   Next

   '文書に保存
   Set ndb = ns.CurrentDatabase
   Set nd = ndb.CreateDocument()
   nd.Form = "QR"
   nd.StrSrc = vsSrc
   nd.QRcode = asQR
   Call nd.Save(True, False)
End Sub


エージェントを実行して、QR コードに変換したい文字列を入力すると、文書が作成されます。文書を開くと、QR コードが表示されます。

前回 ノーツで QR コード 次回

0 件のコメント:

コメントを投稿