vb6, ZPL, печать сокетов

Я сделал это программирование на java, и оно работает, но не могу запустить его в vb6 (и мне нужно)

В основном мне нужно отправить данные на принтер зебры по сети. Весь процесс работает (об ошибках не сообщается, но принтер не печатает. В 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 для печати. У кого-нибудь есть ход мыслей? Очень ценю

Даллаг


person Dallag    schedule 03.08.2010    source источник


Ответы (3)


Вы отправляете массив байтов символов Юникода, т.е. если ZPLString было «X», ваш буфер содержит 2 байта; 88 00.

Я подозреваю, что вы не хотите этого, поскольку используете CharArray, поэтому вам следует конвертировать из юникода, используя: buffer = StrConv(ZPLString, vbFromUnicode).

person Alex K.    schedule 03.08.2010
comment
Алекс, спасибо, пробовал, результата нет. Думаю проблема глубже. Вы видите, что в java или C# для печати в сокет используется FileOutputStream или networkstream, но я не знаю, как это сделать в vb6. Ваша помощь очень ценится. Я думаю, мне придется переписать все мое устаревшее приложение vb6.......дох, - person Dallag; 03.08.2010
comment
Или создайте dll С# с поддержкой com, который просто отправляет - person Alex K.; 03.08.2010
comment
Отличная идея и проще, чем переписывать лот, оценил. - person Dallag; 04.08.2010

Я написал код для печати на принтере этикеток Zebra в VB6 и смог сделать это, установив правильный драйвер принтера Zebra. Как только это будет сделано, вы можете просто использовать объект принтера VB6 для отправки текста на принтер.

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

person dretzlaff17    schedule 03.08.2010
comment
Привет, спасибо, Вы видите, что принтер не указан в списке принтеров на моем компьютере. Я не хочу использовать объект принтера. Я хочу отправить необработанные данные на сетевой принтер. Благодарность - person Dallag; 03.08.2010

Я обнаружил, что у вас должен быть уже настроен порт. Добавьте общий набор текстовых принтеров для RAW и укажите его на свой принтер, будь то COM1:, USB1:, сетевое имя или IP-адрес. Как только порт существует, вы можете его использовать.

person Woody    schedule 05.11.2018