說到條碼打印,很多人會說直接調用諸如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 }