lundi 8 janvier 2018

Generate QrCode in RDLC with Qrcode.net and MemoryStream without saving it

  Je vous propose un code pour générer le QrCode dans un rapport RDLC sans avoir à le stocker dans un endroit précis

Pour Cela on utilise l'outil  QrCode.net , on insére le code suivant;
         ReportDataSource rds = new ReportDataSource();
                rds = new ReportDataSource("MyDataSet", list);
                              
                Bitmap BitmapCaptcha =  GenerateQrCode("HelloWord", Brushes.Black, Brushes.White, 200);
                MemoryStream ms = new MemoryStream();
                BitmapCaptcha.Save(ms, ImageFormat.Gif);
                var base64Data = Convert.ToBase64String(ms.ToArray());
                string QR_IMG = base64Data;
                ReportParameter parameter = new ReportParameter("QR_IMG", QR_IMG, true);

                ReportViewer1.LocalReport.EnableExternalImages = true;
                ReportViewer1.LocalReport.ReportPath = Page.Server.MapPath("~/rdlc/Fiche.rdlc");
                ReportViewer1.LocalReport.DataSources.Clear();
                ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { parameter });
                ReportViewer1.LocalReport.DataSources.Add(rds);

  public static Bitmap GenerateQrCode(string url, Brush darkColor, Brush lightColor, int size)
        {
            var encoder = new QrEncoder(ErrorCorrectionLevel.L);
            var code = encoder.Encode(url);
            var renderer = new GraphicsRenderer(new FixedCodeSize(size, QuietZoneModules.Zero), darkColor, lightColor);
            using (var ms = new MemoryStream())
            {
                renderer.WriteToStream(code.Matrix, ImageFormat.Png, ms);
                return new Bitmap(ms);
            }
        }


Au niveau du RDLC :

on insére une image
 on met dans le mimetype : image/gif
dans Source:  Database
dans value: = System.Convert.FromBase64String(Parameters!QR_IMG.Value)


pour plus de détails laissez un commentaire.