【GeneXus】QRコード作成(C#)

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

以上!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください