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