『7x24小时有问必答』
前言
工业现场经常遇到这种需求:零件要贴标签,箱子要贴标签,托盘也要贴标签。每种标签长得不一样——有的带二维码,有的带条码,有的就几个字。每次都现写一套打印逻辑?太折腾了。
最近看到一个基于 .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
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看
</string,></string,>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码