1. 项目概述
今天给大家分享一个我最近开发的C#标签打印程序的核心实现方案。这个项目最初源于我们公司内部对标签打印系统的需求——需要能够灵活设计各种规格的产品标签,支持动态生成条形码/二维码,并且要保证打印精度。市面上的商业软件要么功能过剩,要么定制性不足,于是我决定自己开发一套轻量级解决方案。
这套系统的核心价值在于:
- 可视化标签设计器:通过GDI+实现标尺、拖拽定位等设计功能
- 动态条码生成:集成ZXing库支持各类一维/二维码生成
- 打印精度控制:解决不同DPI设备的适配问题
- 模板化设计:XML序列化保存标签模板
- 高性能打印:实测连续打印1000张标签内存增长<5MB
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模块实现
2.1 设计器界面实现
设计器的核心是标尺系统和拖拽定位功能。我们先来看标尺绘制:
csharp复制private void DrawRuler(Graphics g, int step)
{
using var pen = new Pen(Color.Gray, 0.5f);
for (int x = 0; x < this.Width; x += step)
{
g.DrawLine(pen, x, 0, x, 15); // 横向刻度
if (x % 50 == 0) // 每50像素显示数字
g.DrawString(x.ToString(), Font, Brushes.Black, x, 16);
}
// 垂直标尺同理
}
关键技巧:标尺更新需要放在Paint事件中,并设置DoubleBuffered=true避免闪烁
拖拽功能的实现要点:
csharp复制private Point dragOffset;
private bool isDragging;
private void element_MouseDown(object sender, MouseEventArgs e)
{
isDragging = true;
dragOffset = e.Location;
((Control)sender).BringToFront();
}
private void element_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging && e.Button == MouseButtons.Left)
{
Control ctrl = (Control)sender;
Point newPos = this.PointToClient(
Control.MousePosition) - new Size(dragOffset);
// 对齐到网格(可选)
int gridSize = 5;
newPos.X = (newPos.X / gridSize) * gridSize;
newPos.Y = (newPos.Y / gridSize) * gridSize;
ctrl.Locatio
