Domanda

Sto lavorando su un'app .NET WinForms che deve stampare un'etichetta di spedizione FEDEX. Come parte dell'API FedEx, posso ottenere dati di etichetta grezzi per la stampante.

Non so proprio come inviare quei dati alla stampante tramite .NET (sto usando C #). Per essere chiari, i dati sono già preformattati in ZPL (linguaggio di stampa Zebra) Ho solo bisogno di inviarli alla stampante senza Windows muck up.

È stato utile?

Soluzione

C # non supporta la stampa raw, dovrai utilizzare lo spooler win32, come dettagliato in questo articolo della KB Come inviare dati non elaborati a una stampante utilizzando Visual C # .NET .

Spero che questo aiuti.

-Adam

Altri suggerimenti

Penso che tu voglia solo inviare la ZPL (lavoro sotto) direttamente alla tua stampante.

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();
    }
}

Un po 'in ritardo, ma puoi usare questo progetto CodePlex per una facile stampa ZPL http://sharpzebra.codeplex.com/

Le stampanti Zebra non usano uno spooler, non si tratta di una stampa non elaborata. È un markup chiamato ZPL. È basato sul testo, non binario.

Lavoro con una stampante e ZPL da un po 'di tempo, ma con un'app Ruby. L'invio di ZPL alla stampante tramite socket funziona correttamente.

Per verificare che funzioni, spesso telnet alla stampante e digito ^ XA ^ PH ^ XZ per alimentare una singola etichetta. Spero che sia d'aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top