【问题标题】:Unable to print Using Zebra iMZ320 using VB and CPCL无法使用 VB 和 CPCL 使用 Zebra iMZ320 进行打印
【发布时间】:2013-06-28 03:40:27
【问题描述】:

我在 Windows 移动设备上使用 Zebra iMZ320 打印机和 vb.net。 用于 MZ320 的代码。

我正在尝试使用 CPCL 打印图形。

私有子 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

结束子

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

结束子

公共函数 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 声明有问题,或者刺痛本身太大而无法通过蓝牙发送。

! 0 200 200 300 1 TEXT 4 0 30 40 这是一个 CPCL 测试。 EG 10 80 10 10 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF800FFF8001FFFFFFFFFE0001FC00007FFFFFFFF800007000001FFFFFFFF01F80703FF80FFFFFFFE07FF800FFFE07FFFFFFC1FFFC01FFFF87FFFFFFC3FFFC01FFFF83FFFFFF87FFFC01FFFFC3FFFFFF87FFFC11FFFFC3FFFFFF87FFFC39FFFFC1FFFFFF87FFFC7FFFFFC1FFFFFF87FFFCFFFFFFC1FFFFFF87FFFFFFFFFFC1FFFFFFC3FFFFFFFFFFC3FFFFFFC1FFFFFFFFFF83FFFFFFE1FFFFFFFFFF07FFFFFFE1FFFFFFFFFE07FFFFFFE1FFFFFFFFFC0FFFFFFFE1FFFFCF0FF81FFFFFFFC3FFFF8001C03FFFFFFFC3FFCF800000FFFFFFFFC1FF87C04003FFFFFFFFE0FF07FFF81FFFFFFFFFE0780FFFFC3FFFFFFFFFF0001FFFF83FFFFFFFFFFC003FFFF87FFFFFFFFFFF803FFFF87FFFFFFFFFFFFC1FFFF87FFFFFFFFFFFFC1FFFF07FFFFFFFFFFFFE0FFFF0FFFFFFFFFFFFFE0FC020FFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000001FFFFFFFFFFFFFF8001C1FFFFFFFFFFFFFF83E3F9FFFFFFFFFFFFFFCFE3FFFFFFFFFFFFFFFFF9C39FFFFFFFFFFFFFFFF8C70FFFFFFFFFFFFFFFF9879FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF7FF807FFFFFFFFFFFFFEFFF00FFF7FFFFFFFFFFCFFF03FFF3FFFFFFFFFFCFFFFFFFF3FFFFFFFFFFC FFC001FF3FFFFFFFFFFC7F8000FE3FFFFFFFFFFC1F0000783FFFFFFFFFFC000FF0003FFFFFFFFFFE001FF8007FFFFFFFFFFF003FFC00FFFFF3FFFFFFC07FFF03FFFFE1FFF7FFFFFFFFFFFFFC61FFE0FFFFFFFFFFFFC023FFE01FFFFFFFFFFF803FFFF003FFFFFFFFF0C0FFFFF800FFFFFFFF00C1FFFFF02041FFC7FE00C3FFFFF070000E001E0183FFFFE070400C001F4183FFFFE000F008001FE001FFFFE001F0783C1FE000FFFFC083F0783C1FF0003FFC01C1E0F07E3FF03007FC01E1E0F0700FF83803FE00C1E0F06007F80C07FF0001E0F06007F8043FFFF003E0F83C1FF007FFFFFE0700F83C1FE00FFFFFFFFE0038001FF0FFFFFFFFFF003C001FFFFFFFFFFFFFE03E001FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 形式 打印

【问题讨论】:

    标签: windows-mobile zebra-printers zpl


    【解决方案1】:

    我假设大图形失败是因为第一行数据不完整:

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

    “FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF”不计算到偶数字节!

    The EG command syntax:
    Command width height x y data
    

    宽度和高度必须以点计算,并且数据必须可除以 8。

    EG 10
    

    指定 0x10 * 8 点 = 每行 128 点

    EG 10 80
    

    定义一个宽 128 点、高 128 (0x80) 点的图形。

    所以你必须发送 8 个字节乘 128 行,但你的数据甚至没有填满 100 行 8 个字节!

    另见CPCL EG Command

    ================================ 第二个数据帖子也仅包含 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 行。

    【讨论】:

    • 您好,图片是 80 像素 x 80 像素的位图。当我从代码中删除“cpclData = cpclData &”并通过 USB 电缆将打印机直接连接到 PC 时,我可以将代码直接发送到打印机并且一切正常。当我通过蓝牙发送它时,较大的代码块没有任何反应,而较小的代码块工作正常。
    • 事实:数据与您的 EG 命令不匹配。不是每128行128个点,还是你没有复制粘贴真正使用的代码?!要触发 BT,您可能需要在开始时发送一些零字节来启动打印机。无论发送多少数据,它都应该正确缓冲和握手。
    • 您好,我在这个问题中添加了更多用于创建 bmp 的代码。最后 CPCL 代码中缺少 CR 更多的是与该站点有关,而不是没有任何。如果您能发现我哪里出错了,我将不胜感激,因为这段代码确实适用于 MZ320
    • 感谢 Josef 一直以来的帮助。我会尝试一下你提出的建议,并让你知道我的进展情况
    【解决方案2】:

    这些数据有多大? ZebraPrinterConnection.write() 方法只是传递到低级流代码。通常,蓝牙缓冲区比 TCP 或 USB 缓冲区小,因此您不想让它们过载。我建议将您的数据分成较小的块(1024 字节左右)并在写入之间等待 100 毫秒。

    【讨论】:

    • 谢谢,我会试一试的。我要做的就是使用 Windows Mobile CE 中的 VB 打印位图。我得到的只是底部的大量空白:(
    • 您好,感谢 Ovi 和 Josef 抽出宝贵时间回答我的问题。问题原来是打印机一次只能处理最多 1024 字节的突发数据。当我添加一些代码来分解我试图发送成更小的块的 CPCL 时,它一切正常。
    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多