4

我正在开发一个需要打印 FEDEX 运输标签的 .NET WinForms 应用程序。作为 FedEx api 的一部分,我可以获得打印机的原始标签数据。

我只是不知道如何通过 .NET 将数据发送到打印机(我使用的是 C#)。需要明确的是,数据已经预先格式化为 ZPL(Zebra 打印机语言),我只需要将其发送到打印机,而不需要 Windows 将其弄乱。

4

5 回答 5

10

C# 不支持原始打印,您必须使用 win32 假脱机程序,如本知识库文章How to send raw data to a printer by using Visual C# .NET中所述。

希望这可以帮助。

-亚当

于 2008-09-23T19:18:55.813 回答
1

我认为您只想将 ZPL(下面的作业)直接发送到您的打印机。

private void SendPrintJob(string job)
{
    TcpClient client = null;
    NetworkStream ns = null;
    byte[] bytes;
    int bytesRead;

    IPEndPoint remoteIP;
    Socket sock = null;

    try
    {
        remoteIP = new IPEndPoint( IPAddress.Parse(hostName), portNum );
        sock = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream,
            ProtocolType.Tcp);
        sock.Connect(remoteIP);


        ns = new NetworkStream(sock);

        if (ns.DataAvailable)
        {
            bytes = new byte[client.ReceiveBufferSize];
            bytesRead = ns.Read(bytes, 0, bytes.Length);
        }

        byte[] toSend = Encoding.ASCII.GetBytes(job);
        ns.Write(toSend, 0, toSend.Length);

        if (ns.DataAvailable)
        {
            bytes = new byte[client.ReceiveBufferSize];
            bytesRead = ns.Read(bytes, 0, bytes.Length);
        }
    }
    finally
    {           
        if( ns != null )            
            ns.Close();

        if( sock != null && sock.Connected )
            sock.Close();

        if (client != null)
            client.Close();
    }
}
于 2008-09-23T19:24:10.560 回答
0

我一直在使用打印机和 ZPL 一段时间,但使用的是 Ruby 应用程序。通过套接字将 ZPL 发送到打印机工作正常。

为了检查它是否有效,我经常远程登录到打印机并输入^XA^PH^XZ一个标签。希望有帮助。

于 2009-07-21T19:13:21.050 回答
0

有点晚了,但您可以使用此 CodePlex 项目轻松进行 ZPL 打印 http://sharpzebra.codeplex.com/

于 2009-08-03T10:48:52.930 回答
0

Zebra 打印机不使用后台打印程序,它不是原始打印。这是一个称为 ZPL 的标记。它是基于文本的,而不是二进制的。

于 2012-02-28T19:32:38.297 回答