说到条码打印,很多人会说直接调用诸如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 }
来源:https://www.cnblogs.com/codeding/p/4168225.html
