将原始数据发送到 FedEx 标签打印机

发布于 2024-07-06 03:46:51 字数 201 浏览 10 评论 0原文

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

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

I'm working on a .NET WinForms app that needs to print a FEDEX shipping label. As part of the FedEx api, I can get raw label data for the printer.

I just don't know how to send that data to the printer through .NET (I'm using C#). To be clear, the data is already pre formatted into ZPL (Zebra printer language) I just need to send it to the printer without windows mucking it up.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情徒 2024-07-13 03:46:51

C# 不支持原始打印,您必须使用 win32 后台处理程序,如本知识库文章 中所述如何使用 Visual C# .NET 将原始数据发送到打印机

希望这可以帮助。

-亚当

C# doesn't support raw printing, you'll have to use the win32 spooler, as detailed in this KB article How to send raw data to a printer by using Visual C# .NET.

Hope this helps.

-Adam

冰之心 2024-07-13 03:46:51

我认为您只想将 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();
    }
}

I think you just want to send the ZPL (job below) directly to your printer.

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();
    }
}
岁月打碎记忆 2024-07-13 03:46:51

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

A little late, but you can use this CodePlex Project for easy ZPL printing
http://sharpzebra.codeplex.com/

被你宠の有点坏 2024-07-13 03:46:51

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

Zebra printers don't use a spooler, it isn't raw printing. It's a markup called ZPL. It's text based, not binary.

成熟的代价 2024-07-13 03:46:51

我使用打印机和 ZPL 已经有一段时间了,但使用的是 Ruby 应用程序。 通过套接字将 ZPL 发送到打印机效果很好。

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

I've been working with a printer and ZPL for a while now, but with a Ruby app. Sending the ZPL out to the printer via socket works fine.

To check that it works, I often telnet to the printer and type ^XA^PH^XZ to feed a single label. Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文