一、零依赖生成(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 %(局域网打印机)