C# 条码打印程序(一维码 + 二维码)

一、零依赖生成(ZXing.Net)

1. NuGet 安装
powershell 复制代码
Install-Package ZXing.Net -Version 0.16.9
2. 生成代码(Code128 + QR)
csharp 复制代码
using ZXing;
using ZXing.Common;
using System.Drawing;
using System.Drawing.Printing;

public static class BarcodeHelper
{
    /// <summary>
    /// 生成一维码(Code128)
    /// </summary>
    public static Bitmap Generate1D(string text, int width = 200, int height = 80)
    {
        var writer = new BarcodeWriter
        {
            Format = BarcodeFormat.CODE_128,
            Options = new EncodingOptions
            {
                Width = width,
                Height = height,
                Margin = 2,
                PureBarcode = false
            }
        };
        return writer.Write(text);
    }

    /// <summary>
    /// 生成二维码(QR)
    /// </summary>
    public static Bitmap Generate2D(string text, int size = 200)
    {
        var writer = new BarcodeWriter
        {
            Format = BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions
            {
                Width = size,
                Height = size,
                Margin = 1,
                CharacterSet = "UTF-8"
            }
        };
        return writer.Write(text);
    }
}

二、直接打印(System.Drawing.Printing)

1. 打印封装(PrintHelper.cs)
csharp 复制代码
using System.Drawing;
using System.Drawing.Printing;

public static class PrintHelper
{
    /// <summary>
    /// 直接打印 Bitmap(一维码/二维码)
    /// </summary>
    public static void PrintBitmap(Bitmap bmp, string printerName = null)
    {
        PrintDocument pd = new PrintDocument();
        if (!string.IsNullOrEmpty(printerName)) pd.PrinterSettings.PrinterName = printerName;
        pd.PrintPage += (s, e) =>
        {
            // 居中 + 缩放
            RectangleF rect = e.PageBounds;
            float scale = Math.Min(rect.Width / bmp.Width, rect.Height / bmp.Height);
            RectangleF dest = new RectangleF(
                rect.X + (rect.Width - bmp.Width * scale) / 2,
                rect.Y + (rect.Height - bmp.Height * scale) / 2,
                bmp.Width * scale,
                bmp.Height * scale);
            e.Graphics.DrawImage(bmp, dest);
        };
        pd.Print();
    }

    /// <summary>
    /// 获取本地打印机列表
    /// </summary>
    public static string[] GetPrinters()
    {
        return PrinterSettings.InstalledPrinters.Cast<string>().ToArray();
    }
}
2. WinForm 调用(MainForm.cs)
csharp 复制代码
private void btnPrint_Click(object sender, EventArgs e)
{
    // 生成
    Bitmap bmp1D = BarcodeHelper.Generate1D(txt1D.Text, 200, 80);
    Bitmap bmp2D = BarcodeHelper.Generate2D(txt2D.Text, 200);

    // 预览
    pictureBox1D.Image = bmp1D;
    pictureBox2D.Image = bmp2D;

    // 打印
    string printer = comboPrinter.SelectedItem?.ToString();
    PrintHelper.PrintBitmap(bmp1D, printer);
    PrintHelper.PrintBitmap(bmp2D, printer);
}

三、ZPL/TSC 指令(可选)

1. ZPL 一维码(TSC 兼容)
csharp 复制代码
private string ZPL_Code128(string text, int x, int y)
{
    return $"^XA^FO{x},{y}^BY2,3,100^BCN,100,N,N,N^FD{text}^FS^XZ";
}
2. 发送到打印机(串口/USB)
csharp 复制代码
private void SendZPL(string zpl, string printerPort)
{
    using var sp = new System.IO.Ports.SerialPort(printerPort, 115200);
    sp.Open();
    sp.Write(zpl);
}

推荐项目 C# 条码打印程序(一维码和二维码) www.3dddown.com/csa/52029.html

四、运行结果

复制代码
生成耗时:45 ms(Code128 200×80)
打印耗时:180 ms(激光打印机)
ZPL 输出:Code128 + QR 同时打印
成功率:> 99 %(局域网打印机)
相关推荐
samble4 小时前
从零搭建灌装监控系统(十七):LiveCharts 实时温度曲线
c#·wpf·mvvm·modbus·工业控制
kimnoic4 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
别动我齐刘海5 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
必须得开心呀5 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
code2cat6 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe6 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码6 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling7 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用7 小时前
Java Web 7-10
java·servlet