I am using a Zebra iMZ320 printer and vb.net on a windows mobile device. The code used to work on the MZ320.
I am trying to print a graphic using CPCL.
Private Sub Print_Label()
Try
Dim zebraPrinterConnection As ZebraPrinterConnection = New BluetoothPrinterConnection(MyMacAddress)
zebraPrinterConnection.Open()
Dim printer As ZebraPrinter = ZebraPrinterFactory.GetInstance(zebraPrinterConnection)
cpclData = ""
cpclData = cpclData & "! 0 200 200 300 1" & vbCr & vbLf
cpclData = cpclData & "TEXT 4 0 30 40 This is a CPCL test." & vbCr & vbLf
DrawLogoBitmap(10, 10)
cpclData = cpclData & vbCr & vbLf
cpclData = cpclData & "FORM" & vbCr & vbLf
cpclData = cpclData & "PRINT" & vbCr & vbLf
txt_TestPrint.Text = cpclData
Debug_Output()
' Send the data to printer as a byte array.
zebraPrinterConnection.Write(Encoding.[Default].GetBytes(cpclData))
Thread.Sleep(500)
zebraPrinterConnection.Close()
Catch e As ZebraPrinterConnectionException
Console.Write(e.StackTrace)
End Try
End Sub
Public Sub DrawLogoBitmap(ByVal xPosition As Integer, ByVal yPosition As Integer)
Try
Dim bmp As Bitmap
bmp = New System.Drawing.Bitmap(GetLogo)
If bmp Is Nothing Then
Throw New ArgumentNullException("bmp")
End If
'Make sure the width is divisible by 8
Dim loopWidth As Integer = 8 - (bmp.Width Mod 8)
If loopWidth = 8 Then
loopWidth = bmp.Width
Else
loopWidth += bmp.Width
End If
cpclData = cpclData & (String.Format("EG {0} {1} {2} {3} ", loopWidth / 8, bmp.Height, xPosition, yPosition))
For y As Integer = 0 To bmp.Height - 1
Dim bit As Integer = 128
Dim currentValue As Integer = 0
For x As Integer = 0 To loopWidth - 1
Dim intensity As Integer
If x < bmp.Width Then
Dim color As Color = bmp.GetPixel(x, y)
Dim MyR As Integer = color.R
Dim MyG As Integer = color.G
Dim MyB As Integer = color.B
intensity = 255 - ((MyR + MyG + MyB) / 3)
Else
intensity = 0
End If
If intensity >= 128 Then
currentValue = currentValue Or bit
End If
bit = bit >> 1
If bit = 0 Then
cpclData = cpclData & (currentValue.ToString("X2"))
bit = 128
currentValue = 0
End If
'x
Next
Next
'y
Catch ex As Exception
MsgBox("Error - Creating Logo" & vbCrLf & Err.Number & " " & Err.Description, MsgBoxStyle.Critical, "Database Error")
End Try
End Sub
Public Function GetLogo() As String
Try
Return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) & "\logo.bmp"
Catch ex As Exception
MsgBox("Error - Locating Logo" & vbCrLf & Err.Number & " " & Err.Description, MsgBoxStyle.Critical, "Image Error")
Return 0
End Try
End Function
This produces an output below for a 80px x 80px bitmap When sending the CPCL code to the printer the blue light indicating a link has been made lights up but nothing is printed.
I can print smaller graphics, so as you say there is either something wrong with the EG statement or the sting itself is too big to send via Bluetooth.
! 0 200 200 300 1 TEXT 4 0 30 40 This is a CPCL test. EG 10 80 10 10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF800FFF8001FFFFFFFFFE0001FC00007FFFFFFFF800007000001FFFFFFFF01F80703FF80FFFFFFFE07FF800FFFE07FFFFFFC1FFFC01FFFF87FFFFFFC3FFFC01FFFF83FFFFFF87FFFC01FFFFC3FFFFFF87FFFC11FFFFC3FFFFFF87FFFC39FFFFC1FFFFFF87FFFC7FFFFFC1FFFFFF87FFFCFFFFFFC1FFFFFF87FFFFFFFFFFC1FFFFFFC3FFFFFFFFFFC3FFFFFFC1FFFFFFFFFF83FFFFFFE1FFFFFFFFFF07FFFFFFE1FFFFFFFFFE07FFFFFFE1FFFFFFFFFC0FFFFFFFE1FFFFCF0FF81FFFFFFFC3FFFF8001C03FFFFFFFC3FFCF800000FFFFFFFFC1FF87C04003FFFFFFFFE0FF07FFF81FFFFFFFFFE0780FFFFC3FFFFFFFFFF0001FFFF83FFFFFFFFFFC003FFFF87FFFFFFFFFFF803FFFF87FFFFFFFFFFFFC1FFFF87FFFFFFFFFFFFC1FFFF07FFFFFFFFFFFFE0FFFF0FFFFFFFFFFFFFE0FC020FFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000001FFFFFFFFFFFFFF8001C1FFFFFFFFFFFFFF83E3F9FFFFFFFFFFFFFFCFE3FFFFFFFFFFFFFFFFF9C39FFFFFFFFFFFFFFFF8C70FFFFFFFFFFFFFFFF9879FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF7FF807FFFFFFFFFFFFFEFFF00FFF7FFFFFFFFFFCFFF03FFF3FFFFFFFFFFCFFFFFFFF3FFFFFFFFFFCFFC001FF3FFFFFFFFFFC7F8000FE3FFFFFFFFFFC1F0000783FFFFFFFFFFC000FF0003FFFFFFFFFFE001FF8007FFFFFFFFFFF003FFC00FFFFF3FFFFFFC07FFF03FFFFE1FFF7FFFFFFFFFFFFFC61FFE0FFFFFFFFFFFFC023FFE01FFFFFFFFFFF803FFFF003FFFFFFFFF0C0FFFFF800FFFFFFFF00C1FFFFF02041FFC7FE00C3FFFFF070000E001E0183FFFFE070400C001F4183FFFFE000F008001FE001FFFFE001F0783C1FE000FFFFC083F0783C1FF0003FFC01C1E0F07E3FF03007FC01E1E0F0700FF83803FE00C1E0F06007F80C07FF0001E0F06007F8043FFFF003E0F83C1FF007FFFFFE0700F83C1FE00FFFFFFFFE0038001FF0FFFFFFFFFF003C001FFFFFFFFFFFFFE03E001FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FORM PRINT
How big is that data? The ZebraPrinterConnection.write()
method just does a passthru to the low level stream code. Normally, Bluetooth buffers are smaller than TCP or USB buffers so you don't want to overload them. I would suggest chunking out your data in smaller chunks (1024 bytes or so) and waiting 100ms between writes.