Search code examples
windows-mobilezebra-printerszpl

Unable to print Using Zebra iMZ320 using VB and CPCL


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


Solution

  • 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.