zoukankan      html  css  js  c++  java
  • 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.1Designer 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             try
    105             {
    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

      

  • 相关阅读:
    遥远的国度(D12 树链剖分)
    Codechef DGCD Dynamic GCD(D12 树上GCD)
    html总结
    数据库大总结
    html笔记
    Linux常用快捷键
    进程
    多进程
    进程介绍
    网络并发
  • 原文地址:https://www.cnblogs.com/codeding/p/4168225.html
Copyright © 2011-2022 走看看