问题描述
我用C#调用BarTender的sdk打印条码,出现这样的问题:程序打包成.exe文件在我本机电脑安装打印没有任何问题,但是拿到用户电脑上安装却不能打印,而且没报任何错误信息,也没有什么提示信息.Bartender版本是7.75,打印机是TSCTTP-244Pro。我的电脑系统是win7系统,用户的电脑是windowsxp。代码也是在网上找的:try{BarTender.ApplicationbtApp;BarTender.FormatbtFormat;btApp=newBarTender.ApplicationClass();btApp.Visible=false;btFormat=btApp.Formats.Open(Path,false,"");btFormat.SetNamedSubStringValue(SubStringName,barcode);btFormat.PrintOut(false,false);btFormat.Close(BarTender.BtSaveOptions.btSaveChanges);}catch(Exceptionex){throwex;}
有解决过类似问题的朋友帮忙看下吧,折腾好几天了
解决方案
解决方案二:
大家早上好!论坛里有人问过这样的问题,可是没看到最后是如何解决的。
解决方案三:
把catch去掉然后增加诊断log
解决方案四:
我相信代码应该是没有问题的,因为在用户电脑上执行打印条码代码后,有成功保存到数据,并且在页面显示出来。我起初怀疑驱动不一样,后来我又在用户电脑上重装过驱动,但还是不行。
解决方案五:
我电脑上的barTender软件,打印机驱动都是在用户那边拷贝的,拿用户的打印机的在我电脑上打印,没有任何问题。
解决方案六:
//加载打印模板privateBarTender.ApplicationbtApp1;btApp1=newBarTender.Application();privateboolAutoPrint(intcount,stringcode,string_nature1,string_nature2,string_nature3){try{//StreamWriterprintOutWriter=newStreamWriter(@"E:ADC_151027Johnson.ADCJohnson.ADCJohnson.Print_EDIbinReleaseprintOut.txt");//printOutWriter.WriteLine(code);btFormat.PrintSetup.NumberSerializedLabels=1;//printnumber;btFormat.PrintSetup.IdenticalCopiesOfLabel=count;btFormat.PrintSetup.Printer=Print_NameLR;btFormat.SetNamedSubStringValue("BarDate",DateTime.Now.ToString("yyyy-MM-dd"));btFormat.SetNamedSubStringValue("Bartime",DateTime.Now.ToString("HH:mm:ss"));btFormat.SetNamedSubStringValue("Barcode1",code);btFormat.SetNamedSubStringValue("alccode",code.Substring(10,5));btFormat.SetNamedSubStringValue("sx1",_nature1);btFormat.SetNamedSubStringValue("sx2",_nature2);btFormat.SetNamedSubStringValue("sx3",_nature3);btFormat.SetNamedSubStringValue("BarCode2",code);btFormat.PrintOut(false,false);//btFormat.Close(BarTender.BtSaveOptions.btDoNotSaveChanges);//退出时是否保存标签//returntrue;}catch(Exceptionex){MessageBox.Show("打印错误"+ex.Message,"消息提示");returnfalse;}}
解决方案七:
btFormat.PrintSetup.NumberSerializedLabels=1;//printnumber;btFormat.PrintSetup.IdenticalCopiesOfLabel=count;btFormat.PrintSetup.Printer=Print_NameLR;我是没加上这几行代码,关键是在我电脑可以打印出条码,在用户电脑上不能打印.电脑上都只有一个默认打印机。不知道BarTender软件那里还要设置什么东西
解决方案八:
调用BarTender的sdk打印需要安装服务器端SLS94_2760.exe
解决方案九:
原因可能有很多。我先说下我用BarTender10.1做二次开发的感受。排除你程序的原因,你的程序只是简单的给出了引擎打开模板,赋值,打印,关闭模板的流程,根本说明不了问题。一.你只是打包.exe文件是没用的,必须部署安装包。因为你引用了Seagull.BarTender.Print这个DLL文件,它会链接到其他库。打包过后,在其他电脑上安装完成,你会发现安装目录下多了许多莫名其妙的你在程序里面没有引用的库。因为我之前犯过这个错误,必须部署安装包,你把你的DLL及.exe打包拷贝到其他电脑上没有用的,肯定用不了。二.打包过后安装到其他电脑上课可能遇到的问题。1.首先BarTender这个东西很奇怪,如果你的程序同时驱动三台以上打印机,而且你不用BarTender自己提供的驱动,只是用TSC天津国聚厂商的驱动,会发现打印机根本不受你的程序控制。所以,如果你需要驱动多台打印机,建议不要用TSC打印机厂商提供的驱动。即使你只是驱动一台,建议也用BarTender自己提供的驱动。我自己的亲身感受。2.你的模板里面打印属性,把使用数据源输入勾选上。不勾选会出错。3.还有你打印机的端口是否选择对了,如果你一台电脑上同时接上三台以上USB数据端口的打印机,你电脑开机或者插拔打印机的USB数据线的话,打印机会串的。4.你的USB数据线的长度有多长?如果超过3米的话,一般是驱动不了打印机的。因为供电会不足。建议使用1米左右的数据线。因为之前遇到过这个问题。买了跟5米的数据线,结果发现驱动不了,把数据线剪了一截,又接成3米左右的。如果你的这些问题都解决了,还出问题,就重新装下驱动。如果还出问题,那就是你程序的原因了。还有,你为什么打印一次就关闭模板,每次打印前都打开模板,打印完毕然后关闭模板,这样挺麻烦啊。你是只打印一次吗?如果是连续打印的话,引擎打开模板后,就不要把模板close了,在你不用模板后才把模板close,引擎也close。
解决方案十:
to:heihei5413我检查了下我的电脑是没有安装SLS94_2760.exe,就只装了BarTender7.75,程序引用的dll是Interop.BarTender.DLL。可以正常打印.
解决方案十一:
to:SCGH_Fx非常感谢您的详细解答。1.开始我没表达清楚,其实我也是将程序相关的dll打包成部署安装包的方式在用户端进行安装的,并不是只拷贝exe文件安装而已。我程序用到了Interop.BarTender.DLL来打印。2.我安装的驱动是从用户那里拷贝回来的,他们说那是厂商给他们的,应该没问题。3.在用户电脑那里只有一台打印机,也是设成默认打印机,当时给他们安装软件的时候我也尝试将打印机接口换了两个USB接口.但都不能打印。4.每次打印都要打开关闭操作确实不妥当,后面我会调整,谢谢你的提醒.现在的问题是我不明白为什么在我电脑上可以打印,在用户电脑就不行了,而且也没任何错误。该执行的逻辑都完成了。//1.打印条码BarTenderHelperbarTender=newBarTenderHelper(path);barTender.PrintBarcode(barcode);//2.保存条码到DBdao.SaveBarcode(barcode,LoginInfo.LoginNO);//3.在gridview中新增一行GridViewNewRow(barcode);txtBarcode.Text="";
解决方案十二:
引用10楼onlyobt的回复:
to:SCGH_Fx非常感谢您的详细解答。1.开始我没表达清楚,其实我也是将程序相关的dll打包成部署安装包的方式在用户端进行安装的,并不是只拷贝exe文件安装而已。我程序用到了Interop.BarTender.DLL来打印。2.我安装的驱动是从用户那里拷贝回来的,他们说那是厂商给他们的,应该没问题。3.在用户电脑那里只有一台打印机,也是设成默认打印机,当时给他们安装软件的时候我也尝试将打印机接口换了两个USB接口.但都不能打印。4.每次打印都要打开关闭操作确实不妥当,后面我会调整,谢谢你的提醒.现在的问题是我不明白为什么在我电脑上可以打印,在用户电脑就不行了,而且也没任何错误。该执行的逻辑都完成了。//1.打印条码BarTenderHelperbarTender=newBarTenderHelper(path);barTender.PrintBarcode(barcode);//2.保存条码到DBdao.SaveBarcode(barcode,LoginInfo.LoginNO);//3.在gridview中新增一行GridViewNewRow(barcode);txtBarcode.Text="";
问题先一个一个排除:1.不知道你检查打印机没,确定打印机是否是正常的,用其他打印软件驱动下打印机或者控制面板里面的“设备和打印机”,用打印测试页检查下。2.如果打印机能打印,再检查下模板,看是不是模板的问题,比如勾选使用数据输入等。3.xp那台电脑上有没有装BarTender。因为我的程序在几台电脑(win7)上用都是能正常使用,但前提是那几台都装了同版本的BarTender,我没试过不装BarTender能不能用程序的情况。如果没装,装上试试。4.如果上面的情况都一一排除了,最后试下win7的系统。要么给xp的换个win7,要么换台win7系统的电脑试试。因为我之前给xp系统的装10.1版本的时候,有的装不上,有的能装上,跟系统有一定的关系,但是win7的全都能装上。我之前遇到过的情况,不外乎就我回复的这些,基本都遇到过,没再遇到其他的情况了。
解决方案十三:
1.用户端的打印机是没问题的,因为我可以打印出模板的数据,测试页面也可以打印出来。2.模板数据源属性好像没有可以勾选的使用数据选项吧,我是用已命名子字串的方式传输数据给模板打印的。3.用户的电脑系统是XP,我的是win7。我想跟系统应该有些关系。目前在休假中,还没来得及测试这个。
解决方案十四:
引用12楼onlyobt的回复:
1.用户端的打印机是没问题的,因为我可以打印出模板的数据,测试页面也可以打印出来。2.模板数据源属性好像没有可以勾选的使用数据选项吧,我是用已命名子字串的方式传输数据给模板打印的。3.用户的电脑系统是XP,我的是win7。我想跟系统应该有些关系。目前在休假中,还没来得及测试这个。
如果是这样,不排除系统的原因。你用的7.75版本,我也不知道怎么设置。10.1是叫具名数据源,应该就是你图片中的那个选中的数据源项。但是你的源类型好像没选择对。我的模板一直选择的是“嵌入的数据”,没问题。你选择的是“打印机代码模板字段”,会不会是这个原因。