Creazione classe stampa
This commit is contained in:
+197
@@ -0,0 +1,197 @@
|
||||
Imports System.IO
|
||||
Imports System.Text
|
||||
Imports System.Threading.Tasks
|
||||
Imports Zebra.Sdk.Comm
|
||||
Imports Zebra.Sdk.Printer
|
||||
Imports Zebra.Sdk.Printer.Discovery
|
||||
|
||||
Class ZebraPrinter
|
||||
|
||||
Private m_FileLog As String
|
||||
Private m_Values As New Dictionary(Of String, String)
|
||||
Private m_LabelBytes As Byte()
|
||||
Private m_printerConnection As Connection = Nothing
|
||||
Private m_sDataRoot As String
|
||||
Private m_Waiting As Boolean = True
|
||||
|
||||
' dichiarazione funzione per lettura file ini
|
||||
Private Declare Auto Function GetPrivateProfileString Lib "kernel32" (
|
||||
ByVal lpAppName As String,
|
||||
ByVal lpKeyName As String,
|
||||
ByVal lpDefault As String,
|
||||
ByVal lpReturnedString As StringBuilder,
|
||||
ByVal nSize As Integer,
|
||||
ByVal lpFileName As String) As Integer
|
||||
|
||||
|
||||
' inizilizzo il file di log inserendo la data dell'esecuzione
|
||||
Sub InitLog()
|
||||
' Impostazione path radice per i dati
|
||||
m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory
|
||||
Dim sb = New StringBuilder(500)
|
||||
If GetPrivateProfileString("Data", "DataRoot", "", sb, sb.Capacity, m_sDataRoot & "DataRoot.ini") = 0 Then
|
||||
m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory
|
||||
Else
|
||||
m_sDataRoot = sb.ToString
|
||||
End If
|
||||
m_FileLog = m_sDataRoot & "\ZebraPrinterUtilityLog.txt"
|
||||
If Not File.Exists(m_FileLog) Then
|
||||
Try
|
||||
File.Create(m_FileLog).Close()
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
End If
|
||||
Try
|
||||
Dim sMessage As StreamWriter = File.AppendText(m_FileLog)
|
||||
sMessage.WriteLine(DateTime.Now.ToString)
|
||||
sMessage.Close()
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
|
||||
End Sub
|
||||
|
||||
' Funzione per scrivere nel file di Log
|
||||
Sub EmitLog(sLine As String)
|
||||
Dim sMessage As StreamWriter = File.AppendText(m_FileLog)
|
||||
sMessage.WriteLine(sLine)
|
||||
sMessage.Close()
|
||||
End Sub
|
||||
|
||||
' collego la stampante
|
||||
Friend Function ConnectPrinter() As Boolean
|
||||
Try
|
||||
Dim discoPrinters As List(Of DiscoveredPrinterDriver) = UsbDiscoverer.GetZebraDriverPrinters()
|
||||
m_printerConnection = New DriverPrinterConnection(discoPrinters(0).PrinterName)
|
||||
Return True
|
||||
Catch ex As ConnectionException
|
||||
EmitLog("Printer connection error: " & ex.Message)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
' creo e stampo l'etichetta (ricevo il nome del template da usare)
|
||||
Public Async Sub Print(FilePath As String)
|
||||
Await Task.Run(Async Function()
|
||||
|
||||
Try
|
||||
' Connecting...
|
||||
m_printerConnection.Open()
|
||||
EmitLog("Connessione stampante: APERTA")
|
||||
' Sending Data...
|
||||
Dim LabelFile As String = File.ReadAllText(FilePath)
|
||||
For Each Variable In m_Values
|
||||
LabelFile = LabelFile.Replace(Variable.Key, Variable.Value)
|
||||
Next
|
||||
Dim LabelBytes As Byte() = Encoding.UTF8.GetBytes(LabelFile)
|
||||
Await Task.Delay(200)
|
||||
' stampo etichetta
|
||||
'm_printerConnection.Write(LabelBytes)
|
||||
m_Waiting = False
|
||||
EmitLog("Etichetta pronta")
|
||||
Catch __unusedConnectionException1__ As ConnectionException
|
||||
EmitLog(__unusedConnectionException1__.ToString)
|
||||
' Communications Error
|
||||
Catch __unusedZebraPrinterLanguageUnknownException2__ As ZebraPrinterLanguageUnknownException
|
||||
EmitLog(__unusedZebraPrinterLanguageUnknownException2__.ToString)
|
||||
End Try
|
||||
|
||||
' Chiudo la connessione
|
||||
Try
|
||||
'Threading.Thread.Sleep(500)
|
||||
Threading.Thread.Sleep(200)
|
||||
' Disconnecting...
|
||||
If m_printerConnection IsNot Nothing Then
|
||||
m_printerConnection.Close()
|
||||
EmitLog("Connessione stampante: CHIUSA")
|
||||
Threading.Thread.Sleep(1000)
|
||||
End If
|
||||
' Not Connected
|
||||
Catch __unusedConnectionException1__ As ConnectionException
|
||||
EmitLog(__unusedConnectionException1__.ToString)
|
||||
End Try
|
||||
|
||||
End Function)
|
||||
End Sub
|
||||
|
||||
|
||||
' Lettura file ini
|
||||
Private Function ReadValue(FilePath As String) As Boolean
|
||||
' verifico che il file esiste
|
||||
If Not File.Exists(FilePath) Then
|
||||
EmitLog("File '" & FilePath & "' non esiste.")
|
||||
Return False
|
||||
End If
|
||||
|
||||
Dim sb = New StringBuilder(500)
|
||||
Dim Index As Integer = 1
|
||||
Dim nResult As Integer = -1
|
||||
' leggo l'elenco delle variabili
|
||||
While nResult <> 0
|
||||
Try
|
||||
nResult = GetPrivateProfileString("Main", "Var" & Index.ToString, "", sb, sb.Capacity, FilePath)
|
||||
Catch ex As Exception
|
||||
EmitLog(ex.ToString)
|
||||
Index = Index + 1
|
||||
Continue While
|
||||
End Try
|
||||
Dim sItems As String() = sb.ToString.Split(","c)
|
||||
If sItems.Count = 2 Then
|
||||
m_Values.Add(sItems(0).Trim, sItems(1).Trim)
|
||||
End If
|
||||
Index = Index + 1
|
||||
End While
|
||||
|
||||
EmitLog("Dati caricati")
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Sub New(args As String())
|
||||
|
||||
InitLog()
|
||||
ConnectPrinter()
|
||||
|
||||
' verifico che il numero di argomenti sia superiore a 2 (migliorare l'interpretazione dell'errore)
|
||||
If args.Length < 2 Then
|
||||
EmitLog("Non sono stati esplicictati tutti i file")
|
||||
Return
|
||||
End If
|
||||
|
||||
EmitLog("File template: " & args(0))
|
||||
' verifico che l'estensione del file sia corretta
|
||||
If Path.GetExtension(args(0)) <> ".prn" Then
|
||||
EmitLog("Estensione file template non corretta, diversa da .prn")
|
||||
Return
|
||||
End If
|
||||
' verifico che il file esiste
|
||||
If Not File.Exists(args(0)) Then
|
||||
EmitLog("File '" & args(0) & "' non esiste.")
|
||||
End If
|
||||
|
||||
EmitLog("File dati: " & args(1))
|
||||
' verifico che l'estensione del file sia corretta
|
||||
If Path.GetExtension(args(1)) <> ".ini" Then
|
||||
EmitLog("Estensione file dati non corretta, diversa da .ini")
|
||||
Return
|
||||
End If
|
||||
|
||||
' leggo l'elenco dei dati da stampare
|
||||
If Not ReadValue(args(1)) Then Return
|
||||
' stampo etichetta
|
||||
Print(args(0))
|
||||
|
||||
' metto il programmma in attesa
|
||||
Dim nCiclo As Integer = 0
|
||||
While m_Waiting And nCiclo < 6
|
||||
Threading.Thread.Sleep(1000)
|
||||
nCiclo += 1
|
||||
End While
|
||||
End Sub
|
||||
|
||||
|
||||
End Class
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user