thongkorn โพสต์ 2023-9-20 12:11:27

[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]
ดูในรูปแบบกติ: [VB.NET] การพิมพ์ QR Code (MessgaingToolKit.QRCode) ด้วยภาพกราฟิคลงใน ActiveReports