public static byte[] CustomFontDelete(ZebraFont name)
 {
     if (name != ZebraFont.CUSTOM_ALL && name < ZebraFont.CUSTOM_A)
     {
         throw new ApplicationException("Unable to delete standard fonts");
     }
     return(System.Text.Encoding.GetEncoding(437).GetBytes("EK\"" + (char)name + "\"\n"));
 }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font,
                                int horizontalMult, int verticalMult, bool isReverse, string text, PrinterSettings settings)
 {
     return(Encoding.GetEncoding(437).GetBytes(string.Format("A{0},{1},{2},{3},{4},{5},{6},\"{7}\"\n", left + settings.AlignLeft,
                                                             top + settings.AlignTop, (int)rotation, (char)font, horizontalMult, verticalMult, isReverse ? "R" : "N",
                                                             text.Replace(@"\", @"\\").Replace("\"", "\\\""))));
 }
        public static byte[] CustomFontStore(Font font, ZebraFont name, ElementUploadRotation rotation, FontCharsetType charset)
        {
            if (name < ZebraFont.CUSTOM_A)
            {
                throw new ApplicationException("Invalid font name selected for storing");
            }

            List <byte> sendBytes = new List <byte>();

            byte[] init = { (byte)10,  (byte)'N', (byte)10,  (byte)'E',  (byte)'K', (byte)'"', (byte)name, (byte)'"', (byte)10,
                            (byte)'E', (byte)'S', (byte)'"', (byte)name, (byte)'"' };
            //EK"a"
            //ES"a"
            sendBytes.AddRange(init);

            int characterCount = FontCharset.CharList[(int)charset].Length;

            sendBytes.Add((byte)characterCount); //P1 - Number of characters we're sending
            sendBytes.Add((byte)(int)rotation);  //P2 - 0 - portrait, 1 - Landscape, 2 - both
            sendBytes.Add((byte)font.Height);    //P3 - Font height

            //calculate character spacing - 5% of font height or 1 dot, whichever is more
            int spacing = Math.Max(1, (int)(font.Height * 0.05));

            Bitmap[] chr = new Bitmap[characterCount];
            int      currentChr;

            int[] fontstart = new int[characterCount];
            int[] width     = new int[characterCount];
            int   bytewidth;

            for (int i = 0; i < characterCount; i++)
            {
                //Use OEM encoding.
                currentChr = System.Text.Encoding.GetEncoding(437).GetBytes(FontCharset.CharList[(int)charset])[i];
                chr[i]     = RenderChar(font, FontCharset.CharList[(int)charset][i]);

                fontstart[i] = chr[i].Width;
                int fontend = 0;
                for (int h = 0; h < chr[i].Height; h++)
                {
                    for (int w = 0; w < chr[i].Width; w++)
                    {
                        bool pixel = chr[i].GetPixel(w, h).A == 255;
                        if (pixel && w > fontend)
                        {
                            fontend = w;
                        }
                        if (pixel && w < fontstart[i])
                        {
                            fontstart[i] = w;
                        }
                    }
                }
                if (fontend < fontstart[i])
                {
                    width[i]     = font.Height / 4; //set empty character width to be 1/4 height
                    fontstart[i] = 0;
                }
                else
                {
                    width[i] = fontend - fontstart[i] + 1 + spacing;
                }

                if (rotation == ElementUploadRotation.NO_ROTATION || rotation == ElementUploadRotation.BOTH_ROTATIONS)
                {
                    bytewidth = width[i] % 8 > 0 ? (int)width[i] / 8 + 1 : width[i] / 8;
                    sendBytes.Add((byte)currentChr); //An - Character
                    sendBytes.Add((byte)width[i]);   //Bn - number of dots in character width (EPL manual is wrong)
                    sendBytes.Add((byte)bytewidth);  //Cn - number of bytes after padding (EPL manual is wrong)

                    for (int h = 0; h < chr[i].Height; h++)
                    {
                        BitArray ba = new BitArray(8);
                        int      k  = 0;

                        for (int w = fontstart[i]; w < bytewidth * 8 + fontstart[i]; w++)
                        {
                            if (w < chr[i].Width)
                            {
                                ba[7 - k] = chr[i].GetPixel(w, h).A == 255;
                            }
                            else
                            {
                                ba[7 - k] = false;
                            }
                            k++;
                            if (k == 8)
                            {
                                byte b = ConvertToByte(ba);
                                sendBytes.Add(b);
                                k = 0;

/*                                for (int x = 7; x > 0; x--)
 *                              {
 *                                  if (ba[x])
 *                                      Console.Write("X");
 *                                  else
 *                                      Console.Write("_");
 *                              }
 */                         }
                        }
                        //                    Console.WriteLine();
                    }
                }
            }

            if (rotation == ElementUploadRotation.ROTATE_90_DEGREES || rotation == ElementUploadRotation.BOTH_ROTATIONS)
            {
                bytewidth = font.Height % 8 > 0 ? (int)font.Height / 8 + 1 : font.Height / 8;
                for (int i = 0; i < characterCount; i++)
                {
                    sendBytes.Add((byte)FontCharset.CharList[(int)charset][i]); //An
                    sendBytes.Add((byte)(width[i] + spacing));                  //Bn
                    sendBytes.Add((byte)(width[i] + spacing));                  //Cn

                    for (int w = fontstart[i]; w < width[i] + fontstart[i] + spacing; w++)
                    {
                        BitArray ba = new BitArray(8);
                        int      k  = 0;

                        for (int h = bytewidth * 8 - 1; h >= 0; h--)
                        {
                            if (h < chr[i].Height && w < chr[i].Width)
                            {
                                ba[7 - k] = chr[i].GetPixel(w, h).A == 255;
                            }
                            else
                            {
                                ba[7 - k] = false;
                            }
                            k++;
                            if (k == 8)
                            {
                                byte b = ConvertToByte(ba);
                                sendBytes.Add(b);
                                k = 0;

/*                                for (int x = 7; x > 0; x--)
 *                              {
 *                                  if (ba[x])
 *                                      Console.Write("X");
 *                                  else
 *                                      Console.Write("_");
 *                              }
 */                         }
                        }
//                        Console.WriteLine();
                    }
                }
            }
            return(sendBytes.ToArray());
        }
        public static byte[] CustomFontStore(Font font, ZebraFont name, ElementUploadRotation rotation, FontCharsetType charset)
        {
            if (name < ZebraFont.CUSTOM_A)
            {
                throw new ApplicationException("Invalid font name selected for storing");
            }

            List<byte> sendBytes = new List<byte>();
            byte[] init = {(byte)10, (byte)'N', (byte)10, (byte)'E', (byte)'K', (byte)'"', (byte)name, (byte)'"', (byte)10,
                              (byte)'E', (byte)'S', (byte)'"', (byte)name, (byte)'"'};
            //EK"a"
            //ES"a"
            sendBytes.AddRange(init);

            int characterCount = FontCharset.CharList[(int)charset].Length;
            sendBytes.Add((byte)characterCount); //P1 - Number of characters we're sending
            sendBytes.Add((byte)(int)rotation);  //P2 - 0 - portrait, 1 - Landscape, 2 - both
            sendBytes.Add((byte)font.Height);    //P3 - Font height

            //calculate character spacing - 5% of font height or 1 dot, whichever is more
            int spacing = Math.Max(1, (int)(font.Height * 0.05));

            Bitmap[] chr = new Bitmap[characterCount];
            int currentChr;
            int[] fontstart = new int[characterCount];
            int[] width = new int[characterCount];
            int bytewidth;

            for (int i = 0; i < characterCount; i++)
            {
                //Use OEM encoding.
                currentChr = System.Text.Encoding.GetEncoding(437).GetBytes(FontCharset.CharList[(int)charset])[i];
                chr[i] = RenderChar(font, FontCharset.CharList[(int)charset][i]);

                fontstart[i] = chr[i].Width;
                int fontend = 0;
                for (int h = 0; h < chr[i].Height; h++)
                {
                    for (int w = 0; w < chr[i].Width; w++)
                    {
                        bool pixel = chr[i].GetPixel(w, h).A == 255;
                        if (pixel && w > fontend)
                            fontend = w;
                        if (pixel && w < fontstart[i])
                            fontstart[i] = w;
                    }
                }
                if (fontend < fontstart[i])
                {
                    width[i] = font.Height / 4;     //set empty character width to be 1/4 height
                    fontstart[i] = 0;
                }
                else
                    width[i] = fontend - fontstart[i] + 1 + spacing;

                if (rotation == ElementUploadRotation.NO_ROTATION || rotation == ElementUploadRotation.BOTH_ROTATIONS)
                {
                    bytewidth = width[i] % 8 > 0 ? (int)width[i] / 8 + 1 : width[i] / 8;
                    sendBytes.Add((byte)currentChr); //An - Character
                    sendBytes.Add((byte)width[i]);   //Bn - number of dots in character width (EPL manual is wrong)
                    sendBytes.Add((byte)bytewidth);  //Cn - number of bytes after padding (EPL manual is wrong)

                    for (int h = 0; h < chr[i].Height; h++)
                    {
                        BitArray ba = new BitArray(8);
                        int k = 0;

                        for (int w = fontstart[i]; w < bytewidth * 8 + fontstart[i]; w++)
                        {
                            if (w < chr[i].Width)
                                ba[7 - k] = chr[i].GetPixel(w, h).A == 255;
                            else
                                ba[7 - k] = false;
                            k++;
                            if (k == 8)
                            {
                                byte b = convertToByte(ba);
                                sendBytes.Add(b);
                                k = 0;
            /*                                for (int x = 7; x > 0; x--)
                                {
                                    if (ba[x])
                                        Console.Write("X");
                                    else
                                        Console.Write("_");
                                }
              */                          }
                        }
            //                    Console.WriteLine();
                    }
                }
            }

            if (rotation == ElementUploadRotation.ROTATE_90_DEGREES || rotation == ElementUploadRotation.BOTH_ROTATIONS)
            {
                bytewidth = font.Height % 8 > 0 ? (int)font.Height / 8 + 1 : font.Height / 8;
                for (int i = 0; i < characterCount; i++)
                {
                    sendBytes.Add((byte)FontCharset.CharList[(int)charset][i]); //An
                    sendBytes.Add((byte)(width[i] + spacing));                  //Bn
                    sendBytes.Add((byte)(width[i] + spacing));                  //Cn

                    for (int w = fontstart[i]; w < width[i] + fontstart[i] + spacing; w++)
                    {
                        BitArray ba = new BitArray(8);
                        int k = 0;

                        for (int h = bytewidth * 8 - 1; h >= 0; h--)
                        {
                            if (h < chr[i].Height && w < chr[i].Width)
                                ba[7 - k] = chr[i].GetPixel(w, h).A == 255;
                            else
                                ba[7 - k] = false;
                            k++;
                            if (k == 8)
                            {
                                byte b = convertToByte(ba);
                                sendBytes.Add(b);
                                k = 0;
            /*                                for (int x = 7; x > 0; x--)
                                {
                                    if (ba[x])
                                        Console.Write("X");
                                    else
                                        Console.Write("_");
                                }
            */                            }
                        }
            //                        Console.WriteLine();
                    }
                }
            }
            return sendBytes.ToArray();
        }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width, string text, int codepage = 850)
 {
     return(Encoding.GetEncoding(codepage).GetBytes(string.Format("^FO{0},{1}^A{2}{3},{4},{5}^FD{6}^FS", left, top, (char)font, (char)rotation, height, width, text)));
 }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width, string text)
 {
     return TextWrite(left, top, rotation, font, height, width, text, 850);
 }
 public static byte[] CustomFontDelete(ZebraFont name)
 {
     if (name != ZebraFont.CUSTOM_ALL && name < ZebraFont.CUSTOM_A)
     {
         throw new ApplicationException("Unable to delete standard fonts");
     }
     return System.Text.Encoding.GetEncoding(437).GetBytes("EK\"" + (char)name + "\"\n");
 }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width, string text, int codepage)
 {
     return Encoding.GetEncoding(codepage).GetBytes(string.Format("^FO{0},{1}^A{2}{3},{4},{5}^FD{6}^FS", left, top, (char)font,
         Rotation.ZPLRotationMap[(int)rotation], height, width, text));
 }
示例#9
0
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width = 0, string text = "", int codepage = 850)
 {
     return(string.IsNullOrEmpty(text)
         ? new byte[0]
         : Encoding.GetEncoding(codepage)
            .GetBytes($"^FO{left},{top}^A{(char) font}{(char) rotation},{height},{width}{FixTilde(text)}FH"));
 }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width, string text)
 {
     return(TextWrite(left, top, rotation, font, height, width, text, 850));
 }
示例#11
0
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font, int height, int width = 0, string text = "", int codepage = 850)
 {
     return(Encoding.GetEncoding(codepage).GetBytes($"^FO{left},{top}^A{(char)font}{(char)rotation},{height},{width}^FD{text}^FS"));
 }
 public static byte[] TextWrite(int left, int top, ElementDrawRotation rotation, ZebraFont font,
                                         int horizontalMult, int verticalMult, bool isReverse, string text, PrinterSettings settings)
 {
     return Encoding.GetEncoding(437).GetBytes(string.Format("A{0},{1},{2},{3},{4},{5},{6},\"{7}\"\n", left + settings.AlignLeft,
         top + settings.AlignTop, (int)rotation, (char)font, horizontalMult, verticalMult, isReverse ? "R" : "N",
         text.Replace(@"\", @"\\").Replace("\"", "\\\"")));
 }