C#实现批量生成条形码 ——主要用于准考证号的条形码生成
2014-11-18 11:26
537 查看
功能介绍
1、 批量生成条形码
2、 自由设置图片大小、条形码线高和间距
3、 自由设置标题文本字号大小
4、 自由设置增量(相邻条形码的差量)数制(比如:每考场只生成30名)
源代码
using System;
using System;
using System.Collections.Generic;
usingSystem.ComponentModel;
using System.Data;
usingSystem.Drawing;
using System.Linq;
using System.Text;
usingSystem.Windows.Forms;
usingSystem.Drawing.Imaging;
usingSystem.Collections;
usingSystem.Configuration;
using System.Text.RegularExpressions;
namespaceTXMApplication
{
public partial class Form1 : Form
{
//条形码
public class Code39
{
private Hashtable Decode;
private Hashtable CheckCode;
private String SPARATOR ="0";
public int WidthCU=3 ;//粗线和宽间隙宽度
public int WidthXI=1 ;//细线和窄间隙宽度
public int AboveMargin;//上边距
public int DownMargin;//下边距
public int LeftMargin;//左边距
public int RightMargin;//右边距
public int FoundSize;//标题字号
public int UseTitle;//是否有标题
public int LineHeight;//线高
public String PathStr;//存储路径
private int Height = 0;//
private int Width = 0;//
public void Set(int a,int d,int l,int r,int s,int t,int h,String p)
{
AboveMargin=a;
DownMargin=d;
LeftMargin = l;
RightMargin = r;
FoundSize = s;
UseTitle = t;
LineHeight = h;
PathStr = p;
//Width=LeftMargin+RightMargin+WidthCU+WidthXI
}
public Code39()
{
Decode = new Hashtable();
Decode.Add("0","000110100");
Decode.Add("1","100100001");
Decode.Add("2","001100001");
Decode.Add("3","101100000");
Decode.Add("4","000110001");
Decode.Add("5","100110000");
Decode.Add("6","001110000");
Decode.Add("7","000100101");
Decode.Add("8","100100100");
Decode.Add("9","001100100");
Decode.Add("*","010010100");
CheckCode = new Hashtable();
CheckCode.Add("0","0");
CheckCode.Add("1","1");
CheckCode.Add("2","2");
CheckCode.Add("3","3");
CheckCode.Add("4","4");
CheckCode.Add("5","5");
CheckCode.Add("6","6");
CheckCode.Add("7","7");
CheckCode.Add("8","8");
CheckCode.Add("9","9");
CheckCode.Add("*","39");
}
//保存文件
public Boolean saveFile(StringCode)
{
String code39 = Encode39(Code);
if (code39 != null)
{
Bitmap saved = newBitmap(Width, Height);
Graphics g =Graphics.FromImage(saved);
g.FillRectangle(newSolidBrush(Color.White), 0, 0, Width, Height);
this.DrawBarCode39(code39,Code , g, UseTitle);
String filename = PathStr +"/" + Code + ".jpg";
saved.Save(filename,ImageFormat.Jpeg);
saved.Dispose();
return true;
}
return false;
}
private String Encode39(StringCode)
{
int UseStand = 1;
String originalCode = Code;
if (null == Code ||Code.Trim().Equals(""))
{
return null;
}
Code = Code.ToUpper();
Regex rule = newRegex("@[^0-9A-Z*]");
if (rule.IsMatch(Code))
{
MessageBox.Show("非法字符");
return null;
}
int Check = 0;
for (int i = 0; i < Code.Length; i++)
{
Check +=int.Parse((String)CheckCode[Code.Substring(i, 1)]);
}
Check = Check % 43;
foreach (DictionaryEntry de inCheckCode)
{
if ((String
4000
)de.Value ==Code.ToString())
{
Code = Code +(String)de.Key;
break;
}
}
if (Code.Substring(0, 1) !="*")
Code = "*" +Code;
if (Code.Substring(Code.Length- 1, 1) != "*")
Code = Code +"*";
String Code39 = "";
for (int i = 0; i <Code.Length; i++)
{
Code39 = Code39 +(String)Decode[Code.Substring(i, 1)] + SPARATOR;
}
for (int i = 0; i <Code39.Length; i++)
{
if("0".Equals(Code39.Substring(i, 1)))
Width += WidthXI;
else
Width += WidthCU;
}
Width = Width +LeftMargin+RightMargin;
Height =Height+AboveMargin+DownMargin+LineHeight+20;
return Code39;
}
private void DrawBarCode39(StringCode39, String Title, Graphics g, int iftext)
{
Pen pWhite = newPen(Color.White, 1);
Pen pBlack = newPen(Color.Black, 1);
int position = this.LeftMargin;
if (UseTitle ==1)//////////////////////////
{
Font TitleFont = newFont("宋?体¬?", this.FoundSize, FontStyle.Regular);
SizeF sf = g.MeasureString(Title,TitleFont);
g.DrawString(Title,TitleFont, Brushes.Black, (Width - sf.Width) / 2, AboveMargin + LineHeight+5);
}//////////////////////////////
for (int i = 0; i <Code39.Length; i++)
{
if("0".Equals(Code39.Substring(i, 1)))
{
for (int j = 0; j <WidthXI; j++)
g.DrawLine(pBlack,position + j, AboveMargin, position + j, AboveMargin + LineHeight);
position += WidthXI;
}
else
{
for (int j = 0; j <WidthCU; j++)
g.DrawLine(pBlack,position + j, AboveMargin, position + j, AboveMargin + LineHeight);
position += WidthCU;
}
i++;
if("0".Equals(Code39.Substring(i, 1)))
position += WidthXI;
else
position += WidthCU;
}
return;
}
}
//
public Boolean verify()
{
if (PathTBox.Text == "")
{
MessageBox.Show("请?填¬?写¡ä存ä?储ä¡é路¡¤径?!ê?", "ERROR");
return false;
}
Regex rule1 = newRegex("@[^0-9]");
if (MessageBox.Show("将要生成以下信息的条码!\n" + "起始信息:" + BeginTBox.Text + "\n" + "信息增量:" + StepTBox.Text + "\n" + "终止信?息:êo" + EndTBox.Text + "\n" + "存储路径:" + PathTBox.Text + "\n", "确认信息", MessageBoxButtons.OKCancel) == DialogResult.OK)
return true;
else
return false;
}
public Form1()
{
InitializeComponent();
singleradio.Checked = false;
multiradio.Checked = true;
istitleCheck.Checked = true;
}
private void Form1_Load(object sender,EventArgs e)
{
}
private void OKButton_Click(objectsender, System.EventArgs e)
{
//Code39 c=new Code39();
int istitle=0;
int i ,j,step,n;
int len;
String beginstr, endstr,nowstr;
long beginnum,endnum,nownum;
if (istitleCheck.Checked==true)
istitle=1;
if (verify())
{
if (singleradio.Checked ==true)
{
Code39 c = new Code39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
c.saveFile(BeginTBox.Text.ToString());
}
else
{
beginstr =BeginTBox.Text.ToString();
endstr =EndTBox.Text.ToString();
len = beginstr.Length;
nowstr = beginstr;
beginnum=Convert.ToInt64(beginstr);
endnum=Convert.ToInt64(endstr);
nownum = beginnum;
step=Convert.ToInt32(StepTBox.Text);
n=Convert.ToInt32(CodeTBox.Text);
while (nownum <= endnum)
{
if (nownum % 100 >n)
{
Code39 c = newCode39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
nownum = nownum -nownum % 100 + 100 + 1;
nowstr =nownum.ToString("d" + len);
c.saveFile(nowstr);
}
else
{
Code39 c = newCode39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
nowstr =nownum.ToString("d" + len);
c.saveFile(nowstr);
}
nownum = nownum + step;
}
}
}
}
private voidlinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
FolderBrowserDialog sfdialog = newFolderBrowserDialog();
sfdialog.ShowDialog();
PathTBox.Text =sfdialog.SelectedPath.ToString();
}
private voidsingleradio_CheckedChanged(object sender, System.EventArgs e)
{
if(singleradio.Checked)
{
StepTBox.Enabled = false;
EndTBox.Enabled = false;
CodeTBox.Enabled = false;
}
}
private voidmultiradio_CheckedChanged(object sender, System.EventArgs e)
{
if (multiradio.Checked)
{
StepTBox.Enabled = true;
EndTBox.Enabled = true;
CodeTBox.Enabled = true;
}
}
}
}
1、 批量生成条形码
2、 自由设置图片大小、条形码线高和间距
3、 自由设置标题文本字号大小
4、 自由设置增量(相邻条形码的差量)数制(比如:每考场只生成30名)
源代码
using System;
using System;
using System.Collections.Generic;
usingSystem.ComponentModel;
using System.Data;
usingSystem.Drawing;
using System.Linq;
using System.Text;
usingSystem.Windows.Forms;
usingSystem.Drawing.Imaging;
usingSystem.Collections;
usingSystem.Configuration;
using System.Text.RegularExpressions;
namespaceTXMApplication
{
public partial class Form1 : Form
{
//条形码
public class Code39
{
private Hashtable Decode;
private Hashtable CheckCode;
private String SPARATOR ="0";
public int WidthCU=3 ;//粗线和宽间隙宽度
public int WidthXI=1 ;//细线和窄间隙宽度
public int AboveMargin;//上边距
public int DownMargin;//下边距
public int LeftMargin;//左边距
public int RightMargin;//右边距
public int FoundSize;//标题字号
public int UseTitle;//是否有标题
public int LineHeight;//线高
public String PathStr;//存储路径
private int Height = 0;//
private int Width = 0;//
public void Set(int a,int d,int l,int r,int s,int t,int h,String p)
{
AboveMargin=a;
DownMargin=d;
LeftMargin = l;
RightMargin = r;
FoundSize = s;
UseTitle = t;
LineHeight = h;
PathStr = p;
//Width=LeftMargin+RightMargin+WidthCU+WidthXI
}
public Code39()
{
Decode = new Hashtable();
Decode.Add("0","000110100");
Decode.Add("1","100100001");
Decode.Add("2","001100001");
Decode.Add("3","101100000");
Decode.Add("4","000110001");
Decode.Add("5","100110000");
Decode.Add("6","001110000");
Decode.Add("7","000100101");
Decode.Add("8","100100100");
Decode.Add("9","001100100");
Decode.Add("*","010010100");
CheckCode = new Hashtable();
CheckCode.Add("0","0");
CheckCode.Add("1","1");
CheckCode.Add("2","2");
CheckCode.Add("3","3");
CheckCode.Add("4","4");
CheckCode.Add("5","5");
CheckCode.Add("6","6");
CheckCode.Add("7","7");
CheckCode.Add("8","8");
CheckCode.Add("9","9");
CheckCode.Add("*","39");
}
//保存文件
public Boolean saveFile(StringCode)
{
String code39 = Encode39(Code);
if (code39 != null)
{
Bitmap saved = newBitmap(Width, Height);
Graphics g =Graphics.FromImage(saved);
g.FillRectangle(newSolidBrush(Color.White), 0, 0, Width, Height);
this.DrawBarCode39(code39,Code , g, UseTitle);
String filename = PathStr +"/" + Code + ".jpg";
saved.Save(filename,ImageFormat.Jpeg);
saved.Dispose();
return true;
}
return false;
}
private String Encode39(StringCode)
{
int UseStand = 1;
String originalCode = Code;
if (null == Code ||Code.Trim().Equals(""))
{
return null;
}
Code = Code.ToUpper();
Regex rule = newRegex("@[^0-9A-Z*]");
if (rule.IsMatch(Code))
{
MessageBox.Show("非法字符");
return null;
}
int Check = 0;
for (int i = 0; i < Code.Length; i++)
{
Check +=int.Parse((String)CheckCode[Code.Substring(i, 1)]);
}
Check = Check % 43;
foreach (DictionaryEntry de inCheckCode)
{
if ((String
4000
)de.Value ==Code.ToString())
{
Code = Code +(String)de.Key;
break;
}
}
if (Code.Substring(0, 1) !="*")
Code = "*" +Code;
if (Code.Substring(Code.Length- 1, 1) != "*")
Code = Code +"*";
String Code39 = "";
for (int i = 0; i <Code.Length; i++)
{
Code39 = Code39 +(String)Decode[Code.Substring(i, 1)] + SPARATOR;
}
for (int i = 0; i <Code39.Length; i++)
{
if("0".Equals(Code39.Substring(i, 1)))
Width += WidthXI;
else
Width += WidthCU;
}
Width = Width +LeftMargin+RightMargin;
Height =Height+AboveMargin+DownMargin+LineHeight+20;
return Code39;
}
private void DrawBarCode39(StringCode39, String Title, Graphics g, int iftext)
{
Pen pWhite = newPen(Color.White, 1);
Pen pBlack = newPen(Color.Black, 1);
int position = this.LeftMargin;
if (UseTitle ==1)//////////////////////////
{
Font TitleFont = newFont("宋?体¬?", this.FoundSize, FontStyle.Regular);
SizeF sf = g.MeasureString(Title,TitleFont);
g.DrawString(Title,TitleFont, Brushes.Black, (Width - sf.Width) / 2, AboveMargin + LineHeight+5);
}//////////////////////////////
for (int i = 0; i <Code39.Length; i++)
{
if("0".Equals(Code39.Substring(i, 1)))
{
for (int j = 0; j <WidthXI; j++)
g.DrawLine(pBlack,position + j, AboveMargin, position + j, AboveMargin + LineHeight);
position += WidthXI;
}
else
{
for (int j = 0; j <WidthCU; j++)
g.DrawLine(pBlack,position + j, AboveMargin, position + j, AboveMargin + LineHeight);
position += WidthCU;
}
i++;
if("0".Equals(Code39.Substring(i, 1)))
position += WidthXI;
else
position += WidthCU;
}
return;
}
}
//
public Boolean verify()
{
if (PathTBox.Text == "")
{
MessageBox.Show("请?填¬?写¡ä存ä?储ä¡é路¡¤径?!ê?", "ERROR");
return false;
}
Regex rule1 = newRegex("@[^0-9]");
if (MessageBox.Show("将要生成以下信息的条码!\n" + "起始信息:" + BeginTBox.Text + "\n" + "信息增量:" + StepTBox.Text + "\n" + "终止信?息:êo" + EndTBox.Text + "\n" + "存储路径:" + PathTBox.Text + "\n", "确认信息", MessageBoxButtons.OKCancel) == DialogResult.OK)
return true;
else
return false;
}
public Form1()
{
InitializeComponent();
singleradio.Checked = false;
multiradio.Checked = true;
istitleCheck.Checked = true;
}
private void Form1_Load(object sender,EventArgs e)
{
}
private void OKButton_Click(objectsender, System.EventArgs e)
{
//Code39 c=new Code39();
int istitle=0;
int i ,j,step,n;
int len;
String beginstr, endstr,nowstr;
long beginnum,endnum,nownum;
if (istitleCheck.Checked==true)
istitle=1;
if (verify())
{
if (singleradio.Checked ==true)
{
Code39 c = new Code39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
c.saveFile(BeginTBox.Text.ToString());
}
else
{
beginstr =BeginTBox.Text.ToString();
endstr =EndTBox.Text.ToString();
len = beginstr.Length;
nowstr = beginstr;
beginnum=Convert.ToInt64(beginstr);
endnum=Convert.ToInt64(endstr);
nownum = beginnum;
step=Convert.ToInt32(StepTBox.Text);
n=Convert.ToInt32(CodeTBox.Text);
while (nownum <= endnum)
{
if (nownum % 100 >n)
{
Code39 c = newCode39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
nownum = nownum -nownum % 100 + 100 + 1;
nowstr =nownum.ToString("d" + len);
c.saveFile(nowstr);
}
else
{
Code39 c = newCode39();
c.Set(Convert.ToInt32(abovemargin.Value),Convert.ToInt32(downmargin.Value), Convert.ToInt32(leftmargin.Value),Convert.ToInt32(rightmargin.Value), Convert.ToInt32(fontsize.Value), istitle,Convert.ToInt32(lineheight.Value),
PathTBox.Text.ToString());
nowstr =nownum.ToString("d" + len);
c.saveFile(nowstr);
}
nownum = nownum + step;
}
}
}
}
private voidlinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
FolderBrowserDialog sfdialog = newFolderBrowserDialog();
sfdialog.ShowDialog();
PathTBox.Text =sfdialog.SelectedPath.ToString();
}
private voidsingleradio_CheckedChanged(object sender, System.EventArgs e)
{
if(singleradio.Checked)
{
StepTBox.Enabled = false;
EndTBox.Enabled = false;
CodeTBox.Enabled = false;
}
}
private voidmultiradio_CheckedChanged(object sender, System.EventArgs e)
{
if (multiradio.Checked)
{
StepTBox.Enabled = true;
EndTBox.Enabled = true;
CodeTBox.Enabled = true;
}
}
}
}
相关文章推荐
- C#实现用于生成条形码的类
- winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
- C# MVC 实现生成二维码条形码给予Pos核销
- C#利用Zxing.net生成条形码和二维码并实现打印的功能
- 使用html2canvas实现批量生成条形码
- C#条形码生成(三)----简单的三种Code128实现
- C#利用Zxing.net生成二维码和条形码并实现打印的功能
- C#利用zxing.net生成二维码和条形码并实现打印的功能
- C#利用定时任务插件实现在后台线程中批量把动态文件生成静态文件方法
- SQL自定义函数实现字符串截取转化为整型(主要用于对批量数据的操作)
- ASP+FSO+框架实现ASP生成htm并分页的方法(批量)
- ASP+FSO+框架实现ASP生成htm并分页的方法(批量)
- C#实现自动生成图片并保存在本地
- 用C#实现生成PDF文档
- c# 生成条形码标识类
- 用C#实现生成PDF文档
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- ASP+FSO+框架实现ASP生成htm并分页的方法(批量)
- 用C#实现生成PDF文档(附源码)
- 用C#实现生成PDF文档(原码)