Bartender 使用操作

解决常见问题,及集成开发环境

更多
c# 二次开发bartender sdk 打印源码
来源: | 作者:bartender | 发布时间: 2020-07-20 | 965 次浏览 | 分享到:
c# 二次开发bartender sdk 打印源码

 安装完bartender后,装全功能版本,在安装路径下,可以找到sdk文件,我需要根据传入的excel文件,检查bartender标签中,有没有指定的列进行打印, barterder10.0版本不支持返回当前标签文件有哪些嵌入式字段,10.1支持,所以只好装了10.1版本,安装了全功能试用版本


引用Seagull.BarTender.Print.dll即可,在安装程序目录下可以找到, 调用代码如下


using Seagull.BarTender.Print;

using System;

using System.Collections.Generic;

using System.Data;

using System.Diagnostics;

using System.Text;


namespace libPrintBarTender

{

    public class CPrinter

    {

        /// <summary>

        ///   dtPrint.Columns.Add("EZPrinter");       // 打印机名字

        ///      dtPrint.Columns.Add("EZLabelFile");     // 打印的模板文件

        ///      dtPrint.Columns.Add("EZLabelType");     // 打印的类型    Label 标签

        ///       dtPrint.Columns.Add("EZLabelCopies");   // 打印的份数

        ///       dtPrint.Columns.Add("EZPrintMission");  // 默认值1

        /// </summary>

        /// <param name="dtPrintInfo"></param>

        public void PrintLabel(DataTable dtPrintInfo)

        {

            Engine engine = null;

            LabelFormatDocument btFormat = null;

            try

            {

                if (dtPrintInfo.Rows.Count == 0)

                {

                    return;

                }

                engine = new Engine(true);

                if (engine == null)

                {

                    throw new Exception("初始化打印机失败,请检查bartender软件!");

                }


                string printerName = dtPrintInfo.Rows[0]["EZPrinter"].ToString();

                string labelFile = dtPrintInfo.Rows[0]["EZLabelFile"].ToString();

                try

                {

                    btFormat = engine.Documents.Open(labelFile, printerName);

                }

                catch (Exception ex)

                {

                    throw new Exception("打开模块与打印机失败:" + ex.Message);

                }

                // 打印标签

                PrintInfo(btFormat, dtPrintInfo);


                if (btFormat != null)

                {

                    btFormat.Close(SaveOptions.DoNotSaveChanges);

                }

                if (engine != null)

                {

                    engine.Stop(SaveOptions.DoNotSaveChanges);

                }

            }

            catch (Exception ex)

            {

                throw new Exception("打印失败:" + ex.Message);

            }

            finally

            {

            }

        }


        private static List<string> GetPrintLabelTemplateFields(LabelFormatDocument btFormat)

        {

            List<string> colLists = new List<string>(btFormat.SubStrings.Count);

            for(int i=0; i< btFormat.SubStrings.Count; i++ )

            {

                colLists.Add(btFormat.SubStrings[i].Name);

            }

            return colLists;

        }


        private static void RemoveMuchFields(LabelFormatDocument btFormat, ref DataTable dtPrintInfo)

        {

            List<string> colLists = GetPrintLabelTemplateFields(btFormat);

            int m = 0;

            while (dtPrintInfo.Columns.Count > m)

            {

                string colName = dtPrintInfo.Columns[m].ColumnName;

                if (colLists.Contains(colName))

                {

                    m++;

                    continue;

                }

                else if (string.Equals(colName, "EZLabelCopies"))

                {

                    m++;

                    continue;

                }

                else

                {

                    dtPrintInfo.Columns.RemoveAt(m);

                }

            }

        }


        private static void PrintInfo(LabelFormatDocument btFormat, DataTable dtPrintInfo)

        {

            bool bSerializedLabels = btFormat.PrintSetup.SupportsSerializedLabels;

            bool bCopies = btFormat.PrintSetup.SupportsIdenticalCopies;

            int nCopyies = 0;


            // 去除多余的字段

            RemoveMuchFields(btFormat, ref dtPrintInfo);

            if (dtPrintInfo.Columns.Count <= 1)

            {

                return;     // 没有要打印的字段了

            }


            for (int i = 0; i < dtPrintInfo.Rows.Count; i++)

            {

                string copies = dtPrintInfo.Rows[i]["EZLabelCopies"].ToString();

                nCopyies = copies.Length > 0 ? int.Parse(copies) : 1;

                if (nCopyies <= 0)

                {

                    continue;

                }


                if (bCopies)        // 打印机驱动是否支持打印份数

                {

                    btFormat.PrintSetup.IdenticalCopiesOfLabel = nCopyies;

                    nCopyies = 1;

                }


                if (bSerializedLabels)

                {

                    btFormat.PrintSetup.NumberOfSerializedLabels = 1;

                }

                for (int m = 1; m <= nCopyies; m++)

                {

                    for (int j = 0; j < dtPrintInfo.Columns.Count; j++)

                    {

                        string fieldName = dtPrintInfo.Columns[j].ToString();

                        if (string.Equals(fieldName, "EZLabelCopies"))

                        {

                            continue;

                        }

                        btFormat.SubStrings[fieldName].Value = dtPrintInfo.Rows[i][fieldName].ToString();

                    }


                    Messages messages;

                    int waitForCompletionTimeout = 10000; // 10 seconds

                    Result result = btFormat.Print("Label Print", waitForCompletionTimeout, out messages);

                    if (result == Result.Failure)

                    {

                        string messageString = "";

                        foreach (Seagull.BarTender.Print.Message message in messages)

                        {

                            messageString += "

" + message.Text;

                        }

                        throw new Exception(string.Format("打印第[{0}]标签失败,原因:{1}!", i + 1, messageString));

                    }

                }

            }

        }



    }

}

让我们看看如何帮助您
免费咨询