使用BarTender打印的相关问题
一:使用方法:使用bartender提供的库,Seagull.BarTender.Print.dll,winfrom控件点击调用
二:代码如下:
/// <summary>
///
/// </summary>
/// <param name="datas">数据源</param>
/// <param name="btwPath">标签路径</param>
/// <param name="pirntName">打印机名</param>
/// <param name="PrintNubmer">打印数量</param>
public void DoPrint(Dictionary<string,string> datas,string btwPath,string pirntName,int PrintNubmer = 1)
{
//1.初始化打印对象
Engine btEngine = new Engine();
bool isAlive = btEngine.IsAlive;
btEngine.Start();
var btwFilePath = $@"{btwPath}";
//2.初始化标签模板
LabelFormatDocument btFormat = btEngine.Documents.Open(btwFilePath);//这里是Bartender软件生成的模板文件,你需要先把模板文件做好。
btFormat.PrintSetup.PrinterName = pirntName;
btFormat.PrintSetup.IdenticalCopiesOfLabel = PrintNubmer; //打印份数
Messages messages;
int waitout = 10000; // 10秒 超时
//3.处理数据对象
//Dictionary<string, string> datas = new Dictionary<string, string>();
//datas.Add("QTY", "0123");
//datas.Add("BinCode", "MVO9876543210");
if (btFormat.SubStrings.Count != 0)
{
//便利标签需要的数据
foreach (var subItem in btFormat.SubStrings)
{
//判断数据源里有没有
var data = datas.Where(x => x.Key == subItem.Name).ToList();
if (data != null && data.Count != 0)
{
subItem.Value = data.FirstOrDefault().Value;
}
}
}
Result nResult = btFormat.Print("标签打印软件", waitout, out messages);
btFormat.PrintSetup.Cache.FlushInterval = CacheFlushInterval.PerSession;
btFormat.Close(SaveOptions.DoNotSaveChanges);//不保存对打开模板的修改
btEngine.Stop();
}
三:调试过程中遇到的相关问题:
1.情况一:
1)报错内容:“versionxxx找不到引用”
2)问题原因:通常是dll文件出错,bartender版本不对等等,解决方式是重新找对的dll引用。
2.情况二:
1)报错内容:混合模式xxx”
2)问题原因:通常是.net版本更迭后出现的报错,解决方法为修改app.config文件。
3)备注:如果doprint方法和引用类型不在同一项目种,则引用doprint方法的项目也要修改app.config文件。
修改app.config文件内容如下:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>