Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print with win-1250 codepage on zebra printer?

I have this code for printing with Zebra printer (RW 420 to be specific)

StringBuilder sb = new StringBuilder();            
sb.AppendLine("N");            
sb.AppendLine("q609");
sb.AppendLine("Q203,26");
//set printer character set to win-1250
sb.AppendLine("I8,B,001");
sb.AppendLine("A50,50,0,2,1,1,N,\"zażółć gęślą jaźń\"");
sb.AppendLine("P1");

printDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings();
if (printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    byte[] bytes = Encoding.Unicode.GetBytes(sw.ToString());
    bytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(1250), bytes);                
    int bCount = bytes.Length;
    IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(bCount);
    System.Runtime.InteropServices.Marshal.Copy(bytes, 0, ptr, bytes.Length);
    Common.RawPrinterHelper.SendBytesToPrinter(printDialog1.PrinterSettings.PrinterName, ptr, bCount);
}

RawPrinterHelper is class from Microsoft that I got from here.

My problem is that only ASCII characters are printed like this:

za     g  l  ja  

Non-ASCII characters are missing.

Funny thing is that when I open Notepad and put the same text in there and print it on Zebra printer all characters are ok.

like image 575
Adrian Serafin Avatar asked Jan 21 '23 18:01

Adrian Serafin


2 Answers

The difference is that Notepad is using the printer driver, you are bypassing it. Zebra printers have some support for using its built-in fonts. It's got character sets for codepage 950 and something it calls "Latin 1" and "Latin 9". Key problem is that none of them contain the glyphs you need. The printer driver solves this problem by sending graphics to the printer, not strings. The programming manual is here btw.

I would imagine that these printers have some kind of option to install additional fonts, hard to make the sale in the rest of the world if that wouldn't be the case. Contact your friendly printer vendor for support and options.

like image 131
Hans Passant Avatar answered Jan 31 '23 00:01

Hans Passant


I found with Wireshark that charset from ZebraDesigner is UTF-8 so try to convert string to byte[] as utf-8

byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sw.ToString());

czech chars like as ěščřžýáíé is now OK

like image 21
zdenál Avatar answered Jan 31 '23 00:01

zdenál