2010-08-03 110 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