2013-02-28 144 views
0

我尝试打印到斑马打印机。 斑马为我提供了一个标准的代码示例在C# 在那里,他们所使用的端口9100到每个i运行这段代码崩溃,因为没有这样的端口号提供 时间连接到打印机斑马打印机KR403端口号

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

    client.Connect("127.0.0.1", 9100); 

不过,我也用的telnet 127.0.01 9100,证实没有任何东西在收听9100 我也尝试过一些Zebra打印机使用的端口6101,但都没有成功。

我可以在DOS命令

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

这可以打印,并证明它侦听莫名其妙网络 内部运行。该设备是USB打印机,这使设置静态端口ID变得很复杂。也许还有一点奇怪,上面的命令确实打印了一个条形码,但并没有切断纸张;当我使用记事本打印(我认为它不使用网络打印),那么它剪纸,但纸张是40厘米长(方式大)..所以我在司机战斗它接缝。

我希望做的事情是使用C#发送打印命令并使用ZPL命令打印 微软也写了一篇关于原始打印的文章,但是在这台打印机上失败了。

我想要做的就是向本打印机发送ZPL指令。 ASLO试图通用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

在你的机器上安装的打印机?打印机设置应显示控制面板中连接的端口。 – 2013-02-28 14:37:51

+0

的确是这样,但它通常会读取端口nummber,我看到USB0001不是我可以使用。 – user613326 2013-02-28 18:25:42

回答

1

您不能使用TcpClient连接到USB像本地连接的设备。 TcpClient用于网络设备。如果将打印机放在网络上,则可以使用TcpClient

+0

打印机正在共享 它一点点证明DOS打印命令使用打印机的共享名称时,只工作.. 但是没有端口号得到了揭示/(我尝试了很多更多) – user613326 2013-02-28 20:10:01

+0

这是正确的答案你真正的问题。您不能使用netowrk连接发送到本地连接的设备。如果您有网络上的打印机,而不是,你可以换127.0.0.1(本地主机)从打印机的主机名或IP地址,您将是最的方式存在。 – 2014-05-08 22:51:47

1

好了之后,一些精神崩溃(不是在那里开玩笑) 因为我一直试图让这台打印机工作。 我终于设法使用RawPrinterHelper打印到这台打印机, 而且我还修复了该助手的一个小错误。

我很高兴分享它,但不知道如何分享一个小型的视觉工作室10项目 如果有人知道如何做到这一点,我张贴它。

我的代码现在可以打印到本地USB打印机,并且没有对话框/我可以切纸。

(请只评论我如何发布PRJ)

+1

请通过您的代码发送 – 2013-11-12 07:47:06

0

用于这些案件的解决办法是共享的USB打印机,然后映射LTP端口与net use命令

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

然后在您的应用程序中,您可以直接将字符串写入LTP1端口并打印。

0

以及最终我们反向工程的信令,写了一原始USB驱动程序,然后使用斑马标记语言进行打印,其深度嵌套其他代码内;遗憾的是我无法分享。

这种语言本身也是不适合的东西。 您需要考虑缓冲区状态处理错误代码和打印机停止响应,您将需要一些保持现场检查 - 等等

所以,如果你可以使用Windows驱动程序,并且你的打印机不是关键尝试即,否则写自己的原始驱动程序,并学会理解所有二进制的错误代码,并牢记,即使有大牌打印机仍然容易堵塞,所以对我来说,如果我有选择,i'dd说放弃这个打印机,或否则,准备一个有几个噩梦的大项目。 It'l花你几个星期,如果你要从头开始..