Печать сгенерированного штрих-кода - PullRequest
0 голосов
/ 17 апреля 2019

Вкратце, я пытаюсь распечатать сгенерированный код с использованием библиотеки Zen и «Xprinter XP-235B», все кажется и работает хорошо, кроме принтера, так как он печатает сгенерированный штрих-код неправильно: -

  1. Сначала он пропускает 2 этикетки и печатает на третьей.

  2. иногда печатаю его не полностью, плюс, выравнивание не по центру.

и это код, который я использую

 private void txt_BarcodeGenerator_Click(object sender, EventArgs e)
        {
            if (txt_BarcodeGenerator.Text == "")
            {
                MessageBox.Show("قم بصنع باركود جديد بالضغط انتر ف حقل الباركود", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                Zen.Barcode.Code128BarcodeDraw barcode = Zen.Barcode.BarcodeDrawFactory.Code128WithChecksum;
                var barcodeImage = barcode.Draw(txt_BarcodeGenerator.Text, 50);

                var resultImage = new Bitmap(barcodeImage.Width, barcodeImage.Height + 20); // 20 is bottom padding, adjust to your text

                using (var graphics = Graphics.FromImage(resultImage))
                using (var font = new Font("Consolas", 10))
                using (var brush = new SolidBrush(Color.Black))
                using (var format = new StringFormat()
                {
                    Alignment = StringAlignment.Center, // Also, horizontally centered text, as in your example of the expected output
                    LineAlignment = StringAlignment.Far
                })
                {
                    graphics.Clear(Color.White);
                    graphics.DrawImage(barcodeImage, 0, 0);
                    graphics.DrawString(txt_BarcodeGenerator.Text, font, brush, resultImage.Width / 2, resultImage.Height, format);
                }

                pictureBox1.Image = resultImage;
                txt_BarcodeGenerator.Clear();
                txt_BarcodeGenerator.Focus();
            }
        }

   private void btn_PrintBarcode_Click(object sender, EventArgs e)
        {
            ((Form)printPreviewDialog1).WindowState = FormWindowState.Maximized;
            PrintDialog myPrinDialog1 = new PrintDialog();
            if (myPrinDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();             
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //e.Graphics.DrawImage(, 0, 0);
            //Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            //pictureBox1.DrawToBitmap(bm, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
            //e.Graphics.DrawImage(bm, 0, 0);
            e.Graphics.DrawImage(pictureBox1.Image, 0, 0);
        }
...