Notes でQR コードを作成する
HCL Nomad Mobile / Webでは、デバイスのカメラを利用して、バーコードまたは QR コードをスキャンすることが可能です。
この機能を利用して、来場者受付システムや、在庫管理システムなどをNotes/Domino で構築してみても面白いでしょう。
ただ、現状、Notes/Domino の標準機能では、QR コードを作成する機能がなく、今ひとつ活用できていないのではないでしょうか?
そこで今回は、この機能をより活用する為に、Notes で QR コードを作成することに挑戦してみようと思います。
Java の「ZXing」を利用する
Notes/Domino は標準で Java を利用することが可能な為、今回は「ZXing」(ゼブラクロッシング)という、Google が開発/公開しているオープンソースの Java ライブラリを利用してみます。
Java のライブラリを利用するからと言って、処理のすべてを Java で構築する必要はありません。Notes/Domino には LS2J という LotusScript から Java を呼び出す機能があります。その為、実行元のエージェントは LotusScript で構築し、QR コードの生成箇所のみ Java を利用することが可能です。
jar ファイルを手に入れる
まずは、必要な以下の jar ファイルをダウンロードします。
・ZXing Core
https://mvnrepository.com/artifact/com.google.zxing/core/3.5.3
・ZXing Java SE Extensions
https://mvnrepository.com/artifact/com.google.zxing/javase/3.5.3
※ 今回は 2024/11/01 時点の最新バージョン「3.5.3」を利用しています。
※ 各リンク先の Files 欄の「jar」をクリックするとダウンロードできます。
Javaのスクリプトライブラリを作成する
Notes アプリケーションに、新規のスクリプトライブラリを作成します。
今回は、以下の内容で作成します。
・名称 :lbZXing
・タイプ:Java
【クラス名の変更】
初期状態では、Java のクラス名が「Untitled.java」となっている為、以下の手順で変更します。
1:「Untitled.java」を右クリック
2:「リファクタリング」>「名前の変更」 をクリック
3:「新しい名前」で名前を設定(今回は「JavaZXing」とします)
4:「終了」ボタンをクリック
【jar ファイルのインポート】
続いて、ダウンロードした jar ファイルをインポートします。
1:「インポート」>「アーカイブ」をクリック
2:「ソース・ディレクトリー」に jar ファイルのあるフォルダを選択
3:リスト右側の jar ファイルの一覧から、「core-3.5.3.jar」、
「javase-3.5.3.jar」にチェックを入れ、「終了」ボタンをクリック
jar ファイルのインポートが完了すると、以下のように「アーカイブ」の配下に、選択された jar ファイルが設定されています。
【Java のプログラム】
今回は、「createQrCode」という関数を作成します。
この関数は、指定の文字列のQRコードを作成し、指定のパスに保存します。
引数は以下の通りです。
引数1:QR コードに変換する文字列
引数2:QR コードのサイズの数値(ピクセル)
引数3:QR コードの保存先のファイルパス(ファイル名含む)
プログラムのコーディングは、先程名前を変更した「JavaZXing.java」をダブルクリックすると編集画面に遷移します。
既存のコードを削除し、以下のコードを貼り付けてください。
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import javax.imageio.ImageIO;
public class JavaZXing {
public static void createQrCode(String text, int size, String filePath) throws IOException, WriterException {
String encoding = "UTF-8";
String margin = "0";
ConcurrentHashMap hints = new ConcurrentHashMap();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
hints.put(EncodeHintType.CHARACTER_SET, encoding);
hints.put(EncodeHintType.MARGIN, margin);
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, size, size, hints);
BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
ImageIO.write(image, "png", new File(filePath));
}
}
【ざっくり解説】
「import xxxxxxx」は、今回利用するクラスを読み込んでいます。
「createQrCode」関数は、まず QR コードのプロパティを設定、QR コードの画像情報を生成し、指定のパスに画像ファイルとして保存します。
※ 今回は、PNG 形式で QR コードを出力するように指定しています。
以上で Java のスクリプトライブラリの準備は、完了です。
実行エージェントの作成
QR コードの作成を実行するエージェントを作成します。
こちらは、以下の内容で作成します。
・名称 :QR コード作成(任意)
・タイプ:LotusScript
今回は、LS2J という、LotusScript からJava を利用する仕組みを利用します。LS2J の説明や使い方は、こちらの記事をご確認ください。
※ 今回は、細かな説明は割愛させていただきます。
【(Options) の設定】
作成した Java のスクリプトライブラリ「lbZXing」 を利用する為、(Options) に以下のように設定します。
Option Public
Option Declare
UseLSX "*javacon"
Use "lbZXing"
【Initialize の設定】
「lbZXing」内の「JavaZXing」クラスのオブジェクトを生成し、「createQrCode」関数を実行しています。
※ ファイル保存先フォルダは、事前に作成してください。
対象フォルダが存在しない場合、エラーとなります。
Sub Initialize
Dim js As New JavaSession
Dim jc As JavaClass
Dim jo As JavaObject
Dim qrText As String 'QR文字列
Dim size As Integer 'サイズ(ピクセル)
Dim filePath As String '保存ファイルパス
qrText = "https://note.com/dominolab/"
size = 200
filePath = "c:\Temp\qr_code.png"
Set jc = js.GetClass("JavaZXing")
Set jo = jc.CreateObject
Call jo.createQrCode(qrText, size, filePath)
End Sub
エージェントを保存し実行すると、指定のパスに、QR コードのPNG ファイルが生成されます。
最後に
最新の Notes/Domino V14 では、Java 17 へ Java ランタイムとコンパイラの大幅なアップグレード、また V14.5 では、Java 21 の採用が予定されているなど、Notes/Domino の Java 環境は近年改善されています。
近い将来、式や LotusScript に加え、Java も当たり前に活用され、Notes アプリケーションがよりパワフルに進化していくのではないでしょうか。