|
หลายๆท่านอาจจะไม่ทราบว่า ActiveReports เวอร์ชั่น 6.2.3681.0 มีปัญหาที่ไม่สามารถเข้ารหัส (Encoding) UTF-8 เพื่อสร้างรหัสบาร์โค้ด QR Code ให้แสดงผลภาษาไทยได้ แต่เรามีวิธีการแก้ไขได้โดยการใช้ QR Code Library จากเหล่าบรรดาของฟรี ดังนั้นแอดมินจะขอนำเสนอทางออกให้ด้วยการใช้ MessagingToolkit.QRCode เพื่อสร้างรหัสบาร์โค้ด 2 มิติ หรือ QR Code โดยให้แสดงผลลงในกราฟิค (PictureBox) ในตัวรายงานของ ActiveReports 6.0 แทน ...

หน้าจอหลัก ...

การออกแบบรายงาน ...

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) ได้จากที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|