2012年12月8日 星期六

網頁產生一二維條碼

因為教學需要,所以放上網路上找到的一二維條碼產生DLL

一維條碼 128碼 DLL(方法1),先下載以下DLL,並加入參考
https://docs.google.com/open?id=0Bxaw7Z2hq9CFWG1iRzJacFN1aGM

以下所產生的一維條碼會顯示在另一個瀏覽器,並不方便

'一維條碼 128碼 呼叫程式碼
   Dim b As BarcodeLib.Barcode = New BarcodeLib.Barcode()
        '支援39, 128, EAN, UPC等
        Dim type As BarcodeLib.TYPE = BarcodeLib.TYPE.CODE128
        Try
            'Me.Image1.Image = b.Encode(type, TextBox1.Text.Trim)
            Dim data As String = Me.TextBox1.Text
            Dim image As New System.Drawing.Bitmap(200, 200)
            image = b.Encode(type, TextBox1.Text.Trim)
            image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)
        Catch ex As Exception
            'MessageBox.Show(ex.Message)
        End Try

一維條碼 128碼 DLL(方法2),也是下載DLL,並加入參考
將編碼的圖片寫在另外一個.ashx 泛型處理常式中
Imports System.Web
Imports System.Web.Services
Imports System.Web.SessionState     ' 要使用 Session 必需加入此命名空間
Imports System.IO
Imports System.Drawing.Imaging

Public Class barcode
    Implements System.Web.IHttpHandler, IRequiresSessionState
    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
     
        Dim encodestr As String = ""
        'context.Request("encodestr") 是從傳過來的網址中抓取問號後面encoderstr的變數值
        '例如 http://barcode.ashx?encodestr="123" 則會抓取123
        If context.Session("encodestr") IsNot Nothing Then
            '利用TryParse函數判斷使用者輸入的是數字或是文字
            'If Integer.TryParse(context.Request("scid").Trim(), encoderstr) Then
            'End If
            encodestr = context.Session("encodestr").ToString
            Dim b As BarcodeLib.Barcode = New BarcodeLib.Barcode()
            Try
                Dim image As New System.Drawing.Bitmap(200, 200)
                '支援39, 128, EAN, UPC等,目前是將encodestr編成128碼
                Dim type As BarcodeLib.TYPE = BarcodeLib.TYPE.CODE128
                image = b.Encode(type, encodestr.ToString)
                context.Response.ContentType = "Image/Gif"
                context.Response.Clear()
                image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)
            Catch ex As Exception
                'MessageBox.Show(ex.Message)
            End Try
        Else
            context.Response.Write("sessioin error")
        End If
       
    End Sub
    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
End Class







二維條碼 qr code DLL
https://docs.google.com/open?id=0Bxaw7Z2hq9CFa0t4dkVkMEZCOFU



'二維條碼 呼叫程式碼
    Dim encoder As New ByCase.Lib.QRCode.Codec.QRCodeEncoder
        '編碼有3種,分別是byte, alphanumeric, numeric
        encoder.QRCodeEncodeMode = ByCase.Lib.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC

        '(image pixels per QRCode pixel): 1, 2, 3, 4, 5, 10, 15, 30. ( in pixels )
        encoder.QRCodeScale = 5
        '二维码所能包含的字符信息量是由QrcodeVersion的设置值来决定的。将QrcodeVersion设置到20的时候,就已经可以容乃到300多个字节
        encoder.QRCodeVersion = 20
        'ByCase.Lib.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.H L M Q
        encoder.QRCodeErrorCorrect = ByCase.Lib.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.H

        '只能大寫英文, 數字, 空格+-*/冒號,不可以小寫、不可底線不可特殊符號
        Dim data As String = Me.TextBox1.Text.ToUpper
        Dim image As New System.Drawing.Bitmap(200, 200)
        image = encoder.Encode(data)
        Image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)

二維條碼(方法2)
Google charts提供非常方便的API,可以產生QR Code圖片。
http://code.google.com/apis/chart/docs/gallery/qr_codes.html(API說明)
以下面URL為例,紅色部份為關鍵參數
https://chart.googleapis.com/chart?chs=120x120&cht=qr&chl=陳錫川&choe=UTF-8&chld=M|2
其中:
chs: QR code 圖片大小
cht: 圖片類型,google charts用這個參數產生各種圖片,這裡當然就填qr
chl: 要藏在QR code裡的文字,必須編成punycode(urlencode)。
choe: 編碼。請注意只支援iso-8859-1, sjis, utf8。詳見API說明網頁。
chld: 其他參數。M是錯誤修正層次,有L, M, Q, H等四級;後面的數字是QR code周圍白邊的寬度。


在webform放置textbox1與button,接著在button中撰寫以下程式即可

    Dim imgsrc As String = "http://chart.apis.google.com/chart?chs=" & "400x400" & "&chl=" & Me.TextBox1.Text & "&choe=UTF-8&cht=qr"
        Image1.ImageUrl = imgsrc


沒有留言:

張貼留言