4

FEDEX 配送ラベルを印刷する必要がある .NET WinForms アプリに取り組んでいます。FedEx api の一部として、プリンターの未加工のラベル データを取得できます。

そのデータを .NET 経由でプリンターに送信する方法がわかりません (C# を使用しています)。明確にするために、データは既に ZPL (Zebra プリンター言語) に事前にフォーマットされています。Windows がそれを台無しにすることなく、プリンターに送信するだけで済みます。

4

5 に答える 5

10

C# は raw 印刷をサポートしていないため、この KB 記事「Visual C# .NET を使用して生データをプリンターに送信する方法」で詳しく説明されているように、win32 スプーラーを使用する必要があります。

お役に立てれば。

-アダム

于 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

Zebra プリンタはスプーラを使用せず、生の印刷ではありません。ZPLと呼ばれるマークアップです。バイナリではなく、テキストベースです。

于 2012-02-28T19:32:38.297 に答える
0

少し遅れましたが、この CodePlex プロジェクトを使用して ZPL を簡単に印刷できます http://sharpzebra.codeplex.com/

于 2009-08-03T10:48:52.930 に答える
0

私はしばらくの間、プリンターと ZPL を使用してきましたが、Ruby アプリを使用しています。ソケット経由で ZPL をプリンタに送信すると、正常に動作します。

それが機能することを確認するために、私はよくプリンターに telnet で接続し、^XA^PH^XZラベルを 1 枚フィードするように入力します。それが役立つことを願っています。

于 2009-07-21T19:13:21.050 に答える