2025/12/04

QR コードの作画:#7)BMP は作成できたけど...

前回でスクリプトライブラリは完成しましたので、正しくビットマップファイルが作成できるか動作検証をしましょう。


フォームの作成

新規でフォームを作成します。名称にこだわりはないのですが、ここでは QR_Pict とします。フィールドは次の 2 個作成します

項目 フィールド名 種類 補足
変換する文字列 StrSrc テキスト 編集可能
QR コード QRcode リッチテキスト 編集可能

入力した文字列を QR コード化にしてリッチテキストに表示することをイメージした単純なフォームとなります。


エージェントの作成

続いてビューで選択した文書に QR コードを添付するエージェントを作成します。とりあえず今回は、QR コードに変換しビットマップファイルとして保存するところまでを作成します。

LotusScript のエージェント CreateQRcode_BMP を新規作成し、プロパティで実行対象を”なし”に設定します。

エージェントのコード全体は次の通りです。

まず、前回までに作成したライブラリ lsDrawQRcode を組み込みます。

選択した文書から変換する文字列を取得して QR コードにエンコードします(①)。ここまでは、連載『ノーツで QR コード』で作成した lsQRCode ライブラリを利用した部分ですね。

今回作成した関数は ② で使用しています。動作検証なので C:\tmp\ フォルダに QR.bmp という名前で固定して出力させています(実行前にはフォルダを用意ください)。

Option Declare
Use "lsDrawQRcode"

Private xns As NotesSession

Sub Initialize
   Dim ndb As NotesDatabase
   Dim ndc As NotesDocumentCollection
   Dim nd As NotesDocument
   Dim sSrcText As String

   Dim sEnc As String             'エンコード文字列
   Dim abQR() As Boolean    'QR コードの論理データ(Boolean 型の 2 次元配列)

   Set xns = New NotesSession
   Set ndb = xns.CurrentDatabase
   Set ndc = ndb.UnprocessedDocuments

   If ndc.Count <> 1 Then
      MsgBox "QR コードを作成する文書を1文書だけ選択してください。", 16, ndb.Title
   Else
      Set nd = ndc.GetNthDocument(1)
      sSrcText = nd.StrSrc(0)    'QRコード化したい文字列

      '① QR コードのエンコード
      sEnc = EncodeBarcode(sSrcText, 3)    '3 = 誤り訂正レベル
      Call bc_2Dms_New(sEnc, abQR)         'QR コードの論理データに変換

      '② ビットマップファイルの作成
      Call DrawQR_BMP(abQR, "c:\tmp\QR.bmp")
   End If
End Sub


ビューの作成

先に作成したフォームの文書を表示するためのビューを作成します。フォーム同様特にこだわりはないので適当に作成します。

ただ、このビューは QR コードを作成を実行する役割があります。[QRコード作成]アクションボタンで作成したエージェントを実行するようにします。


動作検証

テストできる環境が整ったので動作検証を行います。適当な文字列を入力したテストデータを作成し、[QRコード作成]ボタンをクリックします。

正常に動作すると出力フォルダにビットマップファイルが作成されます。


想定外の大どんでん返し...

最難関と考えていた画像生成ができたので、あとは QR コードをフォームに貼り付けるだけです。

リッチテキストフィールドに画像をインライン(見える状態)で貼り付けるには、通常の NotesRichText??? クラスでは実現できません。LotusScript で DXL を使用する必要があります。

他の連載『DXL ことはじめ』『DXL Step-by-Step』でまとめている通り、DXL には心得があります。それを使って実現しようとしたのですが、なんと!DXL は BMP 未対応だったんです !? 

GIF や JPEG などの画像形式に対応しているので、てっきり対応しているものと思っていました...


次回の予定

仕方がないので、次に仕様が簡単そうな GIF 形式を調べてみたのですが、画像圧縮する機能あり、ビットマップよりずいぶん複雑です。現時点では、残念ながら理解に至っていません。

そこで今回は、ビットマップを GIF に変換することで暫定対応としたいと思います。詳しくは次回紹介します。


前回 QR コードの作画


0 件のコメント:

コメントを投稿