GeneXusだとQRコードが標準でサポートされてないので
ネイティブで実装する方法を備忘録として。
環境
・GeneXus17
・C#
・.NetFramework4
ライブラリ作成
まずはC#のライブラリを作成
作り方は数年前の私が書いてるので適当に参考にして
今回はC#なのでこちらのライブラリを使用。Visual StudioのNuGetで適当に取得。
オプション等渡せる値は多いけど、
今回はQRコードにするURLと、QRコードを保存する絶対パスを引数として指定できるようにします。
QRCode.cs
using System;
namespace GxQRCode
{ public class QRCode { public static void Create(String URL, String Path) { var writer = new ZXing.BarcodeWriter { Format = ZXing.BarcodeFormat.QR_CODE, Options = new ZXing.QrCode.QrCodeEncodingOptions { Height = 200, Width = 200, Margin = 1 } }; var bitmap = writer.Write(URL); bitmap.Save(Path); } }
}
今回は以下のように設定
namespace(DLL名):GxQRCode
class(GX側のオブジェクト名):QRCode
method名(GX側の呼び出す際のメソッド名):Create
GeneXus側
KBを適当に作成して、「External Object」を作成。
これもこちらの記事を参考に設定。(プロパティ値を設定するのがメンドイ)
Visual Studioで作成したDLLと、ZXingのDLLをKB側にコピーしたら
ビルドをしてエラーが無ければ問題なし。
適当な画面を作成して、ボタン押下でQRコードを作成するようにコーディング。
Event
Event 'QRCreate' // ファイル名に付与するタイムスタンプ文字列を作成 &DateTime = Now() &DateStr = PadL(&DateTime.Year().ToString().Trim(), 4, !"0") + PadL(&DateTime.Month().ToString().Trim(), 2, !"0") + PadL(&DateTime.Day().ToString().Trim(), 2, !"0") + !"_" + PadL(&DateTime.Hour().ToString().Trim(), 2, !"0") + PadL(&DateTime.Minute().ToString().Trim(), 2, !"0") + PadL(&DateTime.Second().ToString().Trim(), 2, !"0") + !"_" + PadL(&DateTime.Millisecond().ToString().Trim(), 3, !"0") // 絶対パスを作成 &Directory.Source = !"C:\Models\GX17U2_QRTEST_20241112\CSharpModel\web\qrcode" // ファイル名とURIを作成 &URI = &Directory.GetAbsoluteName() + &File.Separator + !"qrcode_" + &DateStr + !".png" // QRコードを作成 QRCode.Create(&QRString, &URI) // 画像を表示 &Blob.FromString(&URI) &URL = PathToUrl(&Blob) &Image.FromURL(&URL)
Endevent
所定の場所にQRコードが作成されました。
パス作成部分がハードコーディングなのはご愛嬌で・・・w
作成ボタンを押下したら、画面上に表示してみます。

同じ要領でボタン押下したら、PDFに画像を表示します。

(まぁ画面もPDFも同じっちゃ同じ)
まとめ
ということで今回はQRコードの画像を作成してみました。
生成系AIとか当たり前にある世の中ですが
さすがにQRコード1個にAI使いたいかと言われると・・・微妙かなとw
以上!