QR

PHOTO EMBED

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();
        }
    }

}
content_copyCOPY