标签打印C#控制程序源代码,适合自己进行二次开发。 软件可以自己编辑标签,可以自动条形码或二维码的位置。
// 标尺绘制逻辑
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); // 横向刻度
g.DrawString(x.ToString(), Font, Brushes.Black, x, 16);
}
}
拖动控件时实时更新坐标这个很有意思。用Panel作为容器,给控件加上MouseDown/MouseMove事件:
// 控件拖拽核心代码
private void element_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
Control ctrl = (Control)sender;
ctrl.Location = this.PointToClient(
Control.MousePosition - new Size(dragOffset));
UpdatePositionLabel(ctrl.Location); // 实时显示坐标
}
}
重点说条码生成部分。用ZXing库实现动态二维码,注意要处理不同DPI的打印清晰度:
// 生成二维码位图
public Bitmap GenerateQrCode(string content, int width, int height)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new EncodingOptions
{
Height = height * 2, // 高分辨率处理
Width = width * 2,
Margin = 0
}
};
return new Bitmap(writer.Write(content), width, height);
}
打印模块要特别注意单位换算。这里有个毫米转像素的小技巧:
// 毫米转像素(假设96DPI)
float mmToPixel = (millimeters * 96) / 25.4f;
// 打印事件中
e.Graphics.DrawImage(barcodeImage,
new RectangleF(x * mmToPixel, y * mmToPixel,
width * mmToPixel, height * mmToPixel));
调试时发现个坑:部分打印机驱动会缩放内容。解决方法是在PrintPage事件开头设置:
e.Graphics.PageUnit = GraphicsUnit.Display; // 保持原始比例
保存模板建议用XML序列化控件属性:
// 控件位置序列化
[XmlElement("ControlPosition")]
public class TemplateControl
{
[XmlAttribute]
public int X { get; set; }
[XmlAttribute]
public int Y { get; set; }
[XmlAttribute]
public string BarcodeType { get; set; }
}
最后分享个扩展思路:用反射动态加载条码生成器,这样二次开发时添加新类型更方便。核心代码片段:
// 动态加载条码生成器
var barcodeTypes = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.GetInterfaces().Contains(typeof(IBarcodeGenerator)));
建议把设计器和打印逻辑拆分成独立类库,方便其他WinForm/WPF项目复用。实测连续打印1000张标签内存增长不到5MB,关键是要及时dispose掉GDI对象。

标签打印C#控制程序源代码,适合自己进行二次开发。 软件可以自己编辑标签,可以自动条形码或二维码的位置。

1900

被折叠的 条评论
为什么被折叠?



