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             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     }

  

时间: 2024-10-10 14:40:00

c# 条码打印—电子监管码打印的相关文章

添加条码生成和打印功能到SQL Server Reporting Services report 中

Barcode Professional for Reporting Services 是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的SQL Server Reporting Services report 中.支持几乎所有当前常用的条码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14), EAN 13 & UPC, Postal (USPS, British Royal Mail, Austra

Barcode Professional for ASP.NET ASP.NET条码生成和打印功控件介绍

Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET Mobile Web站点). 具体功能: Neodynamic Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET

手持PDA智能条码扫描RFID打印POS机

手持PDA智能条码扫描RFID打印POS机   一.系统稳定性: 1.硬件稳定性: 采用了华为海思(国内唯一可以媲美全球顶级的CPU+射频方案厂商,可以和英伟达等一决高下)手机方案,CPU+射频浑然一体,经过数千万手机出货验证,性能稳定可靠.常规的WINCE+GSM模组组装出来的产品,不能拨打电话,仅能传输数据,而且稳定性很差. 2.系统稳定 Mobile6.5操作系统是wince系统的完美.最终升级版.注重人性化和交互界面(类似于win98和Win XP的区别).再次基础上面有经过华为数百人团

Barcode Professional for Silverlight条码生成和打印控件下载及使用介绍

Barcode Professional for Silverlight是一款轻量级的.NET程序集,为你的SilverLight应用程序生成高质量的基于矢量的条形码,支持条码生成和打印,支持当前大多数1维和2维条形码,包含:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14), EAN 13 & UPC, Postal (USPS, British Royal Mail, Australia Post, DHL, etc.), Data Matrix

Web打印 Lodop打印控件 bootstrap框架

一.下载Lodop打印控件http://www.lodop.net/ 二.将解压的Lodop文件夹加入到项目中 三.在web页面中引入Lodop的js文件 <script src="../Scripts/Lodop/LodopFuncs.js"></script> <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" wi

android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具

Android设备打印比较麻烦,一般设备厂商都提供原生app开发的SDK,我们web开发者为难了,不会原生开发啊 给大家提供一个思路,实现web加壳,利用打印浏览器实现 简单来说就是把我们的web页面嵌入浏览器中 web页面的打印功能通过js与浏览器互动 浏览器通过调用硬件SDK实现打印 1.机器安装最新SDK,已安装请忽略 2.下载安装本页下载连接中的打印浏览器并安装 3.对照下方事例代码,修改web页面打印功能 4.打印浏览器中打开web页面,测试打印功能 5.默认主页可以在SD卡根目录修改

C# 打印和打印预览

C#打印和C#打印预览的实现的三大部分:页面设置.打印预览.打印具体用到的类和属性事件都是什么内容呢?那么本文就向你介绍C#打印和C#打印预览的实现具体事宜. 我们谈到C#打印和C#打印预览的实现其中主要就是包括:页面设置.打印预览.打印三大部分.打印的原理是:生成mdi文件,系统碰到mdi的时候会自动以打印的方式处理.所以,不管用什么模板,什么方式:能在PrintPage事件处理中,生成一张要打印内容的图片就OK了!主要的支持类都包括在命名空间System.Drawing.Printing中,

支持打印和打印预览Word文档处理控件TX Text Control ActiveX

TX Text Control ActiveX 控件为软件开发人员提供了强大的所见所得的Word文档处理,可以加载.编辑和保存Wod格式(DOCX.DOC.RTF等),生成Word报表,文档转换,导出和直接创建PDF和PDF/A文件.该产品分发完全免费,包含了标准版.专业版和企业版. 具体功能: 支持打印和打印预览 文档可以分割为多个不同的段落,每个段落都可以单独的格式化 支持定义超链接,并加载和保存HTML文件 支持添加项目符号和数字列表 支持多层Undo和Redo操作 支持插入任何数量的列到

C#实现打印与打印预览功能

原文:C#实现打印与打印预览功能 在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下. 打印操作通常包括以下四个功能: 1 打印设置 设置打印机的一些参数,比如更改打印机驱动程序等; 2 页面设置 设置页面大小纸张类型等 3 打印预览 类似于word中的打印预览 4 打印 实现打印功能的核心是PrintDo