前置條件
- 安裝 Bartender Enterprise Automation 版(含 COM SDK)。
- 引用
Seagull.BarTender.Print.dll 或 COM BarTender.Application。
核心流程
using Seagull.BarTender.Print;
public void PrintLabels(List<LabelData> items) {
using (var engine = new Engine(true)) { // true = 無訊息模式
engine.Start();
var format = engine.Documents.Open(@"C:\Templates\label.btw");
format.PrintSetup.IdenticalCopiesOfLabel = 1;
foreach (var item in items) {
// 設置命名數據源
format.SubStrings.SetSubString("ProductName", item.Name);
format.SubStrings.SetSubString("BarcodeValue", item.Code);
format.SubStrings.SetSubString("Price", item.Price.ToString("F2"));
// 打印一張
var result = format.Print(string.Empty, 1);
if (result != Result.Success) {
Log.Error($"打印失敗: {result}, {format.PrintSetup.PrinterName}");
}
}
format.Close(SaveOptions.DoNotSaveChanges);
engine.Stop();
}
}
關鍵點
- 命名數據源:BTW 模板中建立「ProductName」「BarcodeValue」「Price」等命名數據源,代碼通過
SubStrings.SetSubString 賦值。
- Engine 生命週期:
Start() → 打印 → Stop(),避免重複啟動 Bartender 進程。
- 異常處理:捕獲
BarTenderException,記錄 Messages 屬性獲取詳細錯誤。
- 性能優化:批量打印時設置
format.PrintSetup.CachedCopies = true,或使用 PrintOut 異步隊列。
常見問題
| 現象 | 原因 | 解決 |
| 條碼掃不出 | 模板條碼類型/尺寸錯誤 | 檢查 Symbology、XDimension、QuietZones |
| 中文亂碼 | 字體不支持/編碼錯誤 | 模板字體選 Microsoft YaHei,數據源編碼 Unicode |
| 打印機離線 | 驅動/端口問題 | 用 Printers.GetPrinterNames() 確認名稱完全匹配 |