winforms 如何正确打印创建的标签?

llycmphe  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(116)

我输入了一个数字并生成了一个条形码。但是,我无法从打印机打印出我想要的尺寸。我如何调整标签的尺寸?我使用的是Godex G300型号打印机。
下面是我尝试的代码:

private void GenerateBarcodeButton_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(textBox1.Text))
    {
        Zen.Barcode.Code128BarcodeDraw barcodeDraw = Zen.Barcode.BarcodeDrawFactory.Code128WithChecksum;
        pictureBox1.Image = barcodeDraw.Draw(textBox1.Text, 50);
    }
    else
        MessageBox.Show("Please enter the barcode number you want to generate.");
}
public void PrintPicture(object sender, PrintPageEventArgs e)
{
    Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
    e.Graphics.DrawImage(bmp, 0, 0);
    bmp.Dispose();
}

private void Print_Click(object sender, EventArgs e)
{
    PrintDialog pd = new PrintDialog();
    PrintDocument pDoc = new PrintDocument();
    pDoc.PrintPage += PrintPicture;
    pd.Document = pDoc;
    if (pd.ShowDialog() == DialogResult.OK)
    {
        pDoc.Print();
    }
}
dz6r00yl

dz6r00yl1#

所以有几件事要考虑(没有简短的答案,我很抱歉):
首先(可选)设置打印机中纸张或标签的介质尺寸(也可在"打印机默认值"中设置):

pDoc.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Temp", System.Convert.ToInt32((pageSize.Height / (double)96) * 100), System.Convert.ToInt32((pageSize.Width / (double)96) * 100)); //Convert from 96dpi to 100dpi

然后,在渲染图像时,您需要指定要缩放和绘制的宽度和高度:

e.Graphics.DrawImage(bmp, 0, 0, New System.Drawing.RectangleF(0, 0, width, height), System.Drawing.GraphicsUnit.Pixel)

然而,我建议保持您的图像原始宽度,以避免模糊,这可能会影响您的条形码的质量,并可能导致它被拒绝,如果在商业环境中使用。
相反,一开始就创造一个更大的形象。

e.Graphics.DrawImage(bmp, 0, 0, New System.Drawing.RectangleF(0, 0, bmp.Width, bmp.Height), System.Drawing.GraphicsUnit.Pixel)

最后,您需要考虑打印机的DPI,即203 DPI
如果您尝试以203dpi打印96dpi图像,则图像中的某些像素将在打印机上跨越非整数数量的点。当发生这种情况时,标签打印机使用称为抖动的过程,该过程将向上/向下舍入部分像素或交替像素行以达到平均值。这将导致条形码的线条比它们应该的更窄/更宽,或线条具有锯齿状边缘。
要避免这种情况,请确保您的图像DPI与打印机的DPI匹配(或者您的打印机DPI可以完全除以您的图像DPI)
其他解决方案:

  • 使用打印机支持的命令语言(EZPL:https://www.godexprinters.co.uk/desktop/g300
  • 购买标签打印软件,如CodeSoft或BarTender,您可以在其中设计标签,并通过传递标签文件路径和变量数据集在. NET中与之交互。

下面的代码对我来说是有效的(霍尼韦尔PM43c 203dpi)(注意GraphicsUnit.Pixel的使用)

public Form1()
        {
            InitializeComponent();
            pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
            pictureBox1.BackColor = Color.White;
        }

        private void GenerateBarcodeButton_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(textBox1.Text))
            {
                pictureBox1.Image = Zen.Barcode.BarcodeDrawFactory.Code128WithChecksum.Draw(textBox1.Text, 50, 2);
            }
            else
            {
                MessageBox.Show("Please enter the barcode number you want to generate.");
            }
        }

        public void PrintPicture(object sender, PrintPageEventArgs e)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
            e.Graphics.DrawImage(bmp, 20, 20, new System.Drawing.RectangleF(0, 0, bmp.Width, bmp.Height), System.Drawing.GraphicsUnit.Pixel);
        }

        private void PrintButton_Click(object sender, EventArgs e)
        {
            PrintDialog pd = new PrintDialog();
            PrintDocument pDoc = new PrintDocument();
            pDoc.PrintPage += PrintPicture;
            pd.Document = pDoc;
            if (pd.ShowDialog() == DialogResult.OK)
            {
                pDoc.Print();
            }
        }

相关问题