2013-02-28 5 views
0

Я пытаюсь распечатать принтер зебры. Zebra предоставил мне стандартный образец кода в C# Там они использовали порт 9100 для подключения к принтеруПринтер Zebra KR403 номер порта

System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(); 

    client.Connect("127.0.0.1", 9100); 

Однако каждый раз, когда я запускаю этот код он выходит из строя, так как не существует такой номер порта доступен Я также использовал телнет 127.0.01 9100, и это подтвердило, что ничего не слушает 9100 Я также пробовал порт 6101, как и некоторые принтеры Zebra.

Я могу работать в команде дос

print /D:\\127.0.0.1\KR403 d:\print.txt 

Это делает печать, и доказывает, что это как-то прислушивается к сети внутри. Это устройство является USB-принтером, и это усложняет установку статического идентификатора порта. Возможно, также странно, что приведенная выше команда печатает штрих-код, но не режет бумагу; когда я печатаю с помощью блокнота (который, я полагаю, не использует сеть для печати), тогда он разрезает бумагу, но бумага имеет длину 40 см (путь к большому). Так что я нахожусь в битве с водителем.

Что я надеюсь сделать, это отправить команду печати с использованием C# и использовать команды ZPL для печати Microsoft также написала статью о грубой печати, но на этом принтере она не работает.

Все, что я хочу сделать, это отправить инструкции ZPL на этот принтер. АОЛО пытался универсальный драйвер .txt, это работает для блокнота, но не для C#

кода, используемый:

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 

    // print /D:\\127.0.0.1\KR403 d:\print.txt 


    namespace PrinterTest 
    { 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // Printer IP Address and communication port 
     string ipAddress = @"192.168.2.109"; 
     int port = 6101; // 9100;// 

     // ZPL Command(s) 
     string ZPLString = 
      "^XA" + 
      "^FO50,50" + 
      "^A0N50,50" + 
      "^FDHello, World!^FS" + 
      "^XZ"; 

     try 
     { 
      // Open connection 
      System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(); 
      //client.Connect(ipAddress, port); 
      client.Connect(ipAddress, port); 
      // string tmp = "\\127.0.0.1\KR403"; 
      // client.Connect(@"\\localhost",9100); 



      // Write ZPL String to connection 
      System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream()); 
      writer.Write(ZPLString); 
      writer.Flush(); 

      // Close Connection 
      writer.Close(); 
      client.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error"); 
     } 
    } 

    } 
    } 
+0

- это принтер, установленный на вашем компьютере? В настройках принтера должен отображаться порт, к которому он подключен, в панели управления. –

+0

Да, но там, где он обычно читал номер nummber порта, я вижу, что USB0001 не то, что я могу использовать. – user613326

ответ

1

Вы не можете использовать TcpClient для подключения к локально подключенному устройству, как USB. TcpClient предназначен для сетевых устройств. Если вы поместите свой принтер в свою сеть, вы можете использовать TcpClient.

+0

Принтер был общим Небольшое доказательство для него команда печати DOS работала только при использовании общего имени принтера. Однако номер порта не был обнаружен/(и я попробовал намного больше) – user613326

+0

Это правильный ответ для ваш реальный вопрос. Вы не можете использовать соединение netowrk для отправки на локально подключенное устройство. Если бы у вас был принтер в сети вместо этого, вы могли бы поменять 127.0.0.1 (localhost) на имя хоста или IP-адрес принтера, и вы были бы в основном там. –

1

Хорошо после некоторых умственных криков (не шучу) Как я пробовал весь день, чтобы заставить этот принтер работать. Мне удалось распечатать этот принтер с помощью RawPrinterHelper, И я также исправил небольшую ошибку в этом помощнике.

Я рад поделиться им, но не уверен, как поделиться небольшой визуальной студией 10 проекта Если кто-нибудь знает, как это сделать, я публикую его.

Мой код теперь может печатать на локальном USB-принтере и без диалога, и я могу обрезать бумагу.

(пожалуйста, просто комментарий мне о том, как опубликовать Prj)

+1

Пожалуйста, отправьте код –

0

работа вокруг этих случаев общего доступа к принтеру USB и затем сопоставить порт LTP к ресурсу с чистой командой использования

NET USE LPT1: \\[computer_ip]\[printer_sharname] /PERSISTENT:YES 

то с вашим приложением вы можете написать строку непосредственно на порт LTP1, и она будет печататься.

0

ну, в конце концов, мы обратились, спроектировали сигнализацию, написали для него необработанный USB-драйвер, а затем использовали язык разметки zebra для печати, глубоко вложенный в другой код; который, к сожалению, я не могу поделиться.

Этот язык сам по себе также является чем-то, что не подходит для работы. Вам нужно подумать о состояниях буферов, обрабатывающих коды ошибок, а принтеры перестают отвечать на запросы, вам понадобятся некоторые проверки в реальном времени - и т. Д.

Итак, если вы можете использовать драйверы Windows, а ваш принтер не критичен, попробуйте что еще напишите свой собственный необработанный драйвер и научитесь понимать все двоичные коды ошибок, и имейте в виду, что принтеры даже с большими именами все еще легко застревают, поэтому для меня, если бы у меня был выбор, я бы отказался от этого принтера или иначе будьте готовы к большому проекту с несколькими кошмарами. Это стоило вам несколько недель, если вам нужно начать с нуля.

Смежные вопросы