前言
工业现场经常遇到这种需求:零件要贴标签,箱子要贴标签,托盘也要贴标签。每种标签长得不一样——有的带二维码,有的带条码,有的就几个字。每次都现写一套打印逻辑?太折腾了。
最近看到一个基于 .NET 8.0 + WPF 的标签设计与打印库,正好解决这个问题。它提供可视化设计器,画好模板保存下来,程序里替换内容直接打印。这篇文章把这个库的功能和用法梳理了一遍,供有类似需求的同行参考。
项目介绍
一个用于工业或生产系统中打印自定义标签的 .NET 库,比如零件标签、二维码标签、条码贴纸等。
核心思路很简单:在界面上画出标签的样子,保存成模板,程序运行时往模板里填数据,然后发送给打印机。
它运行在 .NET 8.0 上,UI 部分用 WPF 实现,打印时支持毫米单位换算,可以精确控制尺寸,适合对接各种条码打印机。
项目功能
可视化标签设计器:基于 WPF 的图形界面,支持拖拽摆放文字、图片、二维码、条码等元素
模板保存与加载:设计好的标签可保存为 JSON 或 XML 文件,随用随加载
可替换元素提取:通过 GetLabelElementDic 方法获取模板中所有可替换字段
动态内容替换:程序运行时替换文字、二维码内容、图片等
打印输出:通过 PrintLabel 方法发送打印任务,支持指定打印机名称
尺寸与 DPI 支持:毫米与像素自动换算,打印时精确控制尺寸和边距
项目特点
所见即所得:拖拽式设计,不需要写代码画标签
模板复用:一套模板可以反复使用,每次替换数据即可
接口简洁:整个库只暴露三个核心方法,学习成本低
支持多种元素:文字、图片、二维码、条码都能放
打印机兼容性好:支持指定打印机名称,可以对接专用标签打印机
工业场景适配:支持边距控制、毫米单位,打印精度可调
项目技术
技术项 | 选型 | 说明 |
运行时 | .NET 8.0 | 微软长期支持版本 |
UI 框架 | WPF | 用于标签设计器界面 |
模板格式 | JSON / XML | 保存标签布局和元素配置 |
打印接口 | .NET 原生打印 | 通过 PrintDialog 或指定打印机名称 |
图形渲染 | WPF 图形系统 | 绘制文字、图片、条码等元素 |
二维码生成 | 第三方库 | 生成 QR Code 等二维条码 |
项目代码
方法一:设计标签
LabelService.DesignLabel();调用后打开标签设计窗口。界面上有工具箱(文字、图片、二维码等),拖到画布上就能添加元素。每个元素可以调整位置、大小、字体、颜色。设计完成后保存为 JSON 模板文件(建议放在 Labels/ 目录下)。
方法二:获取可替换字段
var elementDic = LabelService.GetLabelElementDic("Labels/CarLabel.json");解析模板文件,返回一个 Dictionary<string, string="">,键是元素的唯一标识,值是默认内容。比如一个模板里放了三个可替换元素,返回的结果大概是这个样子的:
{ "CarNumber": "ABC123", "Date": "2025-10-21", "QRCode": "http://example.com/123"}拿到这个字典,就知道模板里有哪些地方可以填数据了。
方法三:打印标签
bool success = LabelService.PrintLabel( labelPath: "Labels/CarLabel.json", valueDic: fields, printerName: "ZDesigner ZT411", paddingMm: 2, out string message);参数说明:
参数 | 类型 | 说明 |
labelPath | string | 模板文件路径 |
valueDic | Dictionary<string, string=""> | 替换字段的键值对 |
printerName | string | 打印机名称,传空串则使用默认打印机 |
paddingMm | double | 打印边距,单位毫米 |
message | out string | 返回状态信息 |
返回 true 表示打印成功,false 则 message 里会有错误原因。
完整调用示例
using LabelDesigner;classProgram{ static void Main() { // 1. 打开标签设计器(初次使用时画模板) LabelService.DesignLabel(); // 2. 获取模板里的可替换字段 var fields = LabelService.GetLabelElementDic("Labels/CarLabel.json"); // 3. 往字段里填值 fields["CarNumber"] = "LNBSCA5K5SSA29216"; fields["Date"] = DateTime.Now.ToString("yyyy-MM-dd"); fields["QRCode"] = "https://factory.com/cars/LNBSCA5K5SSA29216"; // 4. 打印 if (LabelService.PrintLabel("Labels/CarLabel.json", fields, "ZDesigner ZT411", 2, outstring msg)) Console.WriteLine("打印成功"); else Console.WriteLine($"打印失败:{msg}"); }}设计器界面示意
设计器界面的交互逻辑大概是这样:左侧是工具箱,列着文字、图片、二维码、条码这些元素类型;中间是画布,模拟实际标签的尺寸;右侧是属性面板,点击画布上的元素可以调整字体、大小、颜色、位置等参数。画布上支持拖拽移动和缩放,整体操作习惯跟常见的排版工具差不多。
项目效果
这套库在实际使用中,解决了一个很现实的问题——让非编程人员也能画标签。以前每加一种新标签,都得让后端改代码、重新发布,现在业务人员打开设计器自己拖拽就搞定了。
设计好的模板保存为 JSON 文件后,程序里通过 GetLabelElementDic 获知哪些字段可以替换,然后把动态数据(序列号、日期、URL 等)填进去,调用 PrintLabel 发送打印任务。整个流程从"改代码-编译-部署"变成了"画模板-填数据-打印",效率提升很明显。
项目源码
使用前需要确保项目目标框架是 .NET 8.0 或以上版本,并添加必要的 NuGet 依赖(二维码生成、JSON 序列化等)。
为了防止丢失,可以在评论区留言关键字「标签打印库」,即可获取完整源码地址。
总结
这个标签设计打印库的核心价值在于把"画标签"和"打标签"两件事拆开了。画标签是设计时的工作,用 WPF 设计器拖拖拽拽就完成了,不需要写代码;打标签是运行时的工作,程序里调用三个方法就能搞定。
这种分离的设计思路,在工厂、仓库、物流这类场景里非常实用——标签样式经常变,但程序逻辑不需要跟着改。如果大家正在做一个需要打印标签的系统,又不想每次都硬编码标签布局,这套方案值得试试。
关键词
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注【加群】
推荐阅读
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力
</string,></string,>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!