我在Windows移动设备上使用Zebra iMZ320打印机和vb.net。 用于MZ320的代码。
我正在尝试使用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
结束功能
这会产生一个80px x 80px位图的输出 将CPCL代码发送到打印机时,指示链接的蓝灯亮起但没有打印任何内容。
我可以打印较小的图形,因为你说EG语句有问题或者sting本身太大而无法通过蓝牙发送。
! 0 200 200 300 1 TEXT 4 0 30 40这是一次CPCL测试。 EG 10 80 10 10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF800FFF8001FFFFFFFFFE0001FC00007FFFFFFFF800007000001FFFFFFFF01F80703FF80FFFFFFFE07FF800FFFE07FFFFFFC1FFFC01FFFF87FFFFFFC3FFFC01FFFF83FFFFFF87FFFC01FFFFC3FFFFFF87FFFC11FFFFC3FFFFFF87FFFC39FFFFC1FFFFFF87FFFC7FFFFFC1FFFFFF87FFFCFFFFFFC1FFFFFF87FFFFFFFFFFC1FFFFFFC3FFFFFFFFFFC3FFFFFFC1FFFFFFFFFF83FFFFFFE1FFFFFFFFFF07FFFFFFE1FFFFFFFFFE07FFFFFFE1FFFFFFFFFC0FFFFFFFE1FFFFCF0FF81FFFFFFFC3FFFF8001C03FFFFFFFC3FFCF800000FFFFFFFFC1FF87C04003FFFFFFFFE0FF07FFF81FFFFFFFFFE0780FFFFC3FFFFFFFFFF0001FFFF83FFFFFFFFFFC003FFFF87FFFFFFFFFFF803FFFF87FFFFFFFFFFFFC1FFFF87FFFFFFFFFFFFC1FFFF07FFFFFFFFFFFFE0FFFF0FFFFFFFFFFFFFE0FC020FFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000001FFFFFFFFFFFFFF8001C1FFFFFFFFFFFFFF83E3F9FFFFFFFFFFFFFFCFE3FFFFFFFFFFFFFFFFF9C39FFFFFFFFFFFFFFFF8C70FFFFFFFFFFFFFFFF9879FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF7FF807FFFFFFFFFFFFFEFFF00FFF7FFFFFFFFFFCFFF03FFF3FFFFFFFFFFCFFFFFFFF3FFFFFFFFFFC FFC001FF3FFFFFFFFFFC7F8000FE3FFFFFFFFFFC1F0000783FFFFFFFFFFC000FF0003FFFFFFFFFFE001FF8007FFFFFFFFFFF003FFC00FFFFF3FFFFFFC07FFF03FFFFE1FFF7FFFFFFFFFFFFFC61FFE0FFFFFFFFFFFFC023FFE01FFFFFFFFFFF803FFFF003FFFFFFFFF0C0FFFFF800FFFFFFFF00C1FFFFF02041FFC7FE00C3FFFFF070000E001E0183FFFFE070400C001F4183FFFFE000F008001FE001FFFFE001F0783C1FE000FFFFC083F0783C1FF0003FFC01C1E0F07E3FF03007FC01E1E0F0700FF83803FE00C1E0F06007F80C07FF0001E0F06007F8043FFFF003E0F83C1FF007FFFFFE0700F83C1FE00FFFFFFFFE0038001FF0FFFFFFFFFF003C001FFFFFFFFFFFFFE03E001FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 形成 PRINT
答案 0 :(得分:0)
我认为大图形失败导致第一个数据行不完整:
cpclData = cpclData & "EG 10 80 10 10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF”不会计算为偶数个字节!
The EG command syntax:
Command width height x y data
widthand height必须以点数计算,数据必须可以偏离8。
EG 10
指定每行0x10 * 8点= 128点
EG 10 80
定义了一个128点宽的图形和128(0x80)点的高度。
所以你必须通过128行发送8个字节,但你的数据甚至不能填充100行的8个字节!
=============================== 第二个数据文章也只包含100个点线,而你声明你将发送128个点线:
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
尝试使用匹配的EG 10 64 10 10。
为什么可能会在其他打印机上打印?可能其他打印机解释器并不严格。或者它只使用以下数据来填充多达128行。
答案 1 :(得分:0)
这些数据有多大? ZebraPrinterConnection.write()
方法只对低级别流代码执行passthru。通常,蓝牙缓冲区小于TCP或USB缓冲区,因此您不希望它们超载。我建议用较小的块(1024字节左右)分块数据,并在写入之间等待100ms。