بِسْمِ اللَّهِ 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
you have got an important blog right here! would you like to make some invite posts on my blog?