生データを FedEx ラベル プリンターに送信する
-
02-07-2019 - |
質問
私は、FEDEX の配送ラベルを印刷する必要がある .NET WinForms アプリを開発しています。FedEx API の一部として、プリンターの生のラベル データを取得できます。
.NET (C# を使用しています) を介してそのデータをプリンターに送信する方法がわかりません。明確にするために、データはすでに ZPL (Zebra プリンタ言語) にフォーマットされており、Windows がそれを台無しにすることなくプリンタに送信するだけで済みます。
解決
C# は RAW 印刷をサポートしていません。この KB 記事で詳しく説明されているように、win32 スプーラーを使用する必要があります。 Visual C# .NET を使用して生データをプリンターに送信する方法.
お役に立てれば。
-アダム
他のヒント
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();
}
}
少し遅れましたが、この CodePlex プロジェクトを使用して簡単に ZPL 印刷できますhttp://sharpzebra.codeplex.com/
Zebra プリンタはスプーラを使用せず、RAW 印刷ではありません。ZPLと呼ばれるマークアップです。バイナリではなくテキストベースです。
私はしばらくの間、プリンターと ZPL を使用して作業してきましたが、使用するのは Ruby アプリです。ソケット経由で ZPL をプリンターに送信すると、正常に動作します。
動作することを確認するために、私はよくプリンターに Telnet で接続し、次のように入力します。 ^XA^PH^XZ
単一のラベルをフィードします。それが役立つことを願っています。
所属していません StackOverflow