2015-10-27 1 views
1

Je pense que je suis très proche de l'impression. Cependant ce n'est toujours pas. Il n'y a aucune exception levée et il semble que l'imprimante zèbre soit frappée, mais rien. C'est un coup de feu car je pense que la plupart des gens sont dans la même position que moi et n'en savent pas grand-chose. N'importe quelle aide n'importe qui peut donner n'importe comment petit sera accueilli, je perds la volonté de vivreImprimante Zebra - Pas d'impression PNG Stream * Fourni ma propre réponse *

using (var response = request.GetResponse()) 
      { 
       using (var responseStream = response.GetResponseStream()) 
       { 
        using (var stream = new MemoryStream()) 
        { 
         if (responseStream == null) 
         { 
          return; 
         } 

         responseStream.CopyTo(stream); 
         stream.Position = 0; 

         using (var zipout = ZipFile.Read(stream)) 
         { 
          using (var ms = new MemoryStream()) 
          { 
           foreach (var e in zipout.Where(e => e.FileName.Contains(".png"))) 
           { 
            e.Extract(ms); 
           } 

           if (ms.Length <= 0) 
           { 
            return; 
           } 

           var binaryData = ms.ToArray(); 

           byte[] compressedFileData; 

           // Compress the data using the LZ77 algorithm. 
           using (var outStream = new MemoryStream()) 
           { 
            using (var compress = new DeflateStream(outStream, CompressionMode.Compress, true)) 
            { 
             compress.Write(binaryData, 0, binaryData.Length); 
             compress.Flush(); 
             compress.Close(); 
            } 
            compressedFileData = outStream.ToArray(); 
           } 

           // Encode the compressed data using the MIME Base64 algorithm. 
           var base64 = Convert.ToBase64String(compressedFileData); 

           // Calculate a CRC across the encoded data. 
           var crc = Calc(Convert.FromBase64String(base64)); 

           // Add a unique header to differentiate the new format from the existing ASCII hexadecimal encoding. 
           var finalData = string.Format(":Z64:{0}:{1}", base64, crc); 

           var zplToSend = "~DYR:LOGO,P,P," + finalData.Length + ",," + finalData; 
           const string PrintImage = "^XA^FO0,0^IMR:LOGO.PNG^FS^XZ"; 

           try 
           { 
            var client = new System.Net.Sockets.TcpClient(); 
            client.Connect(IpAddress, Port); 

            var writer = new StreamWriter(client.GetStream(), Encoding.UTF8); 
            writer.Write(zplToSend); 
            writer.Flush(); 
            writer.Write(PrintImage); 
            writer.Close(); 
            client.Close(); 
           } 
           catch (Exception ex) 
           { 
            // Catch Exception 
           } 
          } 
         } 
        } 
       } 
      } 

    private static ushort Calc(byte[] data) 
    { 
     ushort wCrc = 0; 

     for (var i = 0; i < data.Length; i++) 
     { 
      wCrc ^= (ushort)(data[i] << 8); 

      for (var j = 0; j < 8; j++) 
      { 
       if ((wCrc & 0x8000) != 0) 
       { 
        wCrc = (ushort)((wCrc << 1)^0x1021); 
       } 
       else 
       { 
        wCrc <<= 1; 
       } 
      } 
     } 

     return wCrc; 
    } 

Répondre

1

Le code suivant fonctionne pour moi. Le problème était les commandes, elles sont très très importantes! Vue d'ensemble de la commande que je l'ai utilisé ci-dessous, plus peut être trouvé here

Printimage

^XA Format de début Description La commande^XA est utilisé au début du code ZPL II. C'est la parenthèse d'ouverture et indique le début d'un nouveau format d'étiquette. Cette commande est remplacée par un seul caractère de contrôle ASCII STX (contrôle-B, hexadécimal 02). Format^XA Commentaires Le format ZPL II valide requiert que les formats d'étiquettes commencent par la commande^XA et se terminent par la commande^XZ. Origine du champ Description La commande^FO définit une origine de champ, par rapport à la position d'origine de l'étiquette (^ LH).^FO définit le coin supérieur gauche de la zone de champ en définissant des points le long de l'axe x et de l'axe y indépendamment de la rotation. Format^Fox, y, z

  • x = emplacement axe des x (en points) Les valeurs acceptées: 0 à 32000 par défaut Valeur: 0
  • y = où se trouve l'axe y (en points) des valeurs acceptées: 0 à 32000 Valeur par défaut: 0
  • z = justification Le paramètre z est pris en charge uniquement dans les versions de microprogramme V60.14.x, V50.14.x ou ultérieures du paramètre . Accepté Valeurs: 0 = justification gauche 1 = droit justification 2 = justification automatique (en fonction script) Valeur par défaut: dernière accepté^FW valeur ou^par défaut FW

^IM image Déplacer Description^La commande IM effectue un déplacement direct d'une image depuis la zone de stockage dans la bitmap. La commande est identique à la commande^XG (Recall Graphic), sauf qu'il n'y a pas de paramètres de dimensionnement. Format^IMd: boeuf

  • d = emplacement des objets stockés Valeurs acceptées: R :, E :, B :, et A: Valeur par défaut: Priorité de recherche
  • o = nom d'objet Valeurs acceptées: 1 à 8 caractères alphanumériques Valeur par défaut: si un nom n'est pas spécifié, UNKNOWN est utilisé
  • x = Extension Valeur fixe: .GRF, .PNG

^FS séparateur de champ description la commande^FS indique la fin de la définition du champ. Alternativement, la commande^FS peut également être émise sous la forme d'un seul code de contrôle ASCII SI (Control-O, hexadécimal 0F).Format^FS

^XZ Fin Format Description La commande^XZ est la parenthèse de fin (fermeture). Il indique la fin d'un format d'étiquette. Lorsque cette commande est reçue, une étiquette s'imprime. Cette commande peut également être émise en tant que caractère de contrôle ASCII unique ETX (Control-C, hexadécimal 03). Format^XZ Commentaires Les formats d'étiquettes doivent commencer par la commande^XA et se terminer par la commande^XZ pour être au format ZPL II valide.

zplToSend

^MN Suivi des médias Description Cette commande spécifie le type de support utilisé et la marque noire de décalage en points. Cette liste montre les puces types de médias associés à cette commande:

  • médias en continu - ce média n'a pas caractéristique physique (tel qu'une bande, encoche, perforation, marque noire) pour séparer les étiquettes. La longueur de l'étiquette est déterminée par la commande^LL. Support continu, longueur variable - identique au support continu, mais si des parties de l'étiquette imprimée tombent en dehors de la longueur d'étiquette définie, la taille de l'étiquette sera automatiquement étendue pour les contenir. Cette extension de longueur d'étiquette s'applique uniquement à l'étiquette actuelle. Notez que^MNV nécessite toujours l'utilisation de la commande^LL pour définir la longueur d'étiquette initiale souhaitée.
  • Support non continu - ce support présente un certain type de caractéristique physique (par exemple, bande, encoche, perforation, marque noire) pour séparer les étiquettes.

Format^MNa, b

  • a = support utilisé valeurs acceptées: N = milieux continus Y = détection bande de support non continue d, e W = détection de bande support non continue d, e M = détection de marque de support non continue A = détection automatique du type de support pendant l'étalonnage d, f V = support continu, longueur variable g Valeur par défaut: une valeur doit être entrée ou la commande est ignorée
  • b = noir mark offset in dots Définit l'emplacement prévu de la marque de média par rapport au point de séparation entre les documents. Si la valeur est 0, la marque de média doit être trouvée au point de séparation. (c'est-à-dire la perforation, le point de coupure, etc.) Toutes les valeurs sont indiquées en points. Ce paramètre est ignoré sauf si un paramètre est défini sur M. Si ce paramètre est manquant, la valeur par défaut est utilisée. Valeurs acceptées: à 283 pour -80 imprimantes uniquement thermique directe à 566 pour -240 600 imprimantes dpi à 283 pour -75 imprimantes KR403 à 283 pour -120 toutes les autres imprimantes Valeur par défaut: 0

~ DY Télécharger des objets Description La commande ~ DY permet de télécharger vers les objets graphiques ou les polices de l'imprimante dans n'importe quel format pris en charge. Cette commande peut être utilisée à la place de ~ DG pour plus d'options d'enregistrement et de chargement. ~ DY est la commande préférée pour télécharger les polices TrueType sur les imprimantes avec un firmware ultérieur à X.13. C'est plus rapide que ~ DU. La commande ~ DY prend également en charge le téléchargement de fichiers de certificat sans fil. Format ~ DYd: f, b, x, t, w, les données

Remarque Lorsque vous utilisez les fichiers de certificat, votre imprimante prend en charge: - Utilisation des fichiers de certificat, au format de confidentialité Enhanced Mail (PEM). - Utilisation du certificat client et de la clé privée sous la forme de deux fichiers, chacun téléchargé séparément. - Utilisation de fichiers PAC exportables pour EAP-FAST. - Zebra recommande l'utilisation linéaire sty

  • d = emplacement du fichier des fichiers .NRD et .PAC résident sur E: dans les versions de firmware V60.15.x, V50.15.x, ou plus tard. Valeurs acceptées: R :, E :, B :, et A: Valeur par défaut: R:
  • f = nom de fichier Valeurs acceptées: 1 à 8 caractères alphanumériques Valeur par défaut: si aucun nom n'est spécifié, UNKNOWN est utilisé
  • b = format téléchargé dans le champ de données .TTE et .TTF ne sont pris en charge que dans les versions de firmware V60.14.x, V50.14.x ou ultérieures. Valeurs acceptées: A = non compressé (ZB64, ASCII) B = non compressé (.TTE, .TTF, binaire) C = AR compressé (utilisé uniquement par BAR-ONE® v5 de Zebra) P = graphique de réseau portable (.PNG) - ZB64 codé valeur par défaut: une valeur doit être spécifiée

clearDownLabel

^ID description La commande^ID supprime les objets, les graphiques, les polices et les formats stockés dans les zones de stockage. Les objets peuvent être supprimés de manière sélective ou en groupe. Cette commande peut être utilisée dans un format d'impression pour supprimer des objets avant d'en enregistrer de nouveaux, ou dans un format autonome pour supprimer des objets.

Le nom et l'extension de l'image prennent en charge l'utilisation de l'astérisque (*) en tant que caractère générique. Cela vous permet de supprimer facilement un groupe d'objets sélectionné. Format^IDd: ox

  • d = emplacement des objets stockés valeurs acceptées: R :, E :, B :, et A: Valeur par défaut: R:
  • o = nom d'objet valeurs acceptées: tout à 1 8 nom de caractère Valeur par défaut: si est pas spécifié un nom inconnu est utilisé
  • x = Extension valeurs acceptées: toute extension conforme aux conventions Zebra Valeur par défaut: .GRF

    const string PrintImage = "^XA^FO0,0,0^IME:LOGO.PNG^FS^XZ"; 
        var zplImageData = string.Empty; 
    
         using (var response = request.GetResponse()) 
         { 
          using (var responseStream = response.GetResponseStream()) 
          { 
           using (var stream = new MemoryStream()) 
           { 
            if (responseStream == null) 
            { 
             return; 
            } 
    
            responseStream.CopyTo(stream); 
            stream.Position = 0; 
    
            using (var zipout = ZipFile.Read(stream)) 
            { 
             using (var ms = new MemoryStream()) 
             { 
              foreach (var e in zipout.Where(e => e.FileName.Contains(".png"))) 
              { 
               e.Extract(ms); 
              } 
    
              if (ms.Length <= 0) 
              { 
               return; 
              } 
    
              var binaryData = ms.ToArray(); 
    
              foreach (var b in binaryData) 
              { 
               var hexRep = string.Format("{0:X}", b); 
               if (hexRep.Length == 1) 
               { 
                hexRep = "0" + hexRep; 
               } 
    
               zplImageData += hexRep; 
              } 
    
              var zplToSend = "^XA" + "^FO0,0,0" + "^MNN" + "~DYE:LOGO,P,P," + binaryData.Length + ",," + zplImageData + "^XZ"; 
    
              var label = GenerateStreamFromString(zplToSend); 
    
              var client = new System.Net.Sockets.TcpClient(); 
              client.Connect(IpAddress, Port); 
    
              label.CopyTo(client.GetStream()); 
              label.Flush(); 
    
              client.Close(); 
    
              var cmd = GenerateStreamFromString(PrintImage); 
    
              var client2 = new System.Net.Sockets.TcpClient(); 
              client2.Connect(IpAddress, Port); 
    
              cmd.CopyTo(client2.GetStream()); 
              cmd.Flush(); 
    
              client2.Close();var clearDownLabel = GenerateStreamFromString("^XA^IDR:LOGO.PNG^FS^XZ"); 
    
              var client3 = new System.Net.Sockets.TcpClient(); 
              client3.Connect(IpAddress, Port); 
    
              clearDownLabel.CopyTo(client3.GetStream()); 
              clearDownLabel.Flush(); 
    
              client3.Close(); 
             } 
            } 
           } 
          } 
         } 
        }