0

我尝试打印到斑马打印机。Zebra 为我提供了 C# 中的标准代码示例,他们使用端口 9100 连接到打印机

    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 命令打印 Microsoft 也写了一篇关于原始打印的文章,但是在这台打印机上失败了。

我要做的就是向这台打印机发送 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");
        }
    }

  }
  }
4

4 回答 4

1

好吧,经过一些精神崩溃(不是在开玩笑),因为我整天都在努力让这台打印机工作。我终于设法使用 RawPrinterHelper 打印到这台打印机,而且我还修复了该助手中的一个小错误。

我很高兴分享它,但不确定如何分享一个小型的 Visual Studio 10 项目如果有人知道如何在这里分享,我将其发布。

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

(请评论我如何发布prj)

于 2013-02-28T20:18:36.947 回答
1

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

于 2013-02-28T18:42:29.157 回答
0

解决这些情况的方法是共享 USB 打印机,然后使用 net use 命令将 LTP 端口映射到资源

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

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

于 2013-12-04T20:46:55.480 回答
0

最后,我们对信号进行了逆向工程,为其编写了原始 USB 驱动程序,然后使用斑马标记语言进行打印。这深深嵌套在其他代码中,遗憾的是我无法分享它。

这种语言本身也不是那么好用的东西。您需要考虑处理错误代码的缓冲区状态,以及打印机停止响应,您将需要一些实时检查 - 等等。

因此,如果您可以使用 Windows 驱动程序,并且您的打印机并不重要,请尝试使用,否则编写您自己的原始驱动程序,并学习理解所有二进制错误代码,并记住即使大牌打印机仍然很容易卡纸,所以对我来说,如果我有选择的话,我会说放弃这台打印机,或者为一个有几个噩梦的大项目做好准备。如果您必须从头开始,这将花费您几个星期的时间。

于 2013-12-06T01:23:59.853 回答