impression – Imprimer des codes à barres d'une page Web vers une imprimante Zebra – Serveur d’impression
Author: Titanfall —
Short summary: essayez de créer un WebSocket qui contrôle l’impression côté client et envoie les données avec ajax de la page à localhost. /// websocket en utilisant le système; using System.Net; using System.Net.WebSockets; using System.Text; using System.Threading; Serveur d'espace de noms { programme de classe WebsocketServer statique public ws; static void Main (chaîne[] args) ws […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2019/05/03/impression-imprimer-des-codes-a-barres-dune-page-web-vers-une-imprimante-zebra-serveur-dimpression/
- LLM HTML version
- https://tutos-gameserver.fr/2019/05/03/impression-imprimer-des-codes-a-barres-dune-page-web-vers-une-imprimante-zebra-serveur-dimpression/llm
- LLM JSON version
- https://tutos-gameserver.fr/2019/05/03/impression-imprimer-des-codes-a-barres-dune-page-web-vers-une-imprimante-zebra-serveur-dimpression/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 6 minutes (360 seconds)
- Word count
- 1198
Key points
- essayez de créer un WebSocket qui contrôle l’impression côté client et envoie les données avec ajax de la page à localhost.
- /// websocket en utilisant le système; using System.Net; using System.Net.WebSockets; using System.Text; using System.Threading; Serveur d'espace de noms { programme de classe WebsocketServer statique public ws; static void Main (chaîne[] args) ws = new Server.WebsocketServer (); ws.LogMessage + = Ws_LogMessage; ws.Start ("http: // localhost: 2645 / service /"); Console.WriteLine ("Appuyez sur n'importe quelle touche pour quitter ..."); Console.ReadKey (); void statique privé Ws_LogMessage (expéditeur de l'objet, WebsocketServer.LogMessageEventArgs e) Console.WriteLine (e.Message); classe publique WebsocketServer { événement public OnLogMessage LogMessage; délégué public void OnLogMessage (Expéditeur d'objet, LogMessageEventArgs e); Classe publique LogMessageEventArgs: EventArgs chaîne publique Message get; ensemble; public LogMessageEventArgs (chaîne Message) this.Message = Message; bool public started = false; public async void Start (chaîne httpListenerPrefix) HttpListener httpListener = new HttpListener (); httpListener.Prefixes.Add (httpListenerPrefix); httpListener.Start (); LogMessage (this, new LogMessageEventArgs ("Listening ...")); commencé = vrai; alors que (commencé) HttpListenerContext httpListenerContext = wait httpListener.GetContextAsync (); if (httpListenerContext.Request.IsWebSocketRequest) ProcessRequest (httpListenerContext); autre httpListenerContext.Response.StatusCode = 400; httpListenerContext.Response.Close (); LogMessage (this, new LogMessageEventArgs ("Closed ...")); public void Stop () commencé = faux; ProcessRequest (HttpListenerContext httpListenerContext) { WebSocketContext webSocketContext = null; essayer webSocketContext = wait httpListenerContext.AcceptWebSocketAsync (subProtocol: null); LogMessage (this, nouveau LogMessageEventArgs ("Connecté")); catch (Exception e) httpListenerContext.Response.StatusCode = 500; httpListenerContext.Response.Close (); LogMessage (this, new LogMessageEventArgs (String.Format ("Exception: 0", e))); revenir; WebSocket webSocket = webSocketContext.WebSocket; essayer { while (webSocket.State == WebSocketState.Open) { ArraySegment buffer = new ArraySegment(nouvel octet[8192]) WebSocketReceiveResult resultat = null; using (var ms = new System.IO.MemoryStream ()) { faire result = wait webSocket.ReceiveAsync (tampon, CancellationToken.None); ms.Write (buffer.Array, buffer.Offset, result.Count); while (!
- result.EndOfMessage); ms.Seek (0, System.IO.SeekOrigin.Begin); if (result.MessageType == WebSocketMessageType.Text) { using (var reader = new System.IO.StreamReader (ms, Encoding.UTF8)) var r = System.Text.Encoding.UTF8.GetString (ms.ToArray ()); var t = Newtonsoft.Json.JsonConvert.DeserializeObject(r); bool valid = true; octet[] toBytes = Encoding.UTF8.GetBytes (""); ; si (t!
- = null) if (t.printer.Trim () == string.Empty) var imprimantes = ""; foreach (var imp dans System.Drawing.Printing.PrinterSettings.InstalledPrinters) imprimantes + = imp + " n"; toBytes = Encoding.UTF8.GetBytes ("Aucune indication sur l'impression nLas Impresoras disponibles:" + imprimantes); valide = faux; if (t.name.Trim () == string.Empty) toBytes = Encoding.UTF8.GetBytes ("Aucune indication sur le document"); valide = faux; if (t.code == null) toBytes = Encoding.UTF8.GetBytes ("Aucune donnée n'est affichée à la suite de l'impression"); valide = faux; si (valide) print.RawPrinter.SendStringToPrinter (t.printer, t.code, t.name); toBytes = Encoding.UTF8.GetBytes ("Correcto ..."); attendez webSocket.SendAsync (nouvel ArraySegment(toBytes, 0, int.Parse (toBytes.Length.ToString ())), WebSocketMessageType.Binary, result.EndOfMessage, CancellationToken.None); autre toBytes = Encoding.UTF8.GetBytes ("Erreur ..."); attendez webSocket.SendAsync (nouvel ArraySegment(toBytes, 0, int.Parse (toBytes.Length.ToString ())), WebSocketMessageType.Binary, result.EndOfMessage, CancellationToken.None); } } } } catch (Exception e) LogMessage (this, new LogMessageEventArgs (String.Format ("Exception: 0 nLinea: 1", e, e.StackTrace)))); enfin si (webSocket!
Primary visual
Structured content
essayez de créer un WebSocket qui contrôle l’impression côté client et envoie les données avec ajax de la page à localhost. /// websocket en utilisant le système; using System.Net; using System.Net.WebSockets; using System.Text; using System.Threading;
Serveur d'espace de noms { programme de classe WebsocketServer statique public ws; static void Main (chaîne[] args) ws = new Server.WebsocketServer (); ws.LogMessage + = Ws_LogMessage; ws.Start ("http: // localhost: 2645 / service /"); Console.WriteLine ("Appuyez sur n'importe quelle touche pour quitter ..."); Console.ReadKey ();
void statique privé Ws_LogMessage (expéditeur de l'objet, WebsocketServer.LogMessageEventArgs e) Console.WriteLine (e.Message);
classe publique WebsocketServer { événement public OnLogMessage LogMessage; délégué public void OnLogMessage (Expéditeur d'objet, LogMessageEventArgs e); Classe publique LogMessageEventArgs: EventArgs chaîne publique Message get; ensemble; public LogMessageEventArgs (chaîne Message) this.Message = Message;
bool public started = false; public async void Start (chaîne httpListenerPrefix) HttpListener httpListener = new HttpListener (); httpListener.Prefixes.Add (httpListenerPrefix); httpListener.Start (); LogMessage (this, new LogMessageEventArgs ("Listening ...")); commencé = vrai;
alors que (commencé) HttpListenerContext httpListenerContext = wait httpListener.GetContextAsync (); if (httpListenerContext.Request.IsWebSocketRequest) ProcessRequest (httpListenerContext); autre httpListenerContext.Response.StatusCode = 400; httpListenerContext.Response.Close (); LogMessage (this, new LogMessageEventArgs ("Closed ..."));
public void Stop () commencé = faux; ProcessRequest (HttpListenerContext httpListenerContext) { WebSocketContext webSocketContext = null;
essayer webSocketContext = wait httpListenerContext.AcceptWebSocketAsync (subProtocol: null); LogMessage (this, nouveau LogMessageEventArgs ("Connecté")); catch (Exception e) httpListenerContext.Response.StatusCode = 500; httpListenerContext.Response.Close (); LogMessage (this, new LogMessageEventArgs (String.Format ("Exception: 0", e))); revenir;
WebSocket webSocket = webSocketContext.WebSocket; essayer {
while (webSocket.State == WebSocketState.Open) {
ArraySegment buffer = new ArraySegment(nouvel octet[8192])
WebSocketReceiveResult resultat = null;
using (var ms = new System.IO.MemoryStream ()) { faire result = wait webSocket.ReceiveAsync (tampon, CancellationToken.None); ms.Write (buffer.Array, buffer.Offset, result.Count); while (! result.EndOfMessage);
ms.Seek (0, System.IO.SeekOrigin.Begin);
if (result.MessageType == WebSocketMessageType.Text) { using (var reader = new System.IO.StreamReader (ms, Encoding.UTF8)) var r = System.Text.Encoding.UTF8.GetString (ms.ToArray ()); var t = Newtonsoft.Json.JsonConvert.DeserializeObject(r); bool valid = true; octet[] toBytes = Encoding.UTF8.GetBytes (""); ;
si (t! = null) if (t.printer.Trim () == string.Empty) var imprimantes = ""; foreach (var imp dans System.Drawing.Printing.PrinterSettings.InstalledPrinters) imprimantes + = imp + " n";
toBytes = Encoding.UTF8.GetBytes ("Aucune indication sur l'impression nLas Impresoras disponibles:" + imprimantes); valide = faux; if (t.name.Trim () == string.Empty) toBytes = Encoding.UTF8.GetBytes ("Aucune indication sur le document"); valide = faux; if (t.code == null) toBytes = Encoding.UTF8.GetBytes ("Aucune donnée n'est affichée à la suite de l'impression"); valide = faux;
si (valide) print.RawPrinter.SendStringToPrinter (t.printer, t.code, t.name); toBytes = Encoding.UTF8.GetBytes ("Correcto ...");
attendez webSocket.SendAsync (nouvel ArraySegment(toBytes, 0, int.Parse (toBytes.Length.ToString ())), WebSocketMessageType.Binary, result.EndOfMessage, CancellationToken.None); autre toBytes = Encoding.UTF8.GetBytes ("Erreur ..."); attendez webSocket.SendAsync (nouvel ArraySegment(toBytes, 0, int.Parse (toBytes.Length.ToString ())), WebSocketMessageType.Binary, result.EndOfMessage, CancellationToken.None); } } } } catch (Exception e) LogMessage (this, new LogMessageEventArgs (String.Format ("Exception: 0 nLinea: 1", e, e.StackTrace)))); enfin si (webSocket! = null) webSocket.Dispose (); } }
classe publique Datos nom de chaîne publique get; ensemble; code de chaîne publique get; ensemble; chaîne publique imprimante get; ensemble; = ""; }
impression brute: using Microsoft.VisualBasic; en utilisant le système; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Runtime.InteropServices; using System.IO;
print de l'espace de noms { Classe publique RawPrinter { // Déclarations de structure et d'API: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] classe publique DOCINFOA [MarshalAs(UnmanagedType.LPStr)] chaîne publique pDocName; [MarshalAs(UnmanagedType.LPStr)] chaîne publique pOutputFile; [MarshalAs(UnmanagedType.LPStr)] chaîne publique pDataType; [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public statique extern bool OpenPrinter ([MarshalAs(UnmanagedType.LPStr)] chaîne szPrinter, réf IntPtr hPriknter, IntPtr pd);
[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public extern externe bool ClosePrinter (IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public statique externe bool StartDocPrinter (IntPtr hPrinter, niveau Int32, [In(), MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);
[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public extern externe bool EndDocPrinter (IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public statique extern bool StartPagePrinter (IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public statique extern bool EndPagePrinter (IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public statique externe bool WritePrinter (IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, ref Int32 dwWritten);
// SendBytesToPrinter () // Lorsque la fonction reçoit un nom d'imprimante et un tableau non géré // d'octets, la fonction envoie ces octets à la file d'attente d'impression. // Renvoie true en cas de succès, false en cas d'échec. public bool statique SendBytesToPrinter (chaîne szPrinterName, pbits IntPtr, dwCount Int32, chaîne DocName = "") Int32 dwError = 0; Int32 dwWritten = 0; IntPtr hPrinter = new IntPtr (0); DOCINFOA di = new DOCINFOA (); bool bSuccess = false; // Suppose l'échec sauf si vous y parvenez. di.pDocName = string.IsNullOrEmpty (DocName)? "Mon document RAW C # .NET": DocName; di.pDataType = "RAW";
// Ouvre l'imprimante. if (OpenPrinter (szPrinterName.Normalize (), réf hPrinter, IntPtr.Zero)) // Démarrer un document. if (StartDocPrinter (hPrinter, 1, di)) // Démarrer une page. if (StartPagePrinter (hPrinter)) // Ecrivez vos octets. bSuccess = WritePrinter (hPrinter, pBytes, dwCount, ref dwWritten); EndPagePrinter (hPrinter); EndDocPrinter (hPrinter); ClosePrinter (hPrinter); // Si vous n'avez pas réussi, GetLastError peut donner plus d'informations // pourquoi pas. if (bSuccess == false) dwError = Marshal.GetLastWin32Error (); retourner bSuccess;
public bool statique SendFileToPrinter (string szPrinterName, string szFileName) // ouvre le fichier. FileStream fs = new FileStream (szFileName, FileMode.Open); // Crée un BinaryReader sur le fichier. BinaryReader br = new BinaryReader (fs); // Dimette un tableau d'octets assez grand pour contenir le contenu du fichier. Octet[] octets = nouvel octet[fs.Length]; bool bSuccess = false; // Votre pointeur non géré. IntPtr pUnmanagedBytes = new IntPtr (0); int nLength = 0;
nLength = Convert.ToInt32 (fs.Length); // Lit le contenu du fichier dans le tableau. octets = br.ReadBytes (nLength); // Alloue de la mémoire non gérée pour ces octets. pUnmanagedBytes = Marshal.AllocCoTaskMem (nLength); // Copiez le tableau d'octets gérés dans le tableau non géré. Marshal.Copy (octets, 0, pUnmanagedBytes, nLength); // Envoie les octets non gérés à l'imprimante. bSuccess = SendBytesToPrinter (szPrinterName, pUnmanagedBytes, nLength); // Libère la mémoire non gérée que vous avez allouée précédemment. Marshal.FreeCoTaskMem (pUnmanagedBytes); retourner bSuccess; public bool statique SendStringToPrinter (string szPrinterName, string szString, string DocName = "") IntPtr pBytes = default (IntPtr); Int32 dwCount = default (Int32); // Combien de caractères y a-t-il dans la chaîne? dwCount = szString.Length; // Supposons que l'imprimante attend du texte ANSI, puis convertit // la chaîne en texte ANSI. pBytes = Marshal.StringToCoTaskMemAnsi (szString); // Envoie la chaîne ANSI convertie à l'imprimante. SendBytesToPrinter (szPrinterName, pBytes, dwCount, DocName); Marshal.FreeCoTaskMem (pBytes); retourne vrai; } }
page html:
Enviar
puis envoyez un code ZPL à partir de HTML (écrivez ceci sur du code textarea); ^ XA ^ FO200,50 ^ BY2 ^ B3N, N, 80, Y, N ^ FD0123456789 ^ FS ^ PQ1 ^ XZ
Click to rate this post! [Total: 0 Average: 0]
Topics and keywords
Themes: Serveur d'impression
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.