''' <summary>
''' Sendet die ZPL-Kommandos als Rohdaten an den Drucker
''' </summary>
''' <param name="ZPLCommands">ZPL-Kommandos als String</param>
''' <param name="PrinterName">Name des Druckers</param>
''' <returns>TRUE, wenn der Ausdruck erfolgreich abgeschlossen wurde</returns>
''' <remarks>14.12.2010</remarks>
Private Function SendZPLToPrinter(ByVal ZPLCommands As String, ByVal _
PrinterName As String) As Boolean
Dim bytes(ZPLCommands.Length - 1) As Byte 'Array, welches den
' ZPL-Command als ASCII-Zeichen speichert
Dim bSuccess As Boolean
Dim pUnmanagedBytes As IntPtr 'unmanaged pointer.
'=== ZPL-Command in ASCII-Zeichen-Array umwandeln ===
For i As Integer = 0 To ZPLCommands.Length - 1
bytes(i) = CByte(Asc(ZPLCommands.Chars(i)))
Next
' Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(ZPLCommands.Length)
' Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, ZPLCommands.Length)
' Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(PrinterName, pUnmanagedBytes, _
ZPLCommands.Length)
' Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes)
Return bSuccess
End Function
Private ValueList As New Dictionary(Of Integer, String)
Private lastZPLCommand As String
#End Region
#Region "Public Subs und Funktionen"
''' <summary>
''' Fügt ein Wert zur Fild/Value-Liste hinzu
''' </summary>
''' <param name="FieldNr">Feld-Nummer im Label</param>
''' <param name="Value">Einzufügender Text</param>
''' <remarks>14.12.2010</remarks>
Public Sub AddFieldValue(ByVal FieldNr As Integer, ByVal Value As String)
ValueList.Add(FieldNr, Value)
End Sub
''' <summary>
''' Löscht die bisher eingefügten Values
''' </summary>
''' <remarks>14.12.2010</remarks>
Public Sub ClearValues()
ValueList.Clear()
End Sub
''' <summary>
''' Gibt das zuvor mittels 'AddFieldValue' erstellte Label auf dem Drucker
' aus.
''' Das Label muss zuvor auf dem internen Speicher des Druckers abgelegt
' sein
''' </summary>
''' <param name="LabelName">Name unter welchem das 'Label' auf den
' Drucker abgelegt ist</param>
''' <param name="PrinterName">Nsme des Druckers</param>
''' <returns>TRUE, wenn der Ausdruck erfolgreich abgeschlossen wurde</returns>
''' <remarks>14.12.2010</remarks>
Public Function PrintLabel(ByVal LabelName As String, ByVal PrinterName As _
String) As Boolean
Dim ZPLCommand As String = ""
'=== Sequenz einleiten ===
ZPLCommand = "^XA"
'=== Einbinden Label-Name ===
If Not LabelName.EndsWith("ZPL") Then
LabelName &= ".ZPL" 'Endung Anfügen, falls nicht vorhanden
End If
ZPLCommand &= "^XFE:" & LabelName & "^FS"
'=== Einbinen der Werte ===
For Each item In ValueList
ZPLCommand &= "^FN" & item.Key.ToString & "^FD" & item.Value & "^FS"
Next
'=== ZPL-Befehl abschliessen ===
ZPLCommand &= "^XZ"
'=== Ausdruck starten ===
Dim bSuccess As Boolean
bSuccess = SendZPLToPrinter(ZPLCommand, PrinterName)
'=== Letztes Label puffern, Value List leeren ===
If bSuccess Then
lastZPLCommand = ZPLCommand
ValueList.Clear()
End If
Return bSuccess
End Function
''' <summary>
''' Gibt das zuletzt gedruckte Label nochmals aus
''' </summary>
''' <param name="PrinterName"></param>
''' <returns>TRUE, wenn der Ausdruck erfolgreich abgeschlossen wurde</returns>
''' <remarks>14.12.2010</remarks>
Public Function RePrint(ByVal PrinterName As String) As Boolean
'=== Ausdruck starten ===
If Not IsNothing(lastZPLCommand) AndAlso lastZPLCommand.StartsWith( _
"^XA") Then
Return SendZPLToPrinter(lastZPLCommand, PrinterName)
Else
Return False
End If
End Function
#End Region
End Class |