.Net C# – Membuat Report dengan QrCode

بِسْمِ اللَّهِ Mudah-mudahan tutorial .Net C# Membuat Report dengan QrCode ini bermanfaat

QrCode seperti yang kita ketahui sudah banyak terpampang di hampir semua barang yang kita lihat. Di toko elektronik, atau bahkan di pasar kita akan banyak menemukan QrCode tersebut.

Nah sekarang kita akan belajar membuat QrCode di .Net dengan bahasa pemrograman C#. Langsung saja kita mulai.

Persiapan .Net C# Membuat Report dengan QrCode

Yang harus ada:

Aplikasi development yang dipakai adalah Microsoft Visual Studio
Kemudian menggunakan komponen QrCoder, bisa download dan dilihat cara instalasinya disini atau download disini

Pertama

Buat project baru di Microsoft Visual Studio, Pilih menu File > New > Project atau bisa tekan tombol pada keyboard Ctrl+Shift+N. Pilih Visual C# > Windows kemudian pilih Windows Forms Application. Kemudian isi Name untuk nama project, Location untuk lokasi/folder project, Solution untuk tipe Solution disini pilih saja Create new solution. Contoh seperti pada gambar, disini membuat project dengan nama Toko. Jika sudah klik tombol OK

Dengan konfigurasi diatas maka hasil di explorer akan seperti ini

Kedua

Kemudian tambahkan Form baru, namanya default saja Form1. Caranya klik kanan pada project di Solution Explorer kemudian pilih Add > New Item…

Kemudian pada Visual C# Items pilih Windows Forms kemudian pilih Windows Form, isi nama form pada Name contoh disini Form1.cs seperti pada gambar berikut

Tambahkan komponen textbox dan button pada form tersebut sehingga seperti gambar berikut

Ketiga

Tambahkan QrCoder.dll yang sudah didownload kedalam References. Jadi ada 2 library tambahan yang dipakai selain library default yaitu seperti gambar dibawah ini

QrCoder untuk generate QrCode

Microsoft.ReportViewer.WinForms untuk menampilkan report

Keempat

Kemudian tambahkan report, caranya sama dengan menambahkan form yaitu klik kanan pada project di Solution Explorer kemudian pilih Add > New Item…

Kemudian pada Visual C# Items pilih Reporting kemudian pilih Report, isi nama report pada Name contoh disini ProductLabel.rdlc seperti pada gambar berikut

Untuk bisa mengolah Report pastikan anda mengaktifkan toolbar Report Data, jika belum ada silakan lakukan ini. Klik menu View kemudian pilih menu paling bawah Report Data atau tekan tombol Ctrl+Alt+D pada keyboard

Pada toolbar Report Data tambahkan parameter, sesuai dengan kebutuhan. Atau bisa juga mengambil data dari database. Tapi di contoh ini saya tidak mengambil data dari database, saya hanya mengambil data dari input user di Textbox saja.

Disini saya tambahkan 3 parameter, PartNumber, PrintBy, dan QRCode. Kemudian klik dan drag PartNumber dan PrintBy ke report seperti gambar berikut.

Untuk menambahkan komponen yang tidak ada di Report Data. Bisa dengan klik kanan pada bagian kosong di report seperti yang ditunjukkan dengan panah dibawah ini. Ingat bagian yang kosong ya, karena nanti akan berbeda menu yang ditampilkan

Kelima

Memulai coding, buka Form1 dengan View Code, kemudian tambahkan script berikut sebelum namespace

using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.IO;
using Microsoft.Reporting.WinForms;
using QRCoder;

Kemudian sebelum public Form1() tambahkan script berikut

        private int m_currentPageIndex;
        private IList<Stream> m_streams;

Tambahkan script berikut untuk generate QrCode. Dimana QrCode ini menyimpan hasil generate-nya ke dalam bentuk gambar BitMap (.bmp) dengan nama test.bmp dan lokasinya di folder aplikasi.

        private void GenerateQRCode(string strQRCode)
        {

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            // Create QRcode....    
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(strQRCode, QRCodeGenerator.ECCLevel.L);
            QRCode qrCode = new QRCode(qrCodeData);
            Image img; ;

            using (Bitmap bitMap = qrCode.GetGraphic(20))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

                    byte[] byteImage = ms.ToArray();
                    MemoryStream ms1 = new MemoryStream(byteImage);
                    img = Image.FromStream(ms1);


                }

                RectangleF rectangleF = new RectangleF(10f, 0.0f, 0.0f, 0.0f);

                Image MyImage = new Bitmap(img);

                Graphics g2 = Graphics.FromImage(MyImage);

                IntPtr dc2 = g2.GetHdc();

                g2.ReleaseHdc(dc2);
                //Image save here...     
                MyImage.Save(Application.StartupPath + @"\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
            }

        }

Menyiapkan Stream untuk mencetak report kedalam memory, berikut fungsi-fungsi yang memanggilnya

        private Stream CreateStream(string name,
        string fileNameExtension, Encoding encoding,
        string mimeType, bool willSeek)
        {
            Stream stream = new MemoryStream();
            m_streams.Add(stream);
            return stream;
        }

        private void Export(LocalReport report)
        {
            string deviceInfo =
              @"<DeviceInfo>
                <OutputFormat>EMF</OutputFormat>
                <PageWidth>3.7in</PageWidth>
                <PageHeight>2.5in</PageHeight>
                <MarginTop>0in</MarginTop>
                <MarginLeft>0in</MarginLeft>
                <MarginRight>0in</MarginRight>
                <MarginBottom>0in</MarginBottom>
            </DeviceInfo>";
            Warning[] warnings;
            m_streams = new List<Stream>();
            report.Render("Image", deviceInfo, CreateStream,
               out warnings);
            foreach (Stream stream in m_streams)
                stream.Position = 0;
        }

        private void Print()
        {
            if (m_streams == null || m_streams.Count == 0)
                throw new Exception("Error: no stream to print.");
            PrintDocument printDoc = new PrintDocument();
            if (!printDoc.PrinterSettings.IsValid)
            {
                throw new Exception("Error: cannot find the default printer.");
            }
            else
            {
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                m_currentPageIndex = 0;
                printDoc.Print();
            }
        }

        private void PrintPage(object sender, PrintPageEventArgs ev)
        {
            Metafile pageImage = new
               Metafile(m_streams[m_currentPageIndex]);

            // Adjust rectangular area with printer margins.
            Rectangle adjustedRect = new Rectangle(
                ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
                ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
                355,
                235);

            // Draw a white background for the report
            ev.Graphics.FillRectangle(Brushes.White, adjustedRect);

            // Draw the report content
            ev.Graphics.DrawImage(pageImage, adjustedRect);

            // Prepare for the next page. Make sure we haven't hit the end.
            m_currentPageIndex++;
            ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
        }

Fungsi berikutnya adalah untuk men-generate report

        private void DoPrint(string strPartNumber)
        {

            GenerateQRCode(strPartNumber);
            string imgPath = @"" + Application.StartupPath + "\\test.bmp";
            LocalReport report = new LocalReport();
            report.ReportPath = Application.StartupPath + @"\ProductLabel.rdlc";
            report.EnableExternalImages = true;
            ReportParameter paraPrintBy = new ReportParameter("PrintBy", "Admin", true);
            ReportParameter paraQRCode = new ReportParameter("QRCode", "file:\\" + imgPath, true);
            ReportParameter paraPartNumber = new ReportParameter("PartNumber", strPartNumber, true);
            report.SetParameters(paraQRCode);
            report.SetParameters(paraPrintBy);
            report.SetParameters(paraPartNumber);
            report.Refresh();

            Export(report);
            Print();
        }

Yang terakhir adalah menjalankan generate report dengan mengklik tombol. Caranya klik ganda pada tombol button1 kemudian tambahkan script berikut

        private void button1_Click(object sender, EventArgs e)
        {
            string strPartNumber = textBox1.Text;

            DoPrint(strPartNumber);
        }

Terakhir

Saatnya mencoba/menjalankan aplikasi yang kita buat. Tekan F5, jika tidak ada error akan tampil seperti ini. Kemudian isikan angka terserah anda. Contoh disini 1234567890123 kemudian klik Print

Otomatis QrCode akan tercetak ke printer dengan asumsi sudah terkoneksi dengan printer.

Disini saya menggunakan default printer Microsoft Print to PDF seperti pada gambar berikut

Maka waktu print akan diarahkan ke tempat penyimpanan file PDF seperti pada gambar berikut

Hasil QrCode pada file PDF

Selamat mencoba dan semoga berhasil

Share

You may also like...

1 Response

  1. you have got an important blog right here! would you like to make some invite posts on my blog?

Leave a Reply

Your email address will not be published. Required fields are marked *