Projektdateien hinzufügen.
This commit is contained in:
146
Aviso/Barcode/Code128Content.vb
Normal file
146
Aviso/Barcode/Code128Content.vb
Normal file
@@ -0,0 +1,146 @@
|
||||
#Region " Class "
|
||||
|
||||
#Region " Enums "
|
||||
|
||||
Public Enum CodeSetAllowed
|
||||
CodeA
|
||||
CodeB
|
||||
CodeAorB
|
||||
End Enum
|
||||
|
||||
Public Enum CodeSet
|
||||
CodeA
|
||||
CodeB
|
||||
End Enum
|
||||
|
||||
#End Region
|
||||
|
||||
Public Class Code128Content
|
||||
Private mCodeList As Integer()
|
||||
|
||||
Public Sub New(ByVal AsciiData As String)
|
||||
mCodeList = StringToCode128(AsciiData)
|
||||
End Sub
|
||||
|
||||
Public ReadOnly Property Codes() As Integer()
|
||||
Get
|
||||
Return mCodeList
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private Function StringToCode128(ByVal AsciiData As String) As Integer()
|
||||
|
||||
Dim asciiBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(AsciiData)
|
||||
|
||||
Dim csa1 As CodeSetAllowed = If(asciiBytes.Length > 0, Code128Code.CodesetAllowedForChar(asciiBytes(0)), CodeSetAllowed.CodeAorB)
|
||||
Dim csa2 As CodeSetAllowed = If(asciiBytes.Length > 0, Code128Code.CodesetAllowedForChar(asciiBytes(1)), CodeSetAllowed.CodeAorB)
|
||||
Dim currcs As CodeSet = GetBestStartSet(csa1, csa2)
|
||||
|
||||
Dim codes As New List(Of Integer)(asciiBytes.Length + 3)
|
||||
codes.Add(Code128Code.StartCodeForCodeSet(currcs))
|
||||
|
||||
For i As Integer = 0 To asciiBytes.Length - 1
|
||||
Dim thischar As Integer = asciiBytes(i)
|
||||
Dim nextchar As Integer = If(asciiBytes.Length > (i + 1), asciiBytes(i + 1), -1)
|
||||
|
||||
codes.AddRange(Code128Code.CodesForChar(thischar, nextchar, currcs))
|
||||
Next
|
||||
|
||||
Dim checksum As Integer = CInt(codes(0))
|
||||
For i As Integer = 1 To codes.Count - 1
|
||||
checksum += i * CInt(codes(i))
|
||||
Next
|
||||
|
||||
codes.Add(checksum Mod 103)
|
||||
codes.Add(Code128Code.StopCode())
|
||||
|
||||
Return codes.ToArray
|
||||
End Function
|
||||
|
||||
Private Function GetBestStartSet(ByVal csa1 As CodeSetAllowed, ByVal csa2 As CodeSetAllowed) As CodeSet
|
||||
Dim vote As Integer = 0
|
||||
|
||||
vote += If((csa1 = CodeSetAllowed.CodeA), 1, 0)
|
||||
vote += If((csa1 = CodeSetAllowed.CodeB), -1, 0)
|
||||
vote += If((csa2 = CodeSetAllowed.CodeA), 1, 0)
|
||||
vote += If((csa2 = CodeSetAllowed.CodeB), -1, 0)
|
||||
|
||||
Return If((vote > 0), CodeSet.CodeA, CodeSet.CodeB)
|
||||
End Function
|
||||
End Class
|
||||
|
||||
Public NotInheritable Class Code128Code
|
||||
|
||||
#Region "Constants"
|
||||
|
||||
Private Const cSHIFT As Integer = 98
|
||||
Private Const cCODEA As Integer = 101
|
||||
Private Const cCODEB As Integer = 100
|
||||
|
||||
Private Const cSTARTA As Integer = 103
|
||||
Private Const cSTARTB As Integer = 104
|
||||
Private Const cSTOP As Integer = 106
|
||||
|
||||
#End Region
|
||||
|
||||
Public Shared Function CodesForChar(ByVal CharAscii As Integer, ByVal LookAheadAscii As Integer, ByRef CurrCodeSet As CodeSet) As Integer()
|
||||
Dim result As Integer()
|
||||
Dim shifter As Integer = -1
|
||||
|
||||
If Not CharCompatibleWithCodeset(CharAscii, CurrCodeSet) Then
|
||||
If (LookAheadAscii <> -1) AndAlso Not CharCompatibleWithCodeset(LookAheadAscii, CurrCodeSet) Then
|
||||
Select Case CurrCodeSet
|
||||
Case CodeSet.CodeA
|
||||
shifter = cCODEB
|
||||
CurrCodeSet = CodeSet.CodeB
|
||||
Exit Select
|
||||
Case CodeSet.CodeB
|
||||
shifter = cCODEA
|
||||
CurrCodeSet = CodeSet.CodeA
|
||||
Exit Select
|
||||
End Select
|
||||
Else
|
||||
shifter = cSHIFT
|
||||
End If
|
||||
End If
|
||||
|
||||
If shifter <> -1 Then
|
||||
result = New Integer(1) {}
|
||||
result(0) = shifter
|
||||
result(1) = CodeValueForChar(CharAscii)
|
||||
Else
|
||||
result = New Integer(0) {}
|
||||
result(0) = CodeValueForChar(CharAscii)
|
||||
End If
|
||||
|
||||
Return result
|
||||
End Function
|
||||
|
||||
Public Shared Function CodesetAllowedForChar(ByVal CharAscii As Integer) As CodeSetAllowed
|
||||
If CharAscii >= 32 AndAlso CharAscii <= 95 Then
|
||||
Return CodeSetAllowed.CodeAorB
|
||||
Else
|
||||
Return If((CharAscii < 32), CodeSetAllowed.CodeA, CodeSetAllowed.CodeB)
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public Shared Function CharCompatibleWithCodeset(ByVal CharAscii As Integer, ByVal currcs As CodeSet) As Boolean
|
||||
Dim csa As CodeSetAllowed = CodesetAllowedForChar(CharAscii)
|
||||
Return csa = CodeSetAllowed.CodeAorB OrElse (csa = CodeSetAllowed.CodeA AndAlso currcs = CodeSet.CodeA) OrElse (csa = CodeSetAllowed.CodeB AndAlso currcs = CodeSet.CodeB)
|
||||
End Function
|
||||
|
||||
Public Shared Function CodeValueForChar(ByVal CharAscii As Integer) As Integer
|
||||
Return If((CharAscii >= 32), CharAscii - 32, CharAscii + 64)
|
||||
End Function
|
||||
|
||||
Public Shared Function StartCodeForCodeSet(ByVal cs As CodeSet) As Integer
|
||||
Return If(cs = CodeSet.CodeA, cSTARTA, cSTARTB)
|
||||
End Function
|
||||
|
||||
Public Shared Function StopCode() As Integer
|
||||
Return cSTOP
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
#End Region
|
||||
180
Aviso/Barcode/Code128Rendering.vb
Normal file
180
Aviso/Barcode/Code128Rendering.vb
Normal file
@@ -0,0 +1,180 @@
|
||||
Imports System.Drawing
|
||||
Imports System.Diagnostics
|
||||
|
||||
Public NotInheritable Class Code128Rendering
|
||||
|
||||
#Region "Code patterns"
|
||||
Private Shared ReadOnly cPatterns As Integer(,) = {{2, 1, 2, 2, 2, 2, _
|
||||
0, 0}, {2, 2, 2, 1, 2, 2, _
|
||||
0, 0}, {2, 2, 2, 2, 2, 1, _
|
||||
0, 0}, {1, 2, 1, 2, 2, 3, _
|
||||
0, 0}, {1, 2, 1, 3, 2, 2, _
|
||||
0, 0}, {1, 3, 1, 2, 2, 2, _
|
||||
0, 0}, _
|
||||
{1, 2, 2, 2, 1, 3, _
|
||||
0, 0}, {1, 2, 2, 3, 1, 2, _
|
||||
0, 0}, {1, 3, 2, 2, 1, 2, _
|
||||
0, 0}, {2, 2, 1, 2, 1, 3, _
|
||||
0, 0}, {2, 2, 1, 3, 1, 2, _
|
||||
0, 0}, {2, 3, 1, 2, 1, 2, _
|
||||
0, 0}, _
|
||||
{1, 1, 2, 2, 3, 2, _
|
||||
0, 0}, {1, 2, 2, 1, 3, 2, _
|
||||
0, 0}, {1, 2, 2, 2, 3, 1, _
|
||||
0, 0}, {1, 1, 3, 2, 2, 2, _
|
||||
0, 0}, {1, 2, 3, 1, 2, 2, _
|
||||
0, 0}, {1, 2, 3, 2, 2, 1, _
|
||||
0, 0}, _
|
||||
{2, 2, 3, 2, 1, 1, _
|
||||
0, 0}, {2, 2, 1, 1, 3, 2, _
|
||||
0, 0}, {2, 2, 1, 2, 3, 1, _
|
||||
0, 0}, {2, 1, 3, 2, 1, 2, _
|
||||
0, 0}, {2, 2, 3, 1, 1, 2, _
|
||||
0, 0}, {3, 1, 2, 1, 3, 1, _
|
||||
0, 0}, _
|
||||
{3, 1, 1, 2, 2, 2, _
|
||||
0, 0}, {3, 2, 1, 1, 2, 2, _
|
||||
0, 0}, {3, 2, 1, 2, 2, 1, _
|
||||
0, 0}, {3, 1, 2, 2, 1, 2, _
|
||||
0, 0}, {3, 2, 2, 1, 1, 2, _
|
||||
0, 0}, {3, 2, 2, 2, 1, 1, _
|
||||
0, 0}, _
|
||||
{2, 1, 2, 1, 2, 3, _
|
||||
0, 0}, {2, 1, 2, 3, 2, 1, _
|
||||
0, 0}, {2, 3, 2, 1, 2, 1, _
|
||||
0, 0}, {1, 1, 1, 3, 2, 3, _
|
||||
0, 0}, {1, 3, 1, 1, 2, 3, _
|
||||
0, 0}, {1, 3, 1, 3, 2, 1, _
|
||||
0, 0}, _
|
||||
{1, 1, 2, 3, 1, 3, _
|
||||
0, 0}, {1, 3, 2, 1, 1, 3, _
|
||||
0, 0}, {1, 3, 2, 3, 1, 1, _
|
||||
0, 0}, {2, 1, 1, 3, 1, 3, _
|
||||
0, 0}, {2, 3, 1, 1, 1, 3, _
|
||||
0, 0}, {2, 3, 1, 3, 1, 1, _
|
||||
0, 0}, _
|
||||
{1, 1, 2, 1, 3, 3, _
|
||||
0, 0}, {1, 1, 2, 3, 3, 1, _
|
||||
0, 0}, {1, 3, 2, 1, 3, 1, _
|
||||
0, 0}, {1, 1, 3, 1, 2, 3, _
|
||||
0, 0}, {1, 1, 3, 3, 2, 1, _
|
||||
0, 0}, {1, 3, 3, 1, 2, 1, _
|
||||
0, 0}, _
|
||||
{3, 1, 3, 1, 2, 1, _
|
||||
0, 0}, {2, 1, 1, 3, 3, 1, _
|
||||
0, 0}, {2, 3, 1, 1, 3, 1, _
|
||||
0, 0}, {2, 1, 3, 1, 1, 3, _
|
||||
0, 0}, {2, 1, 3, 3, 1, 1, _
|
||||
0, 0}, {2, 1, 3, 1, 3, 1, _
|
||||
0, 0}, _
|
||||
{3, 1, 1, 1, 2, 3, _
|
||||
0, 0}, {3, 1, 1, 3, 2, 1, _
|
||||
0, 0}, {3, 3, 1, 1, 2, 1, _
|
||||
0, 0}, {3, 1, 2, 1, 1, 3, _
|
||||
0, 0}, {3, 1, 2, 3, 1, 1, _
|
||||
0, 0}, {3, 3, 2, 1, 1, 1, _
|
||||
0, 0}, _
|
||||
{3, 1, 4, 1, 1, 1, _
|
||||
0, 0}, {2, 2, 1, 4, 1, 1, _
|
||||
0, 0}, {4, 3, 1, 1, 1, 1, _
|
||||
0, 0}, {1, 1, 1, 2, 2, 4, _
|
||||
0, 0}, {1, 1, 1, 4, 2, 2, _
|
||||
0, 0}, {1, 2, 1, 1, 2, 4, _
|
||||
0, 0}, _
|
||||
{1, 2, 1, 4, 2, 1, _
|
||||
0, 0}, {1, 4, 1, 1, 2, 2, _
|
||||
0, 0}, {1, 4, 1, 2, 2, 1, _
|
||||
0, 0}, {1, 1, 2, 2, 1, 4, _
|
||||
0, 0}, {1, 1, 2, 4, 1, 2, _
|
||||
0, 0}, {1, 2, 2, 1, 1, 4, _
|
||||
0, 0}, _
|
||||
{1, 2, 2, 4, 1, 1, _
|
||||
0, 0}, {1, 4, 2, 1, 1, 2, _
|
||||
0, 0}, {1, 4, 2, 2, 1, 1, _
|
||||
0, 0}, {2, 4, 1, 2, 1, 1, _
|
||||
0, 0}, {2, 2, 1, 1, 1, 4, _
|
||||
0, 0}, {4, 1, 3, 1, 1, 1, _
|
||||
0, 0}, _
|
||||
{2, 4, 1, 1, 1, 2, _
|
||||
0, 0}, {1, 3, 4, 1, 1, 1, _
|
||||
0, 0}, {1, 1, 1, 2, 4, 2, _
|
||||
0, 0}, {1, 2, 1, 1, 4, 2, _
|
||||
0, 0}, {1, 2, 1, 2, 4, 1, _
|
||||
0, 0}, {1, 1, 4, 2, 1, 2, _
|
||||
0, 0}, _
|
||||
{1, 2, 4, 1, 1, 2, _
|
||||
0, 0}, {1, 2, 4, 2, 1, 1, _
|
||||
0, 0}, {4, 1, 1, 2, 1, 2, _
|
||||
0, 0}, {4, 2, 1, 1, 1, 2, _
|
||||
0, 0}, {4, 2, 1, 2, 1, 1, _
|
||||
0, 0}, {2, 1, 2, 1, 4, 1, _
|
||||
0, 0}, _
|
||||
{2, 1, 4, 1, 2, 1, _
|
||||
0, 0}, {4, 1, 2, 1, 2, 1, _
|
||||
0, 0}, {1, 1, 1, 1, 4, 3, _
|
||||
0, 0}, {1, 1, 1, 3, 4, 1, _
|
||||
0, 0}, {1, 3, 1, 1, 4, 1, _
|
||||
0, 0}, {1, 1, 4, 1, 1, 3, _
|
||||
0, 0}, _
|
||||
{1, 1, 4, 3, 1, 1, _
|
||||
0, 0}, {4, 1, 1, 1, 1, 3, _
|
||||
0, 0}, {4, 1, 1, 3, 1, 1, _
|
||||
0, 0}, {1, 1, 3, 1, 4, 1, _
|
||||
0, 0}, {1, 1, 4, 1, 3, 1, _
|
||||
0, 0}, {3, 1, 1, 1, 4, 1, _
|
||||
0, 0}, _
|
||||
{4, 1, 1, 1, 3, 1, _
|
||||
0, 0}, {2, 1, 1, 4, 1, 2, _
|
||||
0, 0}, {2, 1, 1, 2, 1, 4, _
|
||||
0, 0}, {2, 1, 1, 2, 3, 2, _
|
||||
0, 0}, {2, 3, 3, 1, 1, 1, _
|
||||
2, 0}}
|
||||
|
||||
#End Region
|
||||
|
||||
Private Const cQuietWidth As Integer = 10
|
||||
|
||||
Public Shared Function MakeBarcodeImage(ByVal InputData As String, ByVal BarWeight As Double, ByVal AddQuietZone As Boolean, Optional heightOpt As Object = Nothing) As Image
|
||||
|
||||
Dim content As New Code128Content(InputData)
|
||||
Dim codes As Integer() = content.Codes
|
||||
Dim width As Integer, height As Integer
|
||||
width = ((codes.Length - 3) * 11 + 35) * BarWeight
|
||||
If heightOpt IsNot Nothing Then
|
||||
height = CInt(heightOpt)
|
||||
Else
|
||||
height = Convert.ToInt32(System.Math.Ceiling(Convert.ToSingle(width) * 0.15F))
|
||||
End If
|
||||
|
||||
If AddQuietZone Then
|
||||
width += 2 * cQuietWidth * BarWeight
|
||||
End If
|
||||
|
||||
Dim myimg As Image = New System.Drawing.Bitmap(width, height)
|
||||
Using gr As Graphics = Graphics.FromImage(myimg)
|
||||
|
||||
gr.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height)
|
||||
|
||||
Dim cursor As Integer = If(AddQuietZone, cQuietWidth * BarWeight, 0)
|
||||
|
||||
For codeidx As Integer = 0 To codes.Length - 1
|
||||
Dim code As Integer = codes(codeidx)
|
||||
|
||||
For bar As Integer = 0 To 7 Step 2
|
||||
Dim barwidth As Integer = cPatterns(code, bar) * BarWeight
|
||||
Dim spcwidth As Integer = cPatterns(code, bar + 1) * BarWeight
|
||||
|
||||
If barwidth > 0 Then
|
||||
gr.FillRectangle(System.Drawing.Brushes.Black, cursor, 0, barwidth, height)
|
||||
End If
|
||||
|
||||
cursor += (barwidth + spcwidth)
|
||||
Next
|
||||
Next
|
||||
End Using
|
||||
|
||||
Return myimg
|
||||
|
||||
End Function
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user