Falsches Drucken von Akzenten (Zebra ZD420, ZPL)C#

Ein Treffpunkt für C#-Programmierer
Guest
 Falsches Drucken von Akzenten (Zebra ZD420, ZPL)

Post by Guest »

Ich habe ein Problem beim Drucken von Akzent- und Sonderzeichen auf einem Zebra ZD420-Drucker. Wenn ich Etiketten drucke, werden die Akzente und einige Zeichen nicht richtig angezeigt. Beispielsweise wird aus „Code Lot réduit“ „Code Lot r�duit“.
Ich verwende die ZPL-Sprache und habe bereits mehrere Lösungen ausprobiert:
Ich habe den Befehl ^CI28 für den internationalen Zeichensatz hinzugefügt.
Ich habe ^FH vor jedem Textfeld (^FD) eingefügt, das Sonderzeichen enthält.
Ich habe meine ZPL-Datei in UTF-8 gespeichert.
Ich habe versucht zu kodieren den Text in UTF-8 in meinem C#-Code, bevor ich ihn mit diesem Code an den Drucker sende:

Code: Select all

[HttpPost]
public IActionResult ImprimerEtiquetteModifiee()
{
try
{
// Chemin vers le fichier ZPL d'origine
string cheminFichierZPL = Path.Combine(Directory.GetCurrentDirectory(), "etiquette_lot_reduit.prn");

// Vérifier si le fichier existe
if (!System.IO.File.Exists(cheminFichierZPL))
{
return Json(new { success = false, message = "Fichier ZPL introuvable." });
}

// Lire le contenu du fichier ZPL
string contenuZPL = System.IO.File.ReadAllText(cheminFichierZPL, Encoding.UTF8);
contenuZPL = ConvertirCaracteresSpeciaux(contenuZPL);

// Remplacer les placeholders (@01, @02, etc.) par des valeurs simulées
contenuZPL = contenuZPL
.Replace("@01", "CodeLotReduit123")
.Replace("@02", "Num OC 456")
.Replace("@03", "Quantite 789")
.Replace("@04", "CodePF001")
.Replace("@05", "ProduitFiniXYZ")
.Replace("@06", "Lot987654");

// Créer un nouveau fichier ZPL avec le contenu modifié
string fichierModifie = Path.Combine(Directory.GetCurrentDirectory(), "etiquette_modifiee.zpl");
System.IO.File.WriteAllText(fichierModifie, contenuZPL, Encoding.UTF8);

// Chemin UNC de l'imprimante
string cheminImprimante = @"\\FRLORBRIPRTA20P\FRLORBRIPRT8002";

// Envoyer le fichier ZPL modifié à l'imprimante via le chemin UNC
using (var fileStream = new FileStream(cheminImprimante, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] zplData = Encoding.UTF8.GetBytes(contenuZPL);
fileStream.Write(zplData, 0, zplData.Length);
}

return Json(new { success = true, message = "Étiquette imprimée avec succès via l'imprimante : " + cheminImprimante });
}
catch (Exception ex)
{
_logger.LogError($"Erreur lors de l'impression : {ex.Message}");
return Json(new { success = false, message = "Erreur lors de l'impression : " + ex.Message });
}
}

public string ConvertirCaracteresSpeciaux(string texte)
{
var replacements = new Dictionary
{
{ "é", "_82" },
{ "è", "_8A" },
{ "ê", "_90" },
{ "ë", "_91" },
{ "à", "_85" },
{ "â", "_83" },
{ "ä", "_84" },
{ "ç", "_87" },
{ "î", "_8C" },
{ "ï", "_8D" },
{ "ô", "_93" },
{ "ö", "_94" },
{ "ù", "_97" },
{ "û", "_99" },
{ "ü", "_9A" },
{ "°", "_F8" }
};

foreach (var replacement in replacements)
{
texte = texte.Replace(replacement.Key, replacement.Value);
}

return texte;
}
aber ohne Erfolg.
Haben Sie Lösungen für dieses Problem? Vielen Dank im Voraus.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post