【问题标题】:Zebra printer KR403 port numberZebra 打印机 KR403 端口号
【发布时间】:2013-02-28 14:36:01
【问题描述】:

我尝试打印到斑马打印机。 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 命令进行打印 微软也写了一篇关于原始打印的文章,但在这台打印机上失败了。

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

  }
  }

【问题讨论】:

  • 您的机器上是否安装了打印机?打印机设置应在您的控制面板中显示它所连接的端口。
  • 是的,但它通常会读取端口号,我看到 USB0001 不是我可以使用的。

标签: c# zebra-printers


【解决方案1】:

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

【讨论】:

  • 打印机已共享 DOS 打印命令仅在使用打印机的共享名称时才有效。但是没有显示端口号/(我尝试了更多)跨度>
  • 这是您实际问题的正确答案。您不能使用网络连接发送到本地连接的设备。如果您将打印机连接到网络上,则可以将 127.0.0.1 (localhost) 换成打印机的主机名或 IP 地址,这样您就可以到达那里。
【解决方案2】:

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

我很高兴分享它,但不知道如何分享一个小型的 Visual Studio 10 项目 如果有人知道怎么做,我贴出来。

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

(请评论我如何发布项目)

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多