我用C#调用BarTender 的sdk打印条码,出现这样的问题:程序打包成.exe文件在我本机电脑安装打印没有任何问题,但是拿到用户电脑上安装却不能打印,而且没报任何错误信息,也没有什么提示信息.Bartender版本是7.75,打印机是TSC TTP-244 Pro。我的电脑系统是win7系统,用户的电脑是windows xp。代码也是在网上找的:
   try
            {
                BarTender.Application btApp;
                BarTender.Format btFormat;
                btApp = new BarTender.ApplicationClass();
                btApp.Visible = false;
                btFormat = btApp.Formats.Open(Path, false, "");
                btFormat.SetNamedSubStringValue(SubStringName, barcode);
                btFormat.PrintOut(false, false);
                btFormat.Close(BarTender.BtSaveOptions.btSaveChanges);   
            }
            catch (Exception ex)
            {
                throw ex;
            }有解决过类似问题的朋友帮忙看下吧,折腾好几天了

解决方案 »

  1.   

    把catch去掉  然后增加诊断log
      

  2.   

    我电脑上的barTender软件,打印机驱动都是在用户那边拷贝的,拿用户的打印机的在我电脑上打印,没有任何问题。
      

  3.   

            //加载打印模板
       private BarTender.Application btApp1;
                    btApp1 = new BarTender.Application();        private bool AutoPrint(int count, string code, string _nature1, string _nature2, string _nature3)
            {
                try
                {
                    //StreamWriter printOutWriter = new StreamWriter(@"E:\ADC_151027\Johnson.ADC\Johnson.ADC\Johnson.Print_EDI\bin\Release\printOut.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); //退出时是否保存标签
                    //
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("打印错误" + ex.Message, "消息提示");
                    return false;
                }
            }
      

  4.   

    btFormat.PrintSetup.NumberSerializedLabels = 1; //printnumber;
                    btFormat.PrintSetup.IdenticalCopiesOfLabel = count;
                    btFormat.PrintSetup.Printer = Print_NameLR;
    我是没加上这几行代码,关键是在我电脑可以打印出条码,在用户电脑上不能打印.电脑上都只有一个默认打印机。不知道BarTender软件那里还要设置什么东西
      

  5.   

    调用BarTender 的sdk打印需要安装服务器端SLS94_2760.exe
      

  6.   


    原因可能有很多。我先说下我用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。   
      

  7.   

    to:heihei5413
    我检查了下我的电脑是没有安装SLS94_2760.exe ,就只装了BarTender7.75,程序引用的dll是Interop.BarTender.DLL。可以正常打印.
      

  8.   

    to:SCGH_Fx
    非常感谢您的详细解答。
    1.开始我没表达清楚,其实我也是将程序相关的dll打包成部署安装包的方式在用户端进行安装的,并不是只拷贝exe文件安装而已。我程序用到了Interop.BarTender.DLL来打印。
    2.我安装的驱动是从用户那里拷贝回来的,他们说那是厂商给他们的,应该没问题。
    3.在用户电脑那里只有一台打印机,也是设成默认打印机,当时给他们安装软件的时候我也尝试将打印机接口换了两个USB接口.但都不能打印。
    4.每次打印都要打开关闭操作确实不妥当,后面我会调整,谢谢你的提醒.
    现在的问题是我不明白为什么在我电脑上可以打印,在用户电脑就不行了,而且也没任何错误。该执行的逻辑都完成了。
                     //1.打印条码
                        BarTenderHelper barTender = new BarTenderHelper(path);
                        barTender.PrintBarcode(barcode);
                        //2.保存条码到DB
                        dao.SaveBarcode(barcode, LoginInfo.LoginNO);
                        //3.在gridview中新增一行
                        GridViewNewRow(barcode);
                        txtBarcode.Text = "";
      

  9.   


    问题先一个一个排除:
    1.不知道你检查打印机没,确定打印机是否是正常的,用其他打印软件驱动下打印机或者控制面板里面的“设备和打印机”,用打印测试页检查下。
    2.如果打印机能打印,再检查下模板,看是不是模板的问题,比如勾选使用数据输入等。
    3.xp那台电脑上有没有装BarTender。因为我的程序在几台电脑(win7)上用都是能正常使用,但前提是那几台都装了同版本的BarTender,我没试过不装BarTender能不能用程序的情况。如果没装,装上试试。
    4.如果上面的情况都一一排除了,最后试下win7的系统。要么给xp的换个win7,要么换台win7系统的电脑试试。因为我之前给xp系统的装10.1版本的时候,有的装不上,有的能装上,跟系统有一定的关系,但是win7的全都能装上。我之前遇到过的情况,不外乎就我回复的这些,基本都遇到过,没再遇到其他的情况了。
      

  10.   

    1.用户端的打印机是没问题的,因为我可以打印出模板的数据,测试页面也可以打印出来。
    2.模板数据源属性好像没有可以勾选的使用数据选项吧,我是用已命名子字串的方式传输数据给模板打印的。3.用户的电脑系统是XP,我的是win7。 我想跟系统应该有些关系。目前在休假中,还没来得及测试这个。
      

  11.   

    很有可能是版本的问题,资料说是要 bartender 9 以后的版本才支持SDK打印
      

  12.   

      我和你的情况十分相似,客户机系统是Xp的,bartender版本是9.0的,开发机是win7的系统,安装的是bartender10.0,引用的是seagull.bartender.print.dll.在本机和,其他安装有bartender10.0的电脑上都可以运行。所以我判定需要安装与引用文件版本一致的bartender才可以成功执行。
      

  13.   

    我来告诉大家原因吧,终于被我找到原因了bartend9.4 这个版本,由于调用 com,不能设置打印机,如果要要自动打印,首先是设置模板, 设置模板的第一步,会要你选择打印机(这个是重点,敏感点), 就是说你的模板设置的打印机,必须是你要打印的打印机,你拿你的在本地计算机本地打印机设置好的模板,放到别的地方是打印不出来的,或者 本地打印机与远程打印机是一样的名字,一样的驱动。