VB.net将图像打印到Zebra

时间:2013-10-03 13:49:35

标签: vb.net image printing zpl-ii

我在VB.net中有一个位图图像,我想打印到Zebra打印机,希望使用ZPLII代码。我在这里看到了这个例子:Working with bitmaps to a ZPL label printer没有运气。有人能帮忙吗?我已经在墙上撞了好几天了。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用字体下载工具将图像存储在打印机中,然后使用ZPL调用它:

^XA
^FT60,1750^A0B,42,40^XGE:[image_name].GRF^FS
^PQ1,0,1,Y^XZ

答案 1 :(得分:0)

我有一个解决方案

         Imports System.Drawing
        Imports System.Drawing.Imaging
        Imports System.IO
        Imports System.Runtime.InteropServices
        Imports System.Text

        Class CONVERTBITMAP

            ''' <summary>
            ''' Return codeZPL of an bitmap
            ''' </summary>
            ''' <param name="BMP2">BITMAP</param>
            ''' <returns></returns>
            Public Shared Function CreateGRF(BMP2 As Bitmap) As String
                'Dim bmp2 As Bitmap = Nothing
                Dim bmp As Bitmap = Nothing
                Dim imgData As BitmapData = Nothing
                Dim pixels As Byte()
                Dim x As Integer, y As Integer, width As Integer
                Dim sb As StringBuilder
                Dim ptr As IntPtr
                Try
                    bmp = CONVERTBITMAP.CopyToBpp(BMP2, 1)
                    imgData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.[ReadOnly], PixelFormat.Format1bppIndexed)
                    width = Math.Abs(imgData.Stride)
                    pixels = New Byte(width - 1) {}
                    sb = New StringBuilder(width * bmp.Height * 2)
                    ptr = imgData.Scan0
                    Dim PREVNUM As Integer = 0
                    For y = 0 To bmp.Height - 1
                        Marshal.Copy(ptr, pixels, 0, width)
                        For x = 0 To width - 1
                            If (x + 1) * 8 > bmp.Width Then
                                Dim DIF As Integer = ((x + 1) * 8) - bmp.Width
                                Dim NUM As Integer = (2 ^ (DIF - PREVNUM)) - 1
                                Dim BYTENOT As Byte = Not (CByte(NUM))
                                PREVNUM = DIF
                                If NUM < 255 Then
                                    Dim NOTPX As Byte = Not (pixels(x))
                                    Dim CBYTE2 As Byte = CByte(NUM)
                                    Dim STR As Byte = Format("{0:X2}", NOTPX - CBYTE2)
                                    sb.AppendFormat("{0:X2}", CByte(STR))
                                Else
                                    sb.AppendFormat("{0:X2}", CByte(0))
                                End If

                            Else
                                sb.AppendFormat("{0:X2}", CByte(Not pixels(x)))
                            End If

                        Next
                        PREVNUM = 0
                        ptr = ptr.ToInt64 + imgData.Stride    'DirectCast(ptr.ToInt64() + imgData.Stride), IntPtr)
                    Next
                Finally
                    If bmp IsNot Nothing Then
                        If imgData IsNot Nothing Then
                            bmp.UnlockBits(imgData)
                        End If
                        bmp.Dispose()
                    End If
                End Try
                Return [String].Format("^GFA,{0},{0},{1},", width * y, width) + sb.ToString()
            End Function
        End Class      

然后,使用

    public function Create_ZPLImage(my_Image As Image) as string
        return CONVERTBITMAP.CreateGRF(_Image)
    End Sub

为我工作