Отправка необработанных данных на принтер этикеток FedEx.
-
02-07-2019 - |
Вопрос
Я работаю над приложением .NET WinForms, которому необходимо распечатать этикетку доставки FEDEX.В рамках API FedEx я могу получить необработанные данные этикетки для принтера.
Я просто не знаю, как отправить эти данные на принтер через .NET (я использую C#).Чтобы внести ясность, данные уже предварительно отформатированы в ZPL (язык принтера Zebra). Мне просто нужно отправить их на принтер, чтобы Windows не испортила их.
Решение
C# не поддерживает необработанную печать, вам придется использовать спулер 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 не используют спулер, это не необработанная печать.Это разметка под названием ZPL.Он текстовый, а не двоичный.
Я уже некоторое время работаю с принтером и ZPL, но с приложением Ruby.Отправка ZPL на принтер через сокет работает нормально.
Чтобы проверить, работает ли он, я часто подключаюсь к принтеру по телнету и набираю ^XA^PH^XZ
для подачи одной этикетки.Надеюсь, это поможет.