[VB.NET] การพิมพ์ QR Code (MessgaingToolKit.QRCode) ด้วยภาพกราฟิคลงใน ActiveReports
หลายๆท่านอาจจะไม่ทราบว่า ActiveReports เวอร์ชั่น 6.2.3681.0 มีปัญหาที่ไม่สามารถเข้ารหัส (Encoding) UTF-8 เพื่อสร้างรหัสบาร์โค้ด QR Code ให้แสดงผลภาษาไทยได้ แต่เรามีวิธีการแก้ไขได้โดยการใช้ QR Code Library จากเหล่าบรรดาของฟรี ดังนั้นแอดมินจะขอนำเสนอทางออกให้ด้วยการใช้ MessagingToolkit.QRCode เพื่อสร้างรหัสบาร์โค้ด 2 มิติ หรือ QR Code โดยให้แสดงผลลงในกราฟิค (PictureBox) ในตัวรายงานของ ActiveReports 6.0 แทน ...http://www.g2gsoft.com/webboard/images/VBNet/messagingtoolkit.png
หน้าจอหลัก ...
http://www.g2gsoft.com/webboard/images/VBNet/messagingtoolkitar.png
การออกแบบรายงาน ...
http://www.g2gsoft.com/webboard/images/VBNet/messagingtoolkitref.png
Add References ...
คลิ๊กดาวน์โหลดไฟล์ MessagingToolkit.QRCode.DLL (ต้องใช้งานด้วยครับ)
ดาวน์โหลดชุดติดตั้ง ActiveReports .NET (V6.2.3681) ได้ที่นี่ (สำหรับสมาชิกเท่านั้น)
มาดูโค้ดต้นฉบับกันเถอะ ... (ฟอร์มหลัก)
'// https://www.nuget.org/packages/MessagingToolkit.QRCode (Nuget)
'// https://platform.twit88.com/projects/mt-barcode (Web)
Public Class frmToolkitQRCode
Private Sub frmToolkitQRCode_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim rpt As New NewActiveReport1
' / --------------------------------------------------------------------------------
' / ส่วนที่สำคัญในการผูก ARDesigner เข้ากับรายงาน
' / Instance name ARDesigner มันจะชี้ไปที่ไฟล์ NewActiveReport1.vb
' / โหลดรายงาน Document (NewActiveReport1) เข้าสู่ ActiveReports Viewer
Me.Viewer1.Document = rpt.Document
' / --------------------------------------------------------------------------------
' / ปรับการย่อขยาย (Zoom) ของหน้ารายงาน
Viewer1.ReportViewer.Zoom = 1 ' 100%
' / Run Report
rpt.Run()
End Sub
Private Sub frmToolkitQRCode_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
GC.SuppressFinalize(Me)
Application.Exit()
End Sub
End Class
โค้ดในส่วนของรายงาน ARDesigner ...
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Document
Imports MessagingToolkit.QRCode.Codec
Public Class NewActiveReport1
Const MaxValue As Byte = 4
Dim Count As Byte = 0 '// นับจำนวนการพิมพ์ข้อมูล ตัวอย่างนี้มีข้อมูลอยู่ 5 ชุด คือ 0 - 4
'// Sample data.
Dim row As String() = New String() { _
"ทดสอบภาษาไทย QR Code พิมพ์ผ่าน ActiveReports 6.0", _
"MessagingToolkit.QRCode with ActiveReports 6.0", _
"https://line.me/ti/p/g2gnet", _
"http://www.g2gsoft.com/", _
"http://www.thongkorn.com" _
}
' / --------------------------------------------------------------------------------
' / (1) ส่วนของการตั้งค่าเริ่มต้นครั้งแรกครั้งเดียว
' / จากนั้นมันจะกระโดดไปทำงานที่โปรแกรมย่อย FetchData
' / --------------------------------------------------------------------------------
Private Sub NewActiveReport1_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
'/ การตั้งค่าหน้ากระดาษ
With PageSettings
'/ หน่วยวัดเป็นนิ้ว (ใช้ CmToInch ด้วยการรับค่าเซนติเมตร แต่แปลงเป็นนิ้วแทน เพื่อวัดระยะได้ง่ายกว่า)
'/ หากกำหนดขนาดกระดาษเกิน เวลาแสดงผลรายงาน จะมีแถบแนวตั้งสีแดงปรากฏ
.Margins.Left = CmToInch(0.75)
.Margins.Right = CmToInch(0.45)
.Margins.Top = CmToInch(1.5)
.Margins.Bottom = CmToInch(1.5)
'/ ตั้งค่ากระดาษแนวตั้ง
.Orientation = PageOrientation.Portrait
'/ กระดาษขนาด A4
.PaperKind = Drawing.Printing.PaperKind.A4
'/ กรณีที่กำหนดขนาดกระดาษเอง
'/ .PaperKind = Drawing.Printing.PaperKind.Custom
End With
'/ กระโดดไปที่โปรแกรมย่อย FetchData (2)
End Sub
' / --------------------------------------------------------------------------------
' / (2) ส่วนของการตรวจสอบจำนวนข้อมูล
' / หาก Count มีค่ามากกว่า 4 ก็จะจบการทำงาน (eArgs.EOF = True)
' / --------------------------------------------------------------------------------
Private Sub NewActiveReport1_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
If Count > MaxValue Then
'/ หากหมดแล้วก็จบการพิมพ์
eArgs.EOF = True
'Exit Sub
'/ ยังไม่หมดข้อมูล
Else
eArgs.EOF = False
'/ กระโดดไปทำงานที่ Detail1_Format (3)
End If
End Sub
' / --------------------------------------------------------------------------------
' / (3) จาก FetchData หาก eArgs.EOF = False
' / มันจะวนกลับมาพิมพ์ใหม่อีกรอบ
' / --------------------------------------------------------------------------------
Private Sub Detail1_Format(sender As System.Object, e As System.EventArgs) Handles Detail1.Format
Dim QRCode As New QRCodeEncoder
Try
With picBarcode
.Image = QRCode.Encode(row(Count), System.Text.Encoding.UTF8)
.SizeMode = PictureBoxSizeMode.StretchImage
End With
lblURL.Text = row(Count)
Count = Count + 1 '// Increment Counter.
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
'/ กระโดดกลับไปที่โปรแกรมย่อย FetchData (2)
End Sub
End Class
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้จากที่นี่ ...
หน้า:
[1]