QR
Thu Nov 06 2025 08:43:53 GMT+0000 (Coordinated Universal Time)
Saved by @MinaTimo
Public class NW_QRHelper
{
public static container GenerateQRImageCode(container _qrContainer)
{
System.Drawing.Bitmap bm = null;
str base64String;
try
{
var qrCodeEncoder = new Microsoft.Dynamics.ApplicationSuite.QRCode.Encoder();
base64String = NW_QRHelper::EncodeQRContentToBase64(_qrContainer);
bm = qrCodeEncoder.Encode(base64String);
}
catch (Exception::CLRError)
{
error(CLRInterop::getLastException().ToString());
}
using (var stream = new System.IO.MemoryStream())
{
bm.Save(stream, System.Drawing.Imaging.ImageFormat::Bmp);
bm.Dispose();
return Binary::constructFromMemoryStream(stream).getContainer();
}
}
private static str EncodeQRContentToBase64(container _qrContainer)
{
System.Byte[] finalByteArray = new System.Byte[499]();
System.Byte[] byteArray ;
str base64String;
int i,k, byte;
int j = 0, finalArrayLength = 0;
anytype aty;
for (i= 1; i <= conLen(_qrContainer); i++)
{
aty = conPeek(_qrContainer, i);
//info(int2str(i) + " : " + aty);
byteArray = NW_QRHelper::EncodeStrToUTF8(i, any2Str(aty));
finalArrayLength += byteArray.get_Length();
for (k = 0; k < byteArray.get_Length() && j < 499; k++)
{
byte = byteArray.GetValue(k);
finalByteArray.SetValue(System.Convert::ToByte(byte),j);
j++;
}
}
System.Byte[] finalByteArrayLessLength = new System.Byte[finalArrayLength]();
for (k = 0; k < finalArrayLength && k < finalByteArray.get_Length() ; k++)
{
byte = finalByteArray.GetValue(k);
finalByteArrayLessLength.SetValue(System.Convert::ToByte(byte),k);
}
base64String = System.Convert::ToBase64String(finalByteArrayLessLength, 0, finalByteArrayLessLength.get_Length());
return base64String;
}
private static System.Byte[] EncodeStrToUTF8 (int _tag,str _qrCodeField)
{
System.Byte[] byteArray;
System.Byte[] finalByteArray;
System.Text.Encoding encodingUTF8;
int byte, i, arrayLength;
;
encodingUTF8 = System.Text.Encoding::get_UTF8();
byteArray = encodingUTF8.GetBytes(_qrCodeField);
arrayLength = byteArray.get_Length();
System.Byte byteTag = System.Convert::ToByte(_tag);
System.Byte byteArrayLength = System.Convert::ToByte(arrayLength);
finalByteArray = new System.Byte[arrayLength + 2]();
finalByteArray.SetValue(byteTag,0);
finalByteArray.SetValue(byteArrayLength,1);
for (i = 0; i < arrayLength; i++)
{
byte = byteArray.GetValue(i);
finalByteArray.SetValue(System.Convert::ToByte(byte),i+2);
}
return finalByteArray;
}
public static container GenerateQRCode(str _QR)
{
System.Drawing.Bitmap bm = null;
str base64String;
try
{
var qrCodeEncoder = new Microsoft.Dynamics.ApplicationSuite.QRCode.Encoder();
//base64String = NW_QRHelper::EncodeQRContentToBase64(_qrContainer);
bm = qrCodeEncoder.Encode(_QR);
}
catch (Exception::CLRError)
{
error(CLRInterop::getLastException().ToString());
}
using (var stream = new System.IO.MemoryStream())
{
bm.Save(stream, System.Drawing.Imaging.ImageFormat::Bmp);
bm.Dispose();
return Binary::constructFromMemoryStream(stream).getContainer();
}
}
}



Comments