.net - printer - zpl php
Vista previa de la impresiĆ³n de los comandos de ZPL II utilizando.NET WinForm antes de enviarlo a la impresora Zebra (4)
Eche un vistazo al servicio web Labelary , que le permite convertir ZPL a una imagen mediante programación.
Simplemente cree una URL que contenga la ZPL que desea representar, recupere la imagen del servidor web y muestre la imagen al usuario desde su aplicación.
string zpl = "YOUR ZPL HERE";
string url = "http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/" + zpl;
using (WebClient client = new WebClient()) {
client.DownloadFile(url, "zpl.png");
}
También hay un visor de ZPL que te permite editar y ver ZPL directamente en una página web.
Tengo una aplicación .NET para Windows que imprime comandos a la impresora Zebra utilizando ZPL II o EPL2. ¿Hay alguna forma de imprimir una vista previa de los datos en un formulario antes de imprimirlos directamente desde la impresora Zebra?
La única forma de obtener una vista previa de la etiqueta es en la página web de la impresora.
Si va a la lista de directorios de la impresora http://<printer IP>/dir
y hace clic en la etiqueta guardada (o crea una nueva), puede hacer clic en "Preview Label"
Necesitaba la capacidad de mostrar la etiqueta en mi aplicación. Así que conecté a Fiddler y descubrí de qué se trataba la comunicación para obtener la imagen de la etiqueta.
Lo tengo funcionando en LinqPad. Las cosas HTTP se pueden limpiar un poco, pero pensé que publicaría el código para que otros lo usen:
void Main()
{
string printerIpAddress = "10.92.0.167";
string zpl="^XA^CFD^CVY^PON^FWN^LS0^LT0^LH15,17^FS^FO0,2^FO14,3^FH^FDHi^FS^XZ";
// post the data to the printer
var imageName = PostZplAndReturnImageName(zpl, printerIpAddress);
// Get the image from the printer
var image = LoadImageFromPrinter(imageName, printerIpAddress);
Console.WriteLine(image);
}
public static string PostZplAndReturnImageName(string zpl, string printerIpAddress)
{
string response = null;
// Setup the post parameters.
string parameters = "data="+ zpl;
parameters = parameters + "&" + "dev=R";
parameters = parameters + "&" + "oname=UNKNOWN";
parameters = parameters + "&" + "otype=ZPL";
parameters = parameters + "&" + "prev=Preview Label";
parameters = parameters + "&" + "pw=";
// Post to the printer
response = HttpPost("http://"+ printerIpAddress +"/zpl", parameters);
// Parse the response to get the image name. This image name is stored for one retrieval only.
HtmlAgilityPack.HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(response);
var imageNameXPath = "/html[1]/body[1]/div[1]/img[1]/@alt[1]";
var imageAttributeValue = doc.DocumentNode.SelectSingleNode(imageNameXPath).GetAttributeValue("alt","");
// Take off the R: from the front and the .PNG from the back.
var imageName = imageAttributeValue.Substring(2);
imageName = imageName.Substring(0,imageName.Length - 4);
// Return the image name.
return imageName;
}
public static string HttpPost(string URI, string Parameters)
{
System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
req.Proxy = new System.Net.WebProxy();
//Add these, as we''re doing a POST
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
//We need to count how many bytes we''re sending.
//Post''ed Faked Forms should be name=value&
byte [] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write (bytes, 0, bytes.Length); //Push it out there
os.Close ();
System.Net.WebResponse resp = req.GetResponse();
if (resp== null) return null;
System.IO.StreamReader sr =
new System.IO.StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}
public static Image LoadImageFromPrinter(string imageName, string printerIpAddress)
{
string url = "http://"+ printerIpAddress +"/png?prev=Y&dev=R&oname="+ imageName +"&otype=PNG";
var response = Http.Get(url);
using (var ms = new MemoryStream(response))
{
Image image = Image.FromStream(ms);
return image;
}
}
public static class Http
{
public static byte[] Get(string uri)
{
byte[] response = null;
using (WebClient client = new WebClient())
{
response = client.DownloadData(uri);
}
return response;
}
}
Esto tiene las siguientes referencias:
HtmlAgilityPack
System.Drawing
System.Net
y los siguientes usos:
HtmlAgilityPack
System.Drawing
System.Drawing.Imaging
System.Net
NOTA: No pude encontrar una manera de comunicarme con una impresora serial / sin IP. (Aunque eso no significa que no haya una manera).
Si está de acuerdo con usar un complemento de Chrome, pruebe la impresora Zpl de Simon Binkert. Este complemento se basa en el servicio web de Labelary vinculado en comentarios anteriores.
Consulte también: https://.com/a/33066790/3196753
Tenga en cuenta que, aunque este complemento se ejecuta dentro de Google Chrome, puede funcionar con cualquier aplicación en la computadora capaz de enviar comandos en bruto.
Puede configurarse para escuchar en el host local o la dirección IP dedicada, por lo que se puede utilizar para emular una impresora ZPL en la PC y la red local. Si necesita una impresora local o una impresora compartida, puede configurar una cola de impresora sin procesar en la PC que apunte a ella en el nombre de host / ip y el puerto, y otras aplicaciones de escritorio podrán enviarle ZPL.
Tenga en cuenta que si necesita ponerlo a disposición de otras computadoras en la red, asegúrese de cambiar 127.0.0.1
en la Configuración de la impresora a una dirección IP de LAN válida.