C#联合CODESOFT标签在线列印软件:源代码与图片输出功能
·
C#联合CODESOFT标签在线列印软件,源代码,适合自己做二次开发标签在线列印软件。 里面可以选择不同的图片进行输出。

最近在折腾标签打印系统的时候,发现CODESOFT这玩意儿对C#开发者是真香。特别是需要给产线做定制化打印工具的场景,直接拿它的COM组件撸代码,比从零造轮子省事太多了。先上段硬核操作——用C#动态替换标签里的图片,这需求在产线换标时绝对高频。

装好CODESOFT之后,先把COM引用怼进项目。NuGet里搜AxAutomation,直接命令行敲:
Install-Package AxAutomation -Version 2022.2.1
这时候工程里会出现个axCodeSoftDesigner控件,咱们在WinForm里拖个面板就能开始整活了。

核心代码段长这样:
var doc = new Document();
doc.Open(@"D:\Templates\label.lab"); //加载模板文件
//暴力替换图片节点
foreach (var obj in doc.Objects)
{
if (obj.Type == ObjectType.Picture)
{
var pic = (PictureObject)obj;
if (pic.Name == "productLogo")
{
pic.Image = File.ReadAllBytes(selectedImagePath); //用户选择的图片
pic.Stretch = true; //自动拉伸适应标签区域
}
}
}
//触发打印不要用默认队列
var printer = new Printer();
printer.Document = doc;
printer.PrintOut(Copies:3, WaitUntilFinished:true); //连打三份保平安
这里有个坑要注意——图片对象必须通过COM的PictureObject类型强转,直接取对象属性会丢元数据。有个骚操作是用LINQ过滤对象集合,比传统的for循环优雅不少:
var targetPic = doc.Objects.OfType<PictureObject>()
.FirstOrDefault(p => p.Name == "dynamicBarcode");
if(targetPic != null)
{
targetPic.Image = GenerateBarcodeImage(); //自己生成条码图的方法
}
实际部署时记得处理权限问题,在app.config里加上:
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
</runtime>
否则某些老版本COM组件会抛访问异常。遇到过最玄学的问题是图片路径带中文时加载失败,后来发现得在注册表HKEYLOCALMACHINE\SOFTWARE\CODESOFT里把字符集改成GBK才搞定。

二次开发时建议封装个LabelPrinterService类,把打印队列、错误重试这些脏活隔离。比如这样处理打印超时:
public void SafePrint(Document doc)
{
try
{
using (var printer = new Printer())
{
printer.Document = doc;
printer.PrintOut(Timeout: 15000); //15秒超时
}
}
catch (COMException ex) when (ex.ErrorCode == 0x80010105) //服务器忙错误
{
Thread.Sleep(2000);
RetryCount++; //最多重试三次
}
}
搞完这些再套个WPF的MVVM框架,配合Prism的事件聚合器,轻松实现多终端同步打印。最后扔个异步任务包装,UI再也不卡顿了:
async Task PrintLabelAsync()
{
await Task.Run(() =>
{
//耗时的打印操作扔后台线程
_printerService.ProcessQueue();
});
}
这套组合拳打下来,产线小哥再也不用守着打印机狂按F5了。下次打算试试用Blazor搞个网页端配置界面,毕竟.NET全栈才是终极奥义。


更多推荐

所有评论(0)