首页 > 代码库 > c# 条码打印—电子监管码打印

c# 条码打印—电子监管码打印

  说到条码打印,很多人会说直接调用诸如codesoft 或者bartender之类的软件来打印。没错,简单单独打印是可以使用这些方法。但实际项目应用中所需要的条码打印功能却很复杂,必须结合公司的业务软件才能很到位的打印条码。这时候,咱们不能依赖别人给的软件来打印,必须自己写代码耦合应用程序中去。看下图:

  如何打印中国药品电子监管码的条码?看起来很容易,实际上生成药品监管码有一定的命名规则。在这里就不说了,自己上网看一下就明白了。以后大家买药前也可以去http://www1.drugadmin.com/ 中国药品电子监管平台,查看一下自己买的是否真假。可以在系统 上追朔药品流向情况【包括、生产厂商是谁,卖给谁了,谁又批发给谁了,该药品通过合不合格,质检机构是。。。】我还是附上药品监管码组成的一些常识,给偷懒的自己一个交代。

    1. 普通药品的监管码文件名称系统自动生成,生成规则是“药品通用名_申请单号_码开始序列号(20位监管码的前16位)_-文件序号(3位数字)_包装规格_包装级别”

    例:复方苦参注射液_20090813-1_8200008400050520-000_盒5瓶_1

    药品名称:复方苦参注射液;

    申请单号:20090813-1;

    码开始序列号:8200008400050520;

    文件序号:000

    包装规格:盒5支

    包装级别:1(包装级别中,1为最小包装)

    2. 各级外包装的产品名称定义规则为,外包装药品通用名=最小包装药品通用名+—+该包装包括的最小包装数量+最小包装单位。

     例:企业填写鱼腥草注射液2ml 5只装/盒的药品,包装比例1:10:100。则系统需要生成中包装、大包装的药品通用名,分别为鱼腥草注射液—10盒,鱼腥草注射液—100盒。

 

二、不好意思,题外话太多了。如何自定义打印条码功能?

 第一步:vs建立打印模板[报表]

    

           

                

 

 第二步:配置好条码打印机和打印字体【略】

第三步:调用自定义类,打印。

打印调用代码如下:

 private void print_package_box(DataTable dt)        {            SourceApp.report.print_code ss = new report.print_code();            string[] Parameter = new string[4];            Parameter[0] = "条码";            Parameter[1] = get_code128(dt.Rows[0]["业务员编号"].ToString() + "/" + dt.Rows[0]["日期"].ToString());            Parameter[2] = "条码内容";            Parameter[3] = dt.Rows[0]["业务员编号"].ToString() + "/" + dt.Rows[0]["日期"].ToString();            ss.print_report(dt, "SourceApp.report.OutSumPrint.rdlc", Parameter);        }        static public string get_code128(string code_comment)        {            //string str ="";            string result;            int checksum = 104;            for (int i = 0; i < code_comment.Length; i++)            {                if (code_comment[i] >= 32)                {                    checksum += (code_comment[i] - 32) * (i + 1);                }                else                {                    checksum += (code_comment[i] + 64) * (i + 1);                }            }            checksum = checksum % 103;            if (checksum < 95)            {                checksum += 32;            }            else            {                checksum += 100;            }            //result = Convert.ToChar(204) + checksum.ToString() +            //    Convert.ToChar(checksum) + Convert.ToChar(206);            result = Convert.ToChar(204) + code_comment +               Convert.ToChar(checksum) + Convert.ToChar(206);            return result;        }

  自定义打印类如下:

  1  /// <summary>  2     /// 条码打印基础类  3     /// </summary>  4    public class print_code  5     {  6   7         private IList<Stream> m_streams;  8         private int m_currentPageIndex;  9         DataTable dt = new DataTable(); 10         private string _errormessage = ""; 11         private string m_ReportName = string.Empty; 12         public bool PPrint(LocalReport report) 13         { 14             try 15             { 16                 Export(report); 17                 m_currentPageIndex = 0; 18                 if (!NBPrint()) 19                 { 20                     return false; 21                 } 22                 if (m_streams != null) 23                 { 24                     foreach (Stream stream in m_streams) 25                         stream.Close(); 26                     m_streams = null; 27                 } 28                 return true; 29             } 30             catch (Exception ex) 31             { 32                 _errormessage = "在打印过程中出现异常!"; 33                 return false; 34             } 35  36         } 37  38         public bool NBPrint() 39         { 40             if (m_streams == null || m_streams.Count == 0) 41             { 42                 _errormessage = "在打印过程中出现异常!"; 43                 return false; 44             } 45             PrintDocument printDoc = new PrintDocument(); 46             //printDoc.PrinterSettings. 47             printDoc.DocumentName = "×××××公司报表打印"; 48             // 49            50             const string printerName = @"\\127.0.0.1\ZDesigner GT800 (EPL) (副本 3)"; 51            // MainForm.code_print_name = "\\\\127.0.0.1\\ZDesigner GT800 (EPL) (副本 6)"; 52             if (MainForm.code_print_name != "") 53             { 54                 printDoc.PrinterSettings.PrinterName = MainForm.code_print_name;//printerName;//MainForm.code_print_name; 55             } 56             //printDoc.pri 57             if (!printDoc.PrinterSettings.IsValid) 58             { 59                 _errormessage = "请添加默认打印机!"; 60                 return false; 61             } 62  63             printDoc.PrintPage += new PrintPageEventHandler(PrintPage); 64             printDoc.Print(); 65             return true; 66         } 67         public void PrintPage(object sender, PrintPageEventArgs ev) 68         { 69             Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); 70             //ev.PageSettings.Landscape = false; 71             ev.Graphics.DrawImage(pageImage, ev.PageBounds); 72             m_currentPageIndex++; 73             ev.HasMorePages = (m_currentPageIndex < m_streams.Count); 74         } 75         public void Export(LocalReport report) 76         { 77              78             string deviceInfo = 79                    "<DeviceInfo>" + 80             "  <OutputFormat>EMF</OutputFormat>" + 81             "  <PageWidth>10.0cm</PageWidth>" + 82             "  <PageHeight>5.0cm</PageHeight>" + 83             "  <MarginTop>0.0cm</MarginTop>" + 84             "  <MarginLeft>0.0cm</MarginLeft>" + 85             "  <MarginRight>0.0cm</MarginRight>" + 86             "  <MarginBottom>0.0cm</MarginBottom>" + 87             "</DeviceInfo>"; 88              89             Warning[] warnings; 90             m_streams = new List<Stream>(); 91             report.Render("Image", deviceInfo, CreateStream, out warnings); 92             //report.Render("EXCEL", deviceInfo, CreateStream, out warnings); 93             foreach (Stream stream in m_streams) 94             { 95                 stream.Position = 0; 96             } 97         } 98  99         private Stream CreateStream(string name, string fileNameExtension,100       Encoding encoding, string mimeType, bool willSeek)101         {102             Stream stream = new FileStream(name + "." + fileNameExtension,103          FileMode.Create);104             try105             {106               107                 m_streams.Add(stream);108               109             }110             catch (Exception)111             {112                 113               114             }115             return stream;116         }117 118         public void print_report(DataTable dt, string report_paths, string[] Parameter)119         {120             LocalReport report = new LocalReport();121             report.ReportEmbeddedResource = report_paths;122             if (Parameter != null)123             {124                 ReportParameter[] Paramet = new ReportParameter[Parameter.Length / 2];125                 for (int i = 0; i < Parameter.Length / 2; i++)126                 {127                     Paramet[i] = new ReportParameter(Parameter[i * 2], Parameter[i * 2 + 1]);128                 }129                 if (Paramet.Length == 1)130                     report.SetParameters(new ReportParameter[] { Paramet[0] });131                 else if (Paramet.Length == 2)132                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1] });133                 else if (Paramet.Length == 3)134                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2] });135                 else if (Paramet.Length == 4)136                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3] });137                 else if (Paramet.Length == 5)138                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3], Paramet[4] });139                 else if (Paramet.Length == 6)140                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3], Paramet[4], Paramet[5] });141                 else if (Paramet.Length == 7)142                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3], Paramet[4], Paramet[5], Paramet[6] });143 144                 else if (Paramet.Length == 8)145                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3], Paramet[4], Paramet[5], Paramet[6], Paramet[7] });146                 else if (Paramet.Length == 9)147                     report.SetParameters(new ReportParameter[] { Paramet[0], Paramet[1], Paramet[2], Paramet[3], Paramet[4], Paramet[5], Paramet[6], Paramet[7], Paramet[8] });148                 else if (Paramet.Length == 33)149                     report.SetParameters(new ReportParameter[] { Paramet[0],Paramet[1],Paramet[2],Paramet[3],Paramet[4],Paramet[5], 150                                                                             Paramet[6],Paramet[7],Paramet[8],Paramet[9],Paramet[10],151                                                                             Paramet[11],Paramet[12],Paramet[13],Paramet[14],Paramet[15],152                                                                             Paramet[16],Paramet[17],Paramet[18],Paramet[19],Paramet[20],153                                                                             Paramet[21],Paramet[22],Paramet[23],Paramet[24],Paramet[25],154                                                                             Paramet[26],Paramet[27],Paramet[28],Paramet[29],Paramet[30],Paramet[31],//Paramet[32],155                                                                             Paramet[32]});156                 //else if (Paramet.Length == 13)157                 //    report.SetParameters(new ReportParameter[] { Paramet[0],Paramet[1],Paramet[2],Paramet[3],Paramet[4],Paramet[5], 158                 //                                                            Paramet[6],Paramet[7],Paramet[8],Paramet[9],Paramet[10],159                 //                                                            Paramet[11],Paramet[12]});160 161                 else if (Paramet.Length == 10)162                     report.SetParameters(new ReportParameter[] { Paramet[0],Paramet[1],Paramet[2],Paramet[3],Paramet[4],Paramet[5], 163                                                                             Paramet[6],Paramet[7],Paramet[8],Paramet[9]});164 165             }166             report.DataSources.Clear();167             report.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt));168             PPrint(report);169         }170 171         public void print_reportbycheck(DataTable dt, string report_paths)172         {173             LocalReport report = new LocalReport();174             report.ReportEmbeddedResource = report_paths;           175             report.DataSources.Clear();176             report.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("SourceAppReport", dt));177             PPrint(report);178         }179 180     }
View Code

 

  

 

c# 条码打印—电子监管码打印