C# 使用 PrintDocument 类实现标签打印(二维码与条形码)
在 RFID 资产管理等场景中,常需将数据以标签形式打印在不干胶上。本文展示如何使用 C# 的 PrintDocument 类,配合 ZXing 库绘制包含文字、二维码及条形码的自定义标签,并解决打印机参数配置与布局问题。
设置打印机参数
在实际打印前,确保物理标签纸已装入对应的标签打印机(如 ZDesigner GX430t)。需在 Windows 系统或代码中确认打印机驱动正常,并根据实际标签尺寸设置纸张规格。以下图示展示了打印机属性中的纸张设置界面:
在 C# 代码中,实例化 PrintDocument 并绑定打印事件。关键步骤包括指定目标打印机名称以及关闭打印预览控制器以实现静默后台打印:
/// <summary>
/// 初始化并触发打印
/// </summary>
private void Myprinter()
{
PrintDocument pd = new PrintDocument();
// 绑定页面绘制事件
pd.PrintPage += new PrintPageEventHandler(printDocument_PrintA4Page);
// 指定具体的打印机名称
pd.DefaultPageSettings.PrinterSettings.PrinterName = "ZDesigner GX430t";
// 可选:设置横向打印(默认纵向)
//pd.DefaultPageSettings.Landscape = true;
// 隐藏“正在打印...”状态栏和打印队列窗口,实现后台直接出纸
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
pd.Print();
}
配置标签页面布局
标签内容的排版依赖于 Graphics 对象的坐标定位。在 PrintPage 事件中,通过定义字体、画刷和 Pen 来绘制文本和线条。建议先预留足够边距,根据实际标签宽高调整 X/Y 轴坐标。
private void printDocument_PrintA4Page(object sender, PrintPageEventArgs e)
{
// 1. 定义字体样式
Font titleFont = new Font("黑体", 11, System.Drawing.FontStyle.Bold);
Font fntTxt = new Font("宋体", 10, System.Drawing.FontStyle.Regular);
Font fntTxt1 = new Font("宋体", 8, System.Drawing.FontStyle.Regular);
// 2. 定义颜色和绘图工具
System.Drawing.Brush brush = new SolidBrush(System.Drawing.Color.Black);
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Black);
try
{
// 绘制标题
e.Graphics.DrawString("标题name", titleFont, brush, new Point(20, 10));
// 绘制分隔线
Point[] points111 = { new Point(20, 28), new Point(230,28) };
e.Graphics.DrawLines(pen, points111);
// 绘制资产编号与序号
e.Graphics.DrawString("资产编号:", fntTxt, brush, new Point(20, 31));
e.Graphics.DrawString("123456789123465", fntTxt, brush, new Point(80, 31));
e.Graphics.DrawString("资产序号:", fntTxt, brush, new Point(20, 46));
e.Graphics.DrawString("123456789131321", fntTxt, brush, new Point(80, 46));
// 绘制底部文字
e.Graphics.DrawString("底部name", fntTxt1, brush, new Point(100, 62));
// 生成并绘制二维码
Bitmap bitmap = CreateQRCode("此处为二维码数据");
e.Graphics.DrawImage(bitmap, new Point(240, 10));
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}
生成二维码与一维码
标签通常包含二维码或条形码用于扫码识别。这里使用 ZXing.Net 库(需引用 zxing.dll)进行生成。生成的图片需转换为 Bitmap 以便在 Graphics 中绘制。
1. 二维码生成方法:
/// <summary>
/// 创建二维码
/// </summary>
public static Bitmap CreateQRCode(string asset)
{
EncodingOptions options = new QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8", // 指定编码格式
Width = 80, // 图片宽度
Height = 80 // 图片高度
};
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
writer.Options = options;
return writer.Write(asset);
}
2. 一维码(条形码)生成方法:
一维码对宽高有严格要求,Width 和 Height 必须显式指定:
/// <summary>
/// 创建一维码(Code 128)
/// </summary>
public static Bitmap CreateCode(string asset)
{
// 1. 设置条形码规格
EncodingOptions options = new EncodingOptions();
options.Height = 40; // 必须制定高度
options.Width = 120; // 必须制定宽度
// 2. 生成条形码图片
BarcodeWriter writer = new BarcodeWriter();
writer.Options = options;
writer.Format = BarcodeFormat.CODE_128; // 选择条形码类型
return writer.Write(asset); // 返回 Bitmap
}
打印效果验证
完成上述代码配置后,执行打印命令即可输出包含资产信息与可扫条码的标签。下图为实际打印出的不干胶标签效果示例:
若发现内容位置偏移或错位,请检查:
1. 坐标系原点是否与设计稿一致;
2. 打印机 DPI 是否与屏幕 DPI 存在较大差异(可通过 e.Graphics.DpiX / e.Graphics.DpiY 获取并进行比例换算);
3. 标签纸的原始边距设置是否在驱动层面进行了校准。
以上就是 C# 使用 PrintDocument 类实现标签打印的详细内容,更多关于 C# 打印相关技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













