2010-08-03 77 views
2

我做这个节目在Java和它的作品,但不能让它在VB6运行(我需要)VB6,ZPL,插座打印

基本上我需要通过网络将数据发送到打印机斑马。 整个过程的工作(没有错误的报道,但打印机不打印 在Java中我用:

public void printOnions(ArrayList<String> DataArr){ 
     // LH is x,y coordinates for starting position 
     // FO is x,y coordinates to start current print 
     // BY sets the barcode size 
     // BC is code128 then orientation, height, 
     // print interpretation line, print above barcode, 
     // check digit 
     // A is font type, height and width 
     // FD data start, FS data end 
     String BarCode = DataArr.get(2) + "-" + DataArr.get(3); 
     transferType = "^MTT"; // use thermal transfer 
     String ZPLString = "^LH5,5" + transferType + // Sets the type to thermal transfer 
      "^BY2" + "^MNM" + 
      "^FO50,30" + "^ADN,96,20^FD" + DataArr.get(0) + "  " + DataArr.get(1) + "^FS" + 
      "^FO250,130" + "^BCN,70,N,N,N" + "^FD" + BarCode + "^FS" + 
      "^FO50,230" + "^ADN,96,20^FD" + BarCode + "  " + DataArr.get(4) + "^FS"; 

     PrtTags(ZPLString); 

    } 

    public void initializeZPL(String printerIn) throws IOException { 
     try { 
      //create stream objs 
      int port = 9100; 
      Socket sock = new Socket(printerIn, port); 
      ostream = new FileOutputStream(printerIn); 
      pstream = new PrintStream(sock.getOutputStream()); 
     } catch (UnknownHostException ex) { 
      Logger.getLogger(ZebraZPLView.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(ZebraZPLView.class.getName()).log(Level.SEVERE, null, ex); 
//  } catch (FileNotFoundException e) { 
//   e.printStackTrace(); 
     } 
    } 
    public void PrtTags(String ZPLString){ 
    try{ 
     ZPLString = "^XA" + ZPLString + "^XZ"; 
     char[] chars = ZPLString.toCharArray(); 
     pstream.print(chars); 
      // pstream.close(); 
     pstream.flush(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

这是VB6:

Dim Buffer() As Byte 

Dim printer As String 
printer = "ZBR3677984" 
If sock.State = sckClosed Then 
    sock.RemoteHost = printer 
    sock.RemotePort = 9100 
    sock.Connect 

    Me.txtPrice.Text = "connected" & vbNewLine & sock.LocalHostName _ 
         & vbNewLine & CStr(sock.RemotePort) _ 
         & vbNewLine & CStr(sock.RemoteHost) 
    Dim ZPLString As String 
    ZPLString = "^LH10,10" & "^MTT" & "^BY2" & "^MNM" & _ 
      "^FO15,0" & "^ADN,36,20^FD" & "Line-1 " & " Line 2 " & "^FS" & _ 
      "^FO15,50" & "^ADN,56,40^FD" & "line-3 " & "^FS" & _ 
      "^FO100,100" & "^BCN,70,N,N,N" & "^FD" & "line-4" & "^FS" & _ 
      "^FO15,190" & "^ADN,56,40" & "^FD" & "line-5" & "^FS" & _ 
      "^FO15,250" & "^BCN,70,N,N,N" & "^FD" & "line-6" & "^FS" 

    ZPLString = "^XA" + ZPLString + "^XZ" 
    ZPLString = "^XA" + "test" + "^XZ" 

    ReDim Buffer(Len(ZPLString)) As Byte 

    Buffer = ZPLString 
    sock.SendData Buffer 
End If 

我缺少的NetworkStream的一些国王打印。 没有任何人有一个思路? 非常感谢

Dallag

回答

1

我写了代码打印到斑马标签打印机在VB6,并能够通过安装正确的斑马打印机驱动程序来做到这一点。一旦完成,您可以简单地使用VB6打印机对象将文本发送到打印机。

http://www.nodevice.com/driver/company/Zebra.html

+0

嗨, 您看到打印机没有列在我的电脑的打印机列表中。 我不想使用打印机对象。 我想将原始数据发送到联网打印机。 谢谢 – Dallag 2010-08-03 14:23:11

2

你发送的unicode字符的字节数组,即如果ZPLString是 “X” 你的缓冲区包含2个字节; 88 00

我怀疑你不想这样做,因为你使用CharArray,所以你应该使用:buffer = StrConv(ZPLString, vbFromUnicode)从unicode转换。

+0

谢谢亚历克斯, 我已经尝试过它仍然没有输出。我认为问题更深入。 你看到在Java或C#打印到套接字使用FileOutputStream或网络流,但我不知道如何在vb6中做到这一点。 我们非常感谢您的帮助。 我想我将不得不重写整个我的遗留vb6应用程序....... doh, – Dallag 2010-08-03 15:08:53

+0

或使一个com启用c#dll,只是发送 – 2010-08-03 16:50:54

+0

伟大的想法和更容易比重写很多,赞赏。 – Dallag 2010-08-04 09:20:22