【基于C#实现Bartender多条码打印的示例】

发布于:2025-03-11 ⋅ 阅读:(123) ⋅ 点赞:(0)

以下是基于C#实现Bartender多条码打印的示例代码,结合模板数据绑定与批量打印逻辑实现:

using Seagull.BarTender.Print;
using System;
using System.Collections.Generic;

public class BartenderMultiBarcodePrinter
{
    public void PrintMultipleBarcodes(List<BarcodeData> barcodeList)
    {
        // 初始化Bartender应用实例‌:ml-citation{ref="7" data="citationList"}
        using (Engine btEngine = new Engine())
        {
            try
            {
                // 加载模板文件(模板需预先设计多列布局)‌:ml-citation{ref="3,6" data="citationList"}
                LabelFormatDocument btFormat = btEngine.Documents.Open(@"D:\Templates\MultiBarcode.btw");

                // 配置打印参数‌:ml-citation{ref="4" data="citationList"}
                btFormat.PrintSetup.IdenticalCopiesOfLabel = 1;
                btFormat.PrintSetup.PrinterName = "Zebra_ZT420";

                foreach (var data in barcodeList)
                {
                    // 动态设置多个条码数据源‌:ml-citation{ref="3,4" data="citationList"}
                    btFormat.SubStrings["Barcode1"].Value = data.Code1;
                    btFormat.SubStrings["Barcode2"].Value = data.Code2;
                    btFormat.SubStrings["Barcode3"].Value = data.Code3;

                    // 执行无对话框打印‌:ml-citation{ref="5" data="citationList"}
                    btFormat.Print("PrintJob1", 5000); // 设置5秒超时
                }

                btFormat.Close(SaveOptions.DoNotSaveChanges);
            }
            catch (Exception ex)
            {
                // 错误处理‌:ml-citation{ref="4,5" data="citationList"}
                Console.WriteLine($"打印失败: {ex.Message}");
                throw;
            }
            finally
            {
                btEngine.Stop();
            }
        }
    }
}

// 数据实体类(对应模板中的具名数据源)‌:ml-citation{ref="1" data="citationList"}
public class BarcodeData
{
    public string Code1 { get; set; }
    public string Code2 { get; set; }
    public string Code3 { get; set; }
}

/* 调用示例:
var dataList = new List<BarcodeData> {
    new BarcodeData { Code1="A001", Code2="B001", Code3="C001" },
    new BarcodeData { Code1="A002", Code2="B002", Code3="C002" }
};
new BartenderMultiBarcodePrinter().PrintMultipleBarcodes(dataList);
*/

‌技术要点说明‌:

‌模板设计要求‌

Bartender模板中需预先创建三个具名数据源(Barcode1、Barcode2、Barcode3)‌
采用多列布局(如一行三列),每个条码控件分别绑定对应数据源‌6
‌批量处理机制‌

通过遍历BarcodeData集合实现连续打印‌
每个迭代周期更新数据源值,触发新标签生成‌
‌性能优化‌

使用using语句管理引擎生命周期,避免资源泄漏‌
设置5秒打印超时参数,防止进程假死‌
‌扩展性设计‌

数据实体类与模板字段解耦,支持灵活调整打印内容‌
可修改数据集合长度实现动态打印数量控制‌
‌执行流程‌:
初始化引擎 → 加载模板 → 遍历数据集 → 绑定数据源 → 静默打印 → 资源释放‌

该方案适用于需要单次触发打印多个独立条码的场景(如产品包装箱的三联标签打印),通过代码与模板的配合实现高效输出‌。