Question

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

Was it helpful?

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.

OTHER TIPS

I assume the big graphics fails cause the first data row is incomplete:

 cpclData = cpclData & "EG 10 80 10 10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"

The "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" does not compute to an even number of bytes!

The EG command syntax:
Command width height x y data

widthand height must be computed as dots and the data must be devidable by 8.

EG 10

specifies 0x10 * 8 dots = 128dots per line

EG 10 80

defines a graphic 128 dots wide and 128 (0x80) dots in height.

So you have to send 8 bytes by 128 lines, but your data does not even fill 100 lines of 8 bytes!

see also CPCL EG Command

=============================== the second data post also only contains 100 dot lines whereas you declare you will send 128 dot lines:

    EG 10 80 10 10
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFF7FFF
FFFFFFFF800FFF80
01FFFFFFFFFE0001
FC00007FFFFFFFF8
00007000001FFFFF
FFF01F80703FF80F
FFFFFFE07FF800FF
FE07FFFFFFC1FFFC
01FFFF87FFFFFFC3
FFFC01FFFF83FFFF
FF87FFFC01FFFFC3
FFFFFF87FFFC11FF
FFC3FFFFFF87FFFC
39FFFFC1FFFFFF87
FFFC7FFFFFC1FFFF
FF87FFFCFFFFFFC1
FFFFFF87FFFFFFFF
FFC1FFFFFFC3FFFF
FFFFFFC3FFFFFFC1
FFFFFFFFFF83FFFF
FFE1FFFFFFFFFF07
FFFFFFE1FFFFFFFF
FE07FFFFFFE1FFFF
FFFFFC0FFFFFFFE1
FFFFCF0FF81FFFFF
FFC3FFFF8001C03F
FFFFFFC3FFCF8000
00FFFFFFFFC1FF87
C04003FFFFFFFFE0
FF07FFF81FFFFFFF
FFE0780FFFFC3FFF
FFFFFFF0001FFFF8
3FFFFFFFFFFC003F
FFF87FFFFFFFFFFF
803FFFF87FFFFFFF
FFFFFC1FFFF87FFF
FFFFFFFFFC1FFFF0
7FFFFFFFFFFFFE0F
FFF0FFFFFFFFFFFF
FE0FC020FFFFFFFF
FFFFFF000000FFFF
FFFFFFFFFF000001
FFFFFFFFFFFFFF80
01C1FFFFFFFFFFFF
FF83E3F9FFFFFFFF
FFFFFFCFE3FFFFFF
FFFFFFFFFFF9C39F
FFFFFFFFFFFFFFF8
C70FFFFFFFFFFFFF
FFF9879FFFFFFFFF
FFFFFFFF8FFFFFFF
FFFFFFFFF7FF807F
FFFFFFFFFFFFEFFF
00FFF7FFFFFFFFFF
CFFF03FFF3FFFFFF
FFFFCFFFFFFFF3FF
FFFFFFFFCFFC001F
F3FFFFFFFFFFC7F8
000FE3FFFFFFFFFF
C1F0000783FFFFFF
FFFFC000FF0003FF
FFFFFFFFE001FF80
07FFFFFFFFFFF003
FFC00FFFFF3FFFFF
FC07FFF03FFFFE1F
FF7FFFFFFFFFFFFF
C61FFE0FFFFFFFFF
FFFC023FFE01FFFF
FFFFFFF803FFFF00
3FFFFFFFFF0C0FFF
FF800FFFFFFFF00C
1FFFFF02041FFC7F
E00C3FFFFF070000
E001E0183FFFFE07
0400C001F4183FFF
FE000F008001FE00
1FFFFE001F0783C1
FE000FFFFC083F07
83C1FF0003FFC01C
1E0F07E3FF03007F
C01E1E0F0700FF83
803FE00C1E0F0600
7F80C07FF0001E0F
06007F8043FFFF00
3E0F83C1FF007FFF
FFE0700F83C1FE00
FFFFFFFFE0038001
FF0FFFFFFFFFF003
C001FFFFFFFFFFFF
FE03E001FFFFFFFF
FFFFFFFFFCFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF

Try with using the matching EG 10 64 10 10 .

Why did might print on other printers? Possibly the other printers interpreter is not that strict. Or it just uses following data to fill up to 128 lines.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top