'C#代码来源:http://www.cnblogs.com/rophie/archive/2012/03/02/2376946.html
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Drawing
Namespace Code
Public Class BarCode
Public Class Code128
Private m_Code128 As New DataTable()
Private m_Height As UInteger = 40
''' <summary>
''' 高度
''' </summary>
Public Property Height() As UInteger
Get
Return m_Height
End Get
Set(ByVal value As UInteger)
m_Height = value
End Set
End Property
Private m_ValueFont As Font = Nothing
''' <summary>
''' 是否显示可见号码 如果为NULL不显示号码
''' </summary>
Public Property ValueFont() As Font
Get
Return m_ValueFont
End Get
Set(ByVal value As Font)
m_ValueFont = value
End Set
End Property
Private m_Magnify As Byte = 0
''' <summary>
''' 放大倍数
''' </summary>
Public Property Magnify() As Byte
Get
Return m_Magnify
End Get
Set(ByVal value As Byte)
m_Magnify = value
End Set
End Property
''' <summary>
''' 条码类别
''' </summary>
Public Enum Encode
Code128A
Code128B
Code128C
EAN128
End Enum
Public Sub New()
m_Code128.Columns.Add("ID")
m_Code128.Columns.Add("Code128A")
m_Code128.Columns.Add("Code128B")
m_Code128.Columns.Add("Code128C")
m_Code128.Columns.Add("BandCode")
m_Code128.CaseSensitive = True
'#region 数据表
m_Code128.Rows.Add("0", " ", " ", "00", "212222")
m_Code128.Rows.Add("1", "!", "!", "01", "222122")
m_Code128.Rows.Add("2", """", """", "02", "222221")
m_Code128.Rows.Add("3", "#", "#", "03", "121223")
m_Code128.Rows.Add("4", "$", "$", "04", "121322")
m_Code128.Rows.Add("5", "%", "%", "05", "131222")
m_Code128.Rows.Add("6", "&", "&", "06", "122213")
m_Code128.Rows.Add("7", "'", "'", "07", "122312")
m_Code128.Rows.Add("8", "(", "(", "08", "132212")
m_Code128.Rows.Add("9", ")", ")", "09", "221213")
m_Code128.Rows.Add("10", "*", "*", "10", "221312")
m_Code128.Rows.Add("11", "+", "+", "11", "231212")
m_Code128.Rows.Add("12", ",", ",", "12", "112232")
m_Code128.Rows.Add("13", "-", "-", "13", "122132")
m_Code128.Rows.Add("14", ".", ".", "14", "122231")
m_Code128.Rows.Add("15", "/", "/", "15", "113222")
m_Code128.Rows.Add("16", "0", "0", "16", "123122")
m_Code128.Rows.Add("17", "1", "1", "17", "123221")
m_Code128.Rows.Add("18", "2", "2", "18", "223211")
m_Code128.Rows.Add("19", "3", "3", "19", "221132")
m_Code128.Rows.Add("20", "4", "4", "20", "221231")
m_Code128.Rows.Add("21", "5", "5", "21", "213212")
m_Code128.Rows.Add("22", "6", "6", "22", "223112")
m_Code128.Rows.Add("23", "7", "7", "23", "312131")
m_Code128.Rows.Add("24", "8", "8", "24", "311222")
m_Code128.Rows.Add("25", "9", "9", "25", "321122")
m_Code128.Rows.Add("26", ":", ":", "26", "321221")
m_Code128.Rows.Add("27", ";", ";", "27", "312212")
m_Code128.Rows.Add("28", "<", "<", "28", "322112")
m_Code128.Rows.Add("29", "=", "=", "29", "322211")
m_Code128.Rows.Add("30", ">", ">", "30", "212123")
m_Code128.Rows.Add("31", "?", "?", "31", "212321")
m_Code128.Rows.Add("32", "@", "@", "32", "232121")
m_Code128.Rows.Add("33", "A", "A", "33", "111323")
m_Code128.Rows.Add("34", "B", "B", "34", "131123")
m_Code128.Rows.Add("35", "C", "C", "35", "131321")
m_Code128.Rows.Add("36", "D", "D", "36", "112313")
m_Code128.Rows.Add("37", "E", "E", "37", "132113")
m_Code128.Rows.Add("38", "F", "F", "38", "132311")
m_Code128.Rows.Add("39", "G", "G", "39", "211313")
m_Code128.Rows.Add("40", "H", "H", "40", "231113")
m_Code128.Rows.Add("41", "I", "I", "41", "231311")
m_Code128.Rows.Add("42", "J", "J", "42", "112133")
m_Code128.Rows.Add("43", "K", "K", "43", "112331")
m_Code128.Rows.Add("44", "L", "L", "44", "132131")
m_Code128.Rows.Add("45", "M", "M", "45", "113123")
m_Code128.Rows.Add("46", "N", "N", "46", "113321")
m_Code128.Rows.Add("47", "O", "O", "47", "133121")
m_Code128.Rows.Add("48", "P", "P", "48", "313121")
m_Code128.Rows.Add("49", "Q", "Q", "49", "211331")
m_Code128.Rows.Add("50", "R", "R", "50", "231131")
m_Code128.Rows.Add("51", "S", "S", "51", "213113")
m_Code128.Rows.Add("52", "T", "T", "52", "213311")
m_Code128.Rows.Add("53", "U", "U", "53", "213131")
m_Code128.Rows.Add("54", "V", "V", "54", "311123")
m_Code128.Rows.Add("55", "W", "W", "55", "311321")
m_Code128.Rows.Add("56", "X", "X", "56", "331121")
m_Code128.Rows.Add("57", "Y", "Y", "57", "312113")
m_Code128.Rows.Add("58", "Z", "Z", "58", "312311")
m_Code128.Rows.Add("59", "[", "[", "59", "332111")
m_Code128.Rows.Add("60", "\", "\", "60", "314111")
m_Code128.Rows.Add("61", "]", "]", "61", "221411")
m_Code128.Rows.Add("62", "^", "^", "62", "431111")
m_Code128.Rows.Add("63", "_", "_", "63", "111224")
m_Code128.Rows.Add("64", "NUL", "`", "64", "111422")
m_Code128.Rows.Add("65", "SOH", "a", "65", "121124")
m_Code128.Rows.Add("66", "STX", "b", "66", "121421")
m_Code128.Rows.Add("67", "ETX", "c", "67", "141122")
m_Code128.Rows.Add("68", "EOT", "d", "68", "141221")
m_Code128.Rows.Add("69", "ENQ", "e", "69", "112214")
m_Code128.Rows.Add("70", "ACK", "f", "70", "112412")
m_Code128.Rows.Add("71", "BEL", "g", "71", "122114")
m_Code128.Rows.Add("72", "BS", "h", "72", "122411")
m_Code128.Rows.Add("73", "HT", "i", "73", "142112")
m_Code128.Rows.Add("74", "LF", "j", "74", "142211")
m_Code128.Rows.Add("75", "VT", "k", "75", "241211")
m_Code128.Rows.Add("76", "FF", "I", "76", "221114")
m_Code128.Rows.Add("77", "CR", "m", "77", "413111")
m_Code128.Rows.Add("78", "SO", "n", "78", "241112")
m_Code128.Rows.Add("79", "SI", "o", "79", "134111")
m_Code128.Rows.Add("80", "DLE", "p", "80", "111242")
m_Code128.Rows.Add("81", "DC1", "q", "81", "121142")
m_Code128.Rows.Add("82", "DC2", "r", "82", "121241")
m_Code128.Rows.Add("83", "DC3", "s", "83", "114212")
m_Code128.Rows.Add("84", "DC4", "t", "84", "124112")
m_Code128.Rows.Add("85", "NAK", "u", "85", "124211")
m_Code128.Rows.Add("86", "SYN", "v", "86", "411212")
m_Code128.Rows.Add("87", "ETB", "w", "87", "421112")
m_Code128.Rows.Add("88", "CAN", "x", "88", "421211")
m_Code128.Rows.Add("89", "EM", "y", "89", "212141")
m_Code128.Rows.Add("90", "SUB", "z", "90", "214121")
m_Code128.Rows.Add("91", "ESC", "{", "91", "412121")
m_Code128.Rows.Add("92", "FS", "|", "92", "111143")
m_Code128.Rows.Add("93", "GS", "}", "93", "111341")
m_Code128.Rows.Add("94", "RS", "~", "94", "131141")
m_Code128.Rows.Add("95", "US", "DEL", "95", "114113")
m_Code128.Rows.Add("96", "FNC3", "FNC3", "96", "114311")
m_Code128.Rows.Add("97", "FNC2", "FNC2", "97", "411113")
m_Code128.Rows.Add("98", "SHIFT", "SHIFT", "98", "411311")
m_Code128.Rows.Add("99", "CODEC", "CODEC", "99", "113141")
m_Code128.Rows.Add("100", "CODEB", "FNC4", "CODEB", "114131")
m_Code128.Rows.Add("101", "FNC4", "CODEA", "CODEA", "311141")
m_Code128.Rows.Add("102", "FNC1", "FNC1", "FNC1", "411131")
m_Code128.Rows.Add("103", "StartA", "StartA", "StartA", "211412")
m_Code128.Rows.Add("104", "StartB", "StartB", "StartB", "211214")
m_Code128.Rows.Add("105", "StartC", "StartC", "StartC", "211232")
'#endregion
m_Code128.Rows.Add("106", "Stop", "Stop", "Stop", "2331112")
End Sub
''' <summary>
''' 获取128图形
''' </summary>
''' <param name="p_Text">文字</param>
''' <param name="p_Code">编码</param>
''' <returns>图形</returns>
Public Function GetCodeImage(ByVal p_Text As String, ByVal p_Code As Encode) As Bitmap
Dim _ViewText As String = p_Text
Dim _Text As String = ""
Dim _TextNumb As IList(Of Integer) = New List(Of Integer)()
Dim _Examine As Integer = 0
'首位
Select Case p_Code
Case Encode.Code128C
_Examine = 105
If Not ((p_Text.Length And 1) = 0) Then
Throw New Exception("128C长度必须是偶数")
End If
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Try
Dim _CodeNumb128 As Integer = Int32.Parse(p_Text.Substring(0, 2))
Catch
Throw New Exception("128C必须是数字!")
End Try
_Text += GetValue(p_Code, p_Text.Substring(0, 2), _Temp)
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 2)
End While
Exit Select
Case Encode.EAN128
_Examine = 105
If Not ((p_Text.Length And 1) = 0) Then
Throw New Exception("EAN128长度必须是偶数")
End If
_TextNumb.Add(102)
_Text += "411131"
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Try
Dim _CodeNumb128 As Integer = Int32.Parse(p_Text.Substring(0, 2))
Catch
Throw New Exception("128C必须是数字!")
End Try
_Text += GetValue(Encode.Code128C, p_Text.Substring(0, 2), _Temp)
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 2)
End While
Exit Select
Case Else
If p_Code = Encode.Code128A Then
_Examine = 103
Else
_Examine = 104
End If
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Dim _ValueCode As String = GetValue(p_Code, p_Text.Substring(0, 1), _Temp)
If _ValueCode.Length = 0 Then
Throw New Exception("无效的字符集!" + p_Text.Substring(0, 1).ToString())
End If
_Text += _ValueCode
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 1)
End While
Exit Select
End Select
If _TextNumb.Count = 0 Then
Throw New Exception("错误的编码,无数据")
End If
_Text = _Text.Insert(0, GetValue(_Examine))
'获取开始位
Dim i As Integer = 0
While i <> _TextNumb.Count
_Examine += _TextNumb(i) * (i + 1)
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
_Examine = _Examine Mod 103
'获得严效位
_Text += GetValue(_Examine)
'获取严效位
_Text += "2331112"
'结束位
Dim _CodeImage As Bitmap = GetImage(_Text)
GetViewText(_CodeImage, _ViewText)
Return _CodeImage
End Function
''' <summary>
''' 获取目标对应的数据
''' </summary>
''' <param name="p_Code">编码</param>
''' <param name="p_Value">数值 A b 30</param>
''' <param name="p_SetID">返回编号</param>
''' <returns>编码</returns>
Private Function GetValue(ByVal p_Code As Encode, ByVal p_Value As String, ByRef p_SetID As Integer) As String
If m_Code128 Is Nothing Then
Return ""
End If
Dim _Row As DataRow() = m_Code128.[Select](p_Code.ToString() + "='" + p_Value + "'")
If _Row.Length <> 1 Then
Throw New Exception("错误的编码" + p_Value.ToString())
End If
p_SetID = Int32.Parse(_Row(0)("ID").ToString())
Return _Row(0)("BandCode").ToString()
End Function
''' <summary>
''' 根据编号获得条纹
''' </summary>
''' <param name="p_CodeId"></param>
''' <returns></returns>
Private Function GetValue(ByVal p_CodeId As Integer) As String
Dim _Row As DataRow() = m_Code128.[Select]("ID='" + p_CodeId.ToString() + "'")
If _Row.Length <> 1 Then
Throw New Exception("验效位的编码错误" + p_CodeId.ToString())
End If
Return _Row(0)("BandCode").ToString()
End Function
''' <summary>
''' 获得条码图形
''' </summary>
''' <param name="p_Text">文字</param>
''' <returns>图形</returns>
Private Function GetImage(ByVal p_Text As String) As Bitmap
Dim _Value As Char() = p_Text.ToCharArray()
Dim _Width As Integer = 0
Dim i As Integer = 0
While i <> _Value.Length
_Width += Int32.Parse(_Value(i).ToString()) * (m_Magnify + 1)
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
Dim _CodeImage As New Bitmap(_Width, CType(m_Height, Integer))
Dim _Garphics As Graphics = Graphics.FromImage(_CodeImage)
'Pen _Pen;
Dim _LenEx As Integer = 0
i = 0
While i <> _Value.Length
Dim _ValueNumb As Integer = Int32.Parse(_Value(i).ToString()) * (m_Magnify + 1)
'获取宽和放大系数
If Not ((i And 1) = 0) Then
'_Pen = new Pen(Brushes.White, _ValueNumb);
_Garphics.FillRectangle(Brushes.White, New Rectangle(_LenEx, 0, _ValueNumb, CType(m_Height, Integer)))
Else
'_Pen = new Pen(Brushes.Black, _ValueNumb);
_Garphics.FillRectangle(Brushes.Black, New Rectangle(_LenEx, 0, _ValueNumb, CType(m_Height, Integer)))
End If
'_Garphics.(_Pen, new Point(_LenEx, 0), new Point(_LenEx, m_Height));
_LenEx += _ValueNumb
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
_Garphics.Dispose()
Return _CodeImage
End Function
''' <summary>
''' 显示可见条码文字 如果小于40 不显示文字
''' </summary>
''' <param name="p_Bitmap">图形</param>
Private Sub GetViewText(ByVal p_Bitmap As Bitmap, ByVal p_ViewText As String)
If m_ValueFont Is Nothing Then
Return
End If
Dim _Graphics As Graphics = Graphics.FromImage(p_Bitmap)
Dim _DrawSize As SizeF = _Graphics.MeasureString(p_ViewText, m_ValueFont)
If _DrawSize.Height > p_Bitmap.Height - 10 OrElse _DrawSize.Width > p_Bitmap.Width Then
_Graphics.Dispose()
Return
End If
Dim _StarY As Integer = p_Bitmap.Height - CType(_DrawSize.Height, Integer)
_Graphics.FillRectangle(Brushes.White, New Rectangle(0, _StarY, p_Bitmap.Width, CType(_DrawSize.Height, Integer)))
_Graphics.DrawString(p_ViewText, m_ValueFont, Brushes.Black, 0, _StarY)
End Sub
'12345678
'(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47
'结果为starc +12 +34 +56 +78 +47 +end
Friend Function GetCodeImage(ByVal p As String) As Image
Throw New NotImplementedException()
End Function
End Class
End Class
End Namespace
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Drawing
Namespace Code
Public Class BarCode
Public Class Code128
Private m_Code128 As New DataTable()
Private m_Height As UInteger = 40
''' <summary>
''' 高度
''' </summary>
Public Property Height() As UInteger
Get
Return m_Height
End Get
Set(ByVal value As UInteger)
m_Height = value
End Set
End Property
Private m_ValueFont As Font = Nothing
''' <summary>
''' 是否显示可见号码 如果为NULL不显示号码
''' </summary>
Public Property ValueFont() As Font
Get
Return m_ValueFont
End Get
Set(ByVal value As Font)
m_ValueFont = value
End Set
End Property
Private m_Magnify As Byte = 0
''' <summary>
''' 放大倍数
''' </summary>
Public Property Magnify() As Byte
Get
Return m_Magnify
End Get
Set(ByVal value As Byte)
m_Magnify = value
End Set
End Property
''' <summary>
''' 条码类别
''' </summary>
Public Enum Encode
Code128A
Code128B
Code128C
EAN128
End Enum
Public Sub New()
m_Code128.Columns.Add("ID")
m_Code128.Columns.Add("Code128A")
m_Code128.Columns.Add("Code128B")
m_Code128.Columns.Add("Code128C")
m_Code128.Columns.Add("BandCode")
m_Code128.CaseSensitive = True
'#region 数据表
m_Code128.Rows.Add("0", " ", " ", "00", "212222")
m_Code128.Rows.Add("1", "!", "!", "01", "222122")
m_Code128.Rows.Add("2", """", """", "02", "222221")
m_Code128.Rows.Add("3", "#", "#", "03", "121223")
m_Code128.Rows.Add("4", "$", "$", "04", "121322")
m_Code128.Rows.Add("5", "%", "%", "05", "131222")
m_Code128.Rows.Add("6", "&", "&", "06", "122213")
m_Code128.Rows.Add("7", "'", "'", "07", "122312")
m_Code128.Rows.Add("8", "(", "(", "08", "132212")
m_Code128.Rows.Add("9", ")", ")", "09", "221213")
m_Code128.Rows.Add("10", "*", "*", "10", "221312")
m_Code128.Rows.Add("11", "+", "+", "11", "231212")
m_Code128.Rows.Add("12", ",", ",", "12", "112232")
m_Code128.Rows.Add("13", "-", "-", "13", "122132")
m_Code128.Rows.Add("14", ".", ".", "14", "122231")
m_Code128.Rows.Add("15", "/", "/", "15", "113222")
m_Code128.Rows.Add("16", "0", "0", "16", "123122")
m_Code128.Rows.Add("17", "1", "1", "17", "123221")
m_Code128.Rows.Add("18", "2", "2", "18", "223211")
m_Code128.Rows.Add("19", "3", "3", "19", "221132")
m_Code128.Rows.Add("20", "4", "4", "20", "221231")
m_Code128.Rows.Add("21", "5", "5", "21", "213212")
m_Code128.Rows.Add("22", "6", "6", "22", "223112")
m_Code128.Rows.Add("23", "7", "7", "23", "312131")
m_Code128.Rows.Add("24", "8", "8", "24", "311222")
m_Code128.Rows.Add("25", "9", "9", "25", "321122")
m_Code128.Rows.Add("26", ":", ":", "26", "321221")
m_Code128.Rows.Add("27", ";", ";", "27", "312212")
m_Code128.Rows.Add("28", "<", "<", "28", "322112")
m_Code128.Rows.Add("29", "=", "=", "29", "322211")
m_Code128.Rows.Add("30", ">", ">", "30", "212123")
m_Code128.Rows.Add("31", "?", "?", "31", "212321")
m_Code128.Rows.Add("32", "@", "@", "32", "232121")
m_Code128.Rows.Add("33", "A", "A", "33", "111323")
m_Code128.Rows.Add("34", "B", "B", "34", "131123")
m_Code128.Rows.Add("35", "C", "C", "35", "131321")
m_Code128.Rows.Add("36", "D", "D", "36", "112313")
m_Code128.Rows.Add("37", "E", "E", "37", "132113")
m_Code128.Rows.Add("38", "F", "F", "38", "132311")
m_Code128.Rows.Add("39", "G", "G", "39", "211313")
m_Code128.Rows.Add("40", "H", "H", "40", "231113")
m_Code128.Rows.Add("41", "I", "I", "41", "231311")
m_Code128.Rows.Add("42", "J", "J", "42", "112133")
m_Code128.Rows.Add("43", "K", "K", "43", "112331")
m_Code128.Rows.Add("44", "L", "L", "44", "132131")
m_Code128.Rows.Add("45", "M", "M", "45", "113123")
m_Code128.Rows.Add("46", "N", "N", "46", "113321")
m_Code128.Rows.Add("47", "O", "O", "47", "133121")
m_Code128.Rows.Add("48", "P", "P", "48", "313121")
m_Code128.Rows.Add("49", "Q", "Q", "49", "211331")
m_Code128.Rows.Add("50", "R", "R", "50", "231131")
m_Code128.Rows.Add("51", "S", "S", "51", "213113")
m_Code128.Rows.Add("52", "T", "T", "52", "213311")
m_Code128.Rows.Add("53", "U", "U", "53", "213131")
m_Code128.Rows.Add("54", "V", "V", "54", "311123")
m_Code128.Rows.Add("55", "W", "W", "55", "311321")
m_Code128.Rows.Add("56", "X", "X", "56", "331121")
m_Code128.Rows.Add("57", "Y", "Y", "57", "312113")
m_Code128.Rows.Add("58", "Z", "Z", "58", "312311")
m_Code128.Rows.Add("59", "[", "[", "59", "332111")
m_Code128.Rows.Add("60", "\", "\", "60", "314111")
m_Code128.Rows.Add("61", "]", "]", "61", "221411")
m_Code128.Rows.Add("62", "^", "^", "62", "431111")
m_Code128.Rows.Add("63", "_", "_", "63", "111224")
m_Code128.Rows.Add("64", "NUL", "`", "64", "111422")
m_Code128.Rows.Add("65", "SOH", "a", "65", "121124")
m_Code128.Rows.Add("66", "STX", "b", "66", "121421")
m_Code128.Rows.Add("67", "ETX", "c", "67", "141122")
m_Code128.Rows.Add("68", "EOT", "d", "68", "141221")
m_Code128.Rows.Add("69", "ENQ", "e", "69", "112214")
m_Code128.Rows.Add("70", "ACK", "f", "70", "112412")
m_Code128.Rows.Add("71", "BEL", "g", "71", "122114")
m_Code128.Rows.Add("72", "BS", "h", "72", "122411")
m_Code128.Rows.Add("73", "HT", "i", "73", "142112")
m_Code128.Rows.Add("74", "LF", "j", "74", "142211")
m_Code128.Rows.Add("75", "VT", "k", "75", "241211")
m_Code128.Rows.Add("76", "FF", "I", "76", "221114")
m_Code128.Rows.Add("77", "CR", "m", "77", "413111")
m_Code128.Rows.Add("78", "SO", "n", "78", "241112")
m_Code128.Rows.Add("79", "SI", "o", "79", "134111")
m_Code128.Rows.Add("80", "DLE", "p", "80", "111242")
m_Code128.Rows.Add("81", "DC1", "q", "81", "121142")
m_Code128.Rows.Add("82", "DC2", "r", "82", "121241")
m_Code128.Rows.Add("83", "DC3", "s", "83", "114212")
m_Code128.Rows.Add("84", "DC4", "t", "84", "124112")
m_Code128.Rows.Add("85", "NAK", "u", "85", "124211")
m_Code128.Rows.Add("86", "SYN", "v", "86", "411212")
m_Code128.Rows.Add("87", "ETB", "w", "87", "421112")
m_Code128.Rows.Add("88", "CAN", "x", "88", "421211")
m_Code128.Rows.Add("89", "EM", "y", "89", "212141")
m_Code128.Rows.Add("90", "SUB", "z", "90", "214121")
m_Code128.Rows.Add("91", "ESC", "{", "91", "412121")
m_Code128.Rows.Add("92", "FS", "|", "92", "111143")
m_Code128.Rows.Add("93", "GS", "}", "93", "111341")
m_Code128.Rows.Add("94", "RS", "~", "94", "131141")
m_Code128.Rows.Add("95", "US", "DEL", "95", "114113")
m_Code128.Rows.Add("96", "FNC3", "FNC3", "96", "114311")
m_Code128.Rows.Add("97", "FNC2", "FNC2", "97", "411113")
m_Code128.Rows.Add("98", "SHIFT", "SHIFT", "98", "411311")
m_Code128.Rows.Add("99", "CODEC", "CODEC", "99", "113141")
m_Code128.Rows.Add("100", "CODEB", "FNC4", "CODEB", "114131")
m_Code128.Rows.Add("101", "FNC4", "CODEA", "CODEA", "311141")
m_Code128.Rows.Add("102", "FNC1", "FNC1", "FNC1", "411131")
m_Code128.Rows.Add("103", "StartA", "StartA", "StartA", "211412")
m_Code128.Rows.Add("104", "StartB", "StartB", "StartB", "211214")
m_Code128.Rows.Add("105", "StartC", "StartC", "StartC", "211232")
'#endregion
m_Code128.Rows.Add("106", "Stop", "Stop", "Stop", "2331112")
End Sub
''' <summary>
''' 获取128图形
''' </summary>
''' <param name="p_Text">文字</param>
''' <param name="p_Code">编码</param>
''' <returns>图形</returns>
Public Function GetCodeImage(ByVal p_Text As String, ByVal p_Code As Encode) As Bitmap
Dim _ViewText As String = p_Text
Dim _Text As String = ""
Dim _TextNumb As IList(Of Integer) = New List(Of Integer)()
Dim _Examine As Integer = 0
'首位
Select Case p_Code
Case Encode.Code128C
_Examine = 105
If Not ((p_Text.Length And 1) = 0) Then
Throw New Exception("128C长度必须是偶数")
End If
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Try
Dim _CodeNumb128 As Integer = Int32.Parse(p_Text.Substring(0, 2))
Catch
Throw New Exception("128C必须是数字!")
End Try
_Text += GetValue(p_Code, p_Text.Substring(0, 2), _Temp)
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 2)
End While
Exit Select
Case Encode.EAN128
_Examine = 105
If Not ((p_Text.Length And 1) = 0) Then
Throw New Exception("EAN128长度必须是偶数")
End If
_TextNumb.Add(102)
_Text += "411131"
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Try
Dim _CodeNumb128 As Integer = Int32.Parse(p_Text.Substring(0, 2))
Catch
Throw New Exception("128C必须是数字!")
End Try
_Text += GetValue(Encode.Code128C, p_Text.Substring(0, 2), _Temp)
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 2)
End While
Exit Select
Case Else
If p_Code = Encode.Code128A Then
_Examine = 103
Else
_Examine = 104
End If
While p_Text.Length <> 0
Dim _Temp As Integer = 0
Dim _ValueCode As String = GetValue(p_Code, p_Text.Substring(0, 1), _Temp)
If _ValueCode.Length = 0 Then
Throw New Exception("无效的字符集!" + p_Text.Substring(0, 1).ToString())
End If
_Text += _ValueCode
_TextNumb.Add(_Temp)
p_Text = p_Text.Remove(0, 1)
End While
Exit Select
End Select
If _TextNumb.Count = 0 Then
Throw New Exception("错误的编码,无数据")
End If
_Text = _Text.Insert(0, GetValue(_Examine))
'获取开始位
Dim i As Integer = 0
While i <> _TextNumb.Count
_Examine += _TextNumb(i) * (i + 1)
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
_Examine = _Examine Mod 103
'获得严效位
_Text += GetValue(_Examine)
'获取严效位
_Text += "2331112"
'结束位
Dim _CodeImage As Bitmap = GetImage(_Text)
GetViewText(_CodeImage, _ViewText)
Return _CodeImage
End Function
''' <summary>
''' 获取目标对应的数据
''' </summary>
''' <param name="p_Code">编码</param>
''' <param name="p_Value">数值 A b 30</param>
''' <param name="p_SetID">返回编号</param>
''' <returns>编码</returns>
Private Function GetValue(ByVal p_Code As Encode, ByVal p_Value As String, ByRef p_SetID As Integer) As String
If m_Code128 Is Nothing Then
Return ""
End If
Dim _Row As DataRow() = m_Code128.[Select](p_Code.ToString() + "='" + p_Value + "'")
If _Row.Length <> 1 Then
Throw New Exception("错误的编码" + p_Value.ToString())
End If
p_SetID = Int32.Parse(_Row(0)("ID").ToString())
Return _Row(0)("BandCode").ToString()
End Function
''' <summary>
''' 根据编号获得条纹
''' </summary>
''' <param name="p_CodeId"></param>
''' <returns></returns>
Private Function GetValue(ByVal p_CodeId As Integer) As String
Dim _Row As DataRow() = m_Code128.[Select]("ID='" + p_CodeId.ToString() + "'")
If _Row.Length <> 1 Then
Throw New Exception("验效位的编码错误" + p_CodeId.ToString())
End If
Return _Row(0)("BandCode").ToString()
End Function
''' <summary>
''' 获得条码图形
''' </summary>
''' <param name="p_Text">文字</param>
''' <returns>图形</returns>
Private Function GetImage(ByVal p_Text As String) As Bitmap
Dim _Value As Char() = p_Text.ToCharArray()
Dim _Width As Integer = 0
Dim i As Integer = 0
While i <> _Value.Length
_Width += Int32.Parse(_Value(i).ToString()) * (m_Magnify + 1)
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
Dim _CodeImage As New Bitmap(_Width, CType(m_Height, Integer))
Dim _Garphics As Graphics = Graphics.FromImage(_CodeImage)
'Pen _Pen;
Dim _LenEx As Integer = 0
i = 0
While i <> _Value.Length
Dim _ValueNumb As Integer = Int32.Parse(_Value(i).ToString()) * (m_Magnify + 1)
'获取宽和放大系数
If Not ((i And 1) = 0) Then
'_Pen = new Pen(Brushes.White, _ValueNumb);
_Garphics.FillRectangle(Brushes.White, New Rectangle(_LenEx, 0, _ValueNumb, CType(m_Height, Integer)))
Else
'_Pen = new Pen(Brushes.Black, _ValueNumb);
_Garphics.FillRectangle(Brushes.Black, New Rectangle(_LenEx, 0, _ValueNumb, CType(m_Height, Integer)))
End If
'_Garphics.(_Pen, new Point(_LenEx, 0), new Point(_LenEx, m_Height));
_LenEx += _ValueNumb
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
End While
_Garphics.Dispose()
Return _CodeImage
End Function
''' <summary>
''' 显示可见条码文字 如果小于40 不显示文字
''' </summary>
''' <param name="p_Bitmap">图形</param>
Private Sub GetViewText(ByVal p_Bitmap As Bitmap, ByVal p_ViewText As String)
If m_ValueFont Is Nothing Then
Return
End If
Dim _Graphics As Graphics = Graphics.FromImage(p_Bitmap)
Dim _DrawSize As SizeF = _Graphics.MeasureString(p_ViewText, m_ValueFont)
If _DrawSize.Height > p_Bitmap.Height - 10 OrElse _DrawSize.Width > p_Bitmap.Width Then
_Graphics.Dispose()
Return
End If
Dim _StarY As Integer = p_Bitmap.Height - CType(_DrawSize.Height, Integer)
_Graphics.FillRectangle(Brushes.White, New Rectangle(0, _StarY, p_Bitmap.Width, CType(_DrawSize.Height, Integer)))
_Graphics.DrawString(p_ViewText, m_ValueFont, Brushes.Black, 0, _StarY)
End Sub
'12345678
'(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47
'结果为starc +12 +34 +56 +78 +47 +end
Friend Function GetCodeImage(ByVal p As String) As Image
Throw New NotImplementedException()
End Function
End Class
End Class
End Namespace
Imports VB.net_Code128.Code.BarCode
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBox1.Text = "Code128A"
Me.ComboBox1.Items.Add("Code128A")
Me.ComboBox1.Items.Add("Code128B")
Me.ComboBox1.Items.Add("Code128C")
Me.ComboBox1.Items.Add("EAN128")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
On Error GoTo E
Dim _Code As Code128 = New Code128
_Code.ValueFont = New Font("宋体", 10)
_Code.Height = Me.TrackBar1.Value
_Code.Magnify = 2
Dim Encode As Code128.Encode
If Me.ComboBox1.Text = "Code128A" Then
Encode = Code128.Encode.Code128A
ElseIf Me.ComboBox1.Text = "Code128B" Then
Encode = Code128.Encode.Code128B
ElseIf Me.ComboBox1.Text = "Code128C" Then
Encode = Code128.Encode.Code128C
Else
Encode = Code128.Encode.EAN128
End If
Dim imgTemp As System.Drawing.Bitmap = _Code.GetCodeImage(Me.TextBox1.Text, Encode)
Me.PictureBox1.Image = imgTemp
Exit Sub
E:
MsgBox(Err.Description)
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
On Error GoTo E
Dim _Code As Code128 = New Code128
_Code.ValueFont = New Font("宋体", 10)
_Code.Height = Me.TrackBar1.Value
_Code.Magnify = 2
Dim Encode As Code128.Encode
If Me.ComboBox1.Text = "Code128A" Then
Encode = Code128.Encode.Code128A
ElseIf Me.ComboBox1.Text = "Code128B" Then
Encode = Code128.Encode.Code128B
ElseIf Me.ComboBox1.Text = "Code128C" Then
Encode = Code128.Encode.Code128C
Else
Encode = Code128.Encode.EAN128
End If
Dim imgTemp As System.Drawing.Bitmap = _Code.GetCodeImage(Me.TextBox1.Text, Encode)
Me.PictureBox1.Image = imgTemp
Exit Sub
E:
MsgBox(Err.Description)
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBox1.Text = "Code128A"
Me.ComboBox1.Items.Add("Code128A")
Me.ComboBox1.Items.Add("Code128B")
Me.ComboBox1.Items.Add("Code128C")
Me.ComboBox1.Items.Add("EAN128")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
On Error GoTo E
Dim _Code As Code128 = New Code128
_Code.ValueFont = New Font("宋体", 10)
_Code.Height = Me.TrackBar1.Value
_Code.Magnify = 2
Dim Encode As Code128.Encode
If Me.ComboBox1.Text = "Code128A" Then
Encode = Code128.Encode.Code128A
ElseIf Me.ComboBox1.Text = "Code128B" Then
Encode = Code128.Encode.Code128B
ElseIf Me.ComboBox1.Text = "Code128C" Then
Encode = Code128.Encode.Code128C
Else
Encode = Code128.Encode.EAN128
End If
Dim imgTemp As System.Drawing.Bitmap = _Code.GetCodeImage(Me.TextBox1.Text, Encode)
Me.PictureBox1.Image = imgTemp
Exit Sub
E:
MsgBox(Err.Description)
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
On Error GoTo E
Dim _Code As Code128 = New Code128
_Code.ValueFont = New Font("宋体", 10)
_Code.Height = Me.TrackBar1.Value
_Code.Magnify = 2
Dim Encode As Code128.Encode
If Me.ComboBox1.Text = "Code128A" Then
Encode = Code128.Encode.Code128A
ElseIf Me.ComboBox1.Text = "Code128B" Then
Encode = Code128.Encode.Code128B
ElseIf Me.ComboBox1.Text = "Code128C" Then
Encode = Code128.Encode.Code128C
Else
Encode = Code128.Encode.EAN128
End If
Dim imgTemp As System.Drawing.Bitmap = _Code.GetCodeImage(Me.TextBox1.Text, Encode)
Me.PictureBox1.Image = imgTemp
Exit Sub
E:
MsgBox(Err.Description)
End Sub
End Class
【VB.net绘制code128条形码.rar】点击下载此文件
|
暂时没有评论
发表评论 - 不要忘了输入验证码哦! |