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;}
自定义打印类如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 /// <summary> 2 ///条码打印基础类3 /// </summary> 4 public classprint_code5 {6 7 private IList<Stream>m_streams;8 private intm_currentPageIndex;9 DataTable dt = newDataTable();10 private string _errormessage = "";11 private string m_ReportName = string.Empty;12 public boolPPrint(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 inm_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 boolNBPrint()39 {40 if (m_streams == null || m_streams.Count == 0)41 {42 _errormessage = "在打印过程中出现异常!";43 return false;44 }45 PrintDocument printDoc = newPrintDocument();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 += newPrintPageEventHandler(PrintPage);64 printDoc.Print();65 return true;66 }67 public void PrintPage(objectsender, PrintPageEventArgs ev)68 {69 Metafile pageImage = newMetafile(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 voidExport(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, outwarnings);92 //report.Render("EXCEL", deviceInfo, CreateStream, out warnings); 93 foreach (Stream stream inm_streams)94 {95 stream.Position = 0;96 }97 }98 99 private Stream CreateStream(string name, stringfileNameExtension,100 Encoding encoding, string mimeType, boolwillSeek)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 returnstream;116 }117 118 public void print_report(DataTable dt, string report_paths, string[] Parameter)119 {120 LocalReport report = newLocalReport();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, stringreport_paths)172 {173 LocalReport report = newLocalReport();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
转载于:https://www.cnblogs.com/codeding/p/4168225.html
c# 条码打印—电子监管码打印相关推荐
- 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...
票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...
- virbox protector 为软件设置有效期_条码软件如何打印UCC-128条形码
UCC-128是一种连续型.非定长的应用标识符条形码,多用于物流贸易行业,能更多地标识贸易物流单元中需要标识的信息,如产品数量.规格.批号.生产日期.有效期.交货地等等. UCC-128条形码由应用标 ...
- 关于条码和标签打印以及条码打印机编程
很早很早就是会员了,但一直没有写过东西,今天算是个开始吧. 本人从事条码编辑打印软件开发多年,熟悉条码和打印机的编程,今天开始和大家聊一聊这方面的内容,分享自己的一些经验. 条码和标签打印方面还是有很 ...
- 条码软件即时打印扫描条码打印空白的处理方法
使用条形码制作软件制作条码是非常基本的功能,最近有用户在使用条码软件的打印时输入功能时,出现扫描条码后打印空白的情况,这种肯定是不正常的,下面我们就来看一下该如何处理: 首先我们来看一下在中琅条码软件 ...
- 如何使流水号条码不重复打印
流水条码是企业生产中进行批次管理的常用方式,需要在产品上粘贴条码,这些条码的要求是:按流水号序列打印,每张都不同.因为在实际操作过程中,每天都需要打印,如果条码的起始数据需要人为修改,有可能会出现条码 ...
- 条码/RFID标签打印方案
条码/RFID标签打印方案 条码/RFID标签打印方案 1, 热转印条码标签打印 热转打印技术的原理是通过加温和加压将色带上的固体油墨熔化转印到介质上完成打印的.通过选择热转印色带与标签材料匹配,热转 ...
- 票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案
票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案 -- 全球领先.100%源码全开放.可用 ...
- Delphi实现条码生成与打印实现代码
条形码或称条码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.条形码技术主要原理是利用了光的反射,白色物体能反射各种波长的可见光,黑色物体则吸收各 ...
- 指定打印机打印、条码 、小票打印 web端打印机控件 LODOP的使用
最近项目需要指定打印机进行前台后厨小票同时打印 1.首先安装LODOP插件点击下载 2 将LodopFuncs.js文件复制到自己项目 注意:vue项目需要底部添加 export { getLodop ...
最新文章
- Android @id和@+id 以及 @android:id 的区别
- thymeleaf 的常见属性
- Cisco 2950 忘记密码如何重设
- 项目发布: error CS0103: 当前上下文中不存在名称“*****”
- 判断是否为gif/png图片的正确姿势
- Myeclipse编译工程用Weblogic发布的时候jdk版本问题
- 关于php反射机制的一些理解
- 集合框架-Collection与List集合
- python能做什么工作-python语言能做什么工作
- wamp设置本地访问路径为a.com
- oracle数据库表格连接数据库,excel中连接表格数据库-excel怎样连接oracle数据库(白痴级提问)...
- python 化学反应_有意思的Python:用python配平化学方程式
- 电视盒是计算机网络连接设备,电视盒子怎么连接电脑
- CentOS 8 部署禅道,并使用自己的数据库
- php 抽奖活动_PHP实现活动人选抽奖功能
- 中移物联网入门记录(1)
- Spring Cloud Gateway的断路器(CircuitBreaker)功能
- [避坑] C/C++ 如何实现文件输入输出
- ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431
- Django开发微信公众号