You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms生成的Code128条码经Godex G300打印后无法扫描,求排查

WinForms生成Code128条码打印后无法扫描的问题排查

下面是针对你代码问题的具体分析和解决方法:

核心问题1:分辨率不匹配

Godex G300是203DPI的热敏打印机,你代码中注释掉了bmp.SetResolution(203, 203),导致生成的Bitmap使用系统默认的96DPI(屏幕分辨率)。打印时打印机按自身203DPI渲染,条码的线条宽窄比例会被强制拉伸,破坏Code128标准的条空尺寸要求,直接导致阅读器无法识别。

解决: 取消这行代码的注释,强制Bitmap分辨率与打印机一致。

核心问题2:打印时图像缩放错误

你在PrintPicture方法中使用System.Drawing.GraphicsUnit.Pixel绘制图像,但打印机的Graphics上下文基于自身203DPI,和屏幕96DPI的像素密度差异会导致图像被错误缩放,条码变形。

解决: 修改绘制逻辑,根据打印机DPI计算正确的打印尺寸,避免像素单位带来的偏差:

public void PrintPicture(object sender, PrintPageEventArgs e)
{
    Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    bmp.SetResolution(203, 203); // 必须启用这行
    pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
    
    // 根据打印机DPI计算打印尺寸
    float printerDpiX = e.Graphics.DpiX;
    float printerDpiY = e.Graphics.DpiY;
    // 把屏幕像素转成打印机适配的尺寸
    float printWidth = (bmp.Width / 96f) * printerDpiX;
    float printHeight = (bmp.Height / 96f) * printerDpiY;
    
    e.Graphics.DrawImage(bmp, 20, 20, printWidth, printHeight);
}

辅助排查点

  • 先验证生成的条码是否有效:直接扫描PictureBox中显示的条码,如果屏幕上的条码能正常扫描,说明生成环节没问题,问题完全出在打印流程。
  • 纸张尺寸匹配:确保PrintDocument的纸张尺寸设置和打印机装载的热敏纸一致,比如常用的4×6英寸:
    private void Print_Click(object sender, EventArgs e)
    {
        PrintDialog pd = new PrintDialog();
        PrintDocument pDoc = new PrintDocument();
        // 设置匹配的纸张尺寸
        pDoc.DefaultPageSettings.PaperSize = new PaperSize(PaperName.Custom, 4 * 100, 6 * 100);
        pDoc.PrintPage += PrintPicture;
        pd.Document = pDoc;
        if (pd.ShowDialog() == DialogResult.OK)
        {
            pDoc.Print();
        }
    }
    

内容的提问来源于stack exchange,提问作者User982374

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:05:28