|
5207
- 皇帝
- 1983-12-1
- 1542
- 2020
- 93
- 3909.8 M
|
发表者
t
T
发表于 2011-06-23 21:01
|只看楼主
先把代码贴出,可以拿去用了。。 - using System;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
- namespace TestCode128
- {
- public sealed class Code128
- {
- #region private variables
- /// <summary>
- /// The Space Between each of Title, BarCode, BarCodeString
- /// </summary>
- private const int SPACE_HEIGHT = 3;
- SizeF _sizeLabel = SizeF.Empty;
- SizeF _sizeBarCodeValue = SizeF.Empty;
- SizeF _sizeBarCodeString = SizeF.Empty;
- SizeF _sizeAdditionalInfo = SizeF.Empty;
- #endregion
- #region Label
- private string _label = null;
- private Font _labelFont = null;
- /// <summary>
- /// BarCode Title (条码标签)
- /// </summary>
- public string Label
- {
- set { _label = value; }
- }
- /// <summary>
- /// BarCode Title Font (条码标签使用的字体)
- /// </summary>
- public Font LabelFont
- {
- get
- {
- if (_labelFont == null)
- return new Font("Arial", 10);
- return _labelFont;
- }
- set { _labelFont = value; }
- }
- #endregion
- private string _additionalInfo = null;
- private Font _addtionalInfoFont = null;
- /// <summary>
- /// Additional Info Font (附加信息字体)
- /// </summary>
- public Font AdditionalInfoFont
- {
- set { _addtionalInfoFont = value; }
- get
- {
- if (_addtionalInfoFont == null) return new Font("Arial", 10);
- return _addtionalInfoFont;
- }
- }
- /// <summary>
- /// Additional Info Content, if "ShowBarCodeValue" is true, the info is unvisible
- /// 附加信息,如果设置ShowBarCodeValue为true,则此项不显示
- /// </summary>
- public string AdditionalInfo
- {
- set { _additionalInfo = value; }
- }
- #region BarCode Value and Font
- private string _barCodeValue = null;
- /// <summary>
- /// BarCode Value (条码值)
- /// </summary>
- public string BarCodeValue
- {
- get
- {
- if (string.IsNullOrEmpty(_barCodeValue))
- throw new NullReferenceException("The BarCodeValue has not been set yet!");
- return _barCodeValue;
- }
- set { _barCodeValue = value.StartsWith("*") && value.EndsWith("*") ? value : "*" + value + "*"; }
- }
- private bool _showBarCodeValue = false;
- /// <summary>
- /// whether to show the original string of barcode value bellow the barcode
- /// 是否在条码下方显示条码值,默认为false
- /// </summary>
- public bool ShowBarCodeValue
- {
- set { _showBarCodeValue = value; }
- }
- private Font _barCodeValueFont = null;
- /// <summary>
- /// the font of the codestring to show
- /// 条码下方显示的条码值的字体
- /// </summary>
- public Font BarCodeValueFont
- {
- get
- {
- if (_barCodeValueFont == null)
- return new Font("Arial", 10);
- return _barCodeValueFont;
- }
- set { _barCodeValueFont = value; }
- }
- private int _barCodeFontSize = 50;
- /// <summary>
- /// the font size of the barcode value to draw
- /// 条码绘制的大小,默认50
- /// </summary>
- public int BarCodeFontSize
- {
- set { _barCodeFontSize = value; }
- }
- #endregion
- #region generate the barcode image
- private Bitmap BlankBackImage
- {
- get
- {
- int barCodeWidth = 0, barCodeHeight = 0;
- using (Bitmap bmp = new Bitmap(1, 1, PixelFormat.Format32bppArgb))
- {
- using (Graphics g = Graphics.FromImage(bmp))
- {
- if (!string.IsNullOrEmpty(_label))
- {
- _sizeLabel = g.MeasureString(_label, LabelFont);
- barCodeWidth = (int)_sizeLabel.Width;
- barCodeHeight = (int)_sizeLabel.Height + SPACE_HEIGHT;
- }
- _sizeBarCodeValue = g.MeasureString(BarCodeValue, new Font("Code 128", _barCodeFontSize));
- barCodeWidth = Math.Max(barCodeWidth, (int)_sizeBarCodeValue.Width);
- barCodeHeight += (int)_sizeBarCodeValue.Height;
- if (_showBarCodeValue)
- {
- _sizeBarCodeString = g.MeasureString(_barCodeValue, BarCodeValueFont);
- barCodeWidth = Math.Max(barCodeWidth, (int)_sizeBarCodeString.Width);
- barCodeHeight += (int)_sizeBarCodeString.Height + SPACE_HEIGHT;
- }
- else
- {
- if (!string.IsNullOrEmpty(_additionalInfo))
- {
- _sizeAdditionalInfo = g.MeasureString(_additionalInfo, AdditionalInfoFont);
- barCodeWidth = Math.Max(barCodeWidth, (int)_sizeAdditionalInfo.Width);
- barCodeHeight += (int)_sizeAdditionalInfo.Height + SPACE_HEIGHT;
- }
- }
- }
- }
- return new Bitmap(barCodeWidth, barCodeHeight, PixelFormat.Format32bppArgb);
- }
- }
- /// <summary>
- /// Draw the barcode value to the blank back image and output it to the browser
- /// 绘制WebForm形式的条码
- /// </summary>
- /// <param name="ms">Recommand the "Response.OutputStream" 使用 Response.OutputStream</param>
- /// <param name="imageFormat">The Image format to the Browser 输出到浏览器到图片格式,建议GIF</param>
- public void CreateWebForm(Stream ms, ImageFormat imageFormat)
- {
- int barCodeWidth, barCodeHeight;
- using (Bitmap bmp = this.BlankBackImage)
- {
- barCodeHeight = bmp.Height;
- barCodeWidth = bmp.Width;
- using (Graphics g = Graphics.FromImage(bmp))
- {
- g.Clear(Color.White);
- g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- int vPos = 0;
- ////Draw Label String
- if (!string.IsNullOrEmpty(_label))
- {
- g.DrawString(_label, LabelFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeLabel.Width, barCodeWidth), vPos);
- vPos += (int)_sizeLabel.Height + SPACE_HEIGHT;
- }
- else { vPos = SPACE_HEIGHT; }
- ////Draw The Bar Value
- g.DrawString(_barCodeValue, new Font("Code 128", _barCodeFontSize), new SolidBrush(Color.Black),
- XCenter((int)_sizeBarCodeValue.Width, barCodeWidth), vPos);
- ////Draw the BarValue String
- if (_showBarCodeValue)
- {
- g.DrawString(_barCodeValue, BarCodeValueFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeBarCodeString.Width, barCodeWidth),
- vPos + (int)_sizeBarCodeValue.Height);
- }
- else
- {
- if (!string.IsNullOrEmpty(_additionalInfo))
- {
- g.DrawString(_additionalInfo, AdditionalInfoFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeAdditionalInfo.Width, barCodeWidth),
- vPos + (int)_sizeBarCodeValue.Height);
- }
- }
- }
- bmp.Save(ms, imageFormat);
- }
- }
- /// <summary>
- /// 生成winform格式的条码
- /// </summary>
- /// <param name="imageFormat">图片格式,建议GIF</param>
- /// <returns>Stream类型</returns>
- public Stream CreateWinForm(ImageFormat imageFormat)
- {
- int barCodeWidth, barCodeHeight;
- using (Bitmap bmp = this.BlankBackImage)
- {
- barCodeHeight = bmp.Height;
- barCodeWidth = bmp.Width;
- using (Graphics g = Graphics.FromImage(bmp))
- {
- g.Clear(Color.White);
- g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- int vPos = 0;
- ////Draw Label String
- if (!string.IsNullOrEmpty(_label))
- {
- g.DrawString(_label, LabelFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeLabel.Width, barCodeWidth), vPos);
- vPos += (int)_sizeLabel.Height + SPACE_HEIGHT;
- }
- else { vPos = SPACE_HEIGHT; }
- ////Draw The Bar Value
- g.DrawString(_barCodeValue, new Font("Code 128", _barCodeFontSize), new SolidBrush(Color.Black),
- XCenter((int)_sizeBarCodeValue.Width, barCodeWidth), vPos);
- ////Draw the BarValue String
- if (_showBarCodeValue)
- {
- g.DrawString(_barCodeValue, BarCodeValueFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeBarCodeString.Width, barCodeWidth),
- vPos + (int)_sizeBarCodeValue.Height);
- }
- else
- {
- if (!string.IsNullOrEmpty(_additionalInfo))
- {
- g.DrawString(_additionalInfo, AdditionalInfoFont, new SolidBrush(Color.Black),
- XCenter((int)_sizeAdditionalInfo.Width, barCodeWidth),
- vPos + (int)_sizeBarCodeValue.Height);
- }
- }
- }
- Stream ms = new MemoryStream();
- bmp.Save(ms, imageFormat);
- return ms;
- }
- }
- #endregion
- private static int XCenter(int subWidth, int globalWidth)
- {
- return (globalWidth - subWidth) / 2;
- }
- }
- }
复制代码上面code128的源代码,下面是调用的代码示例: - private void button1_Click(object sender, EventArgs e)
- {
- Code128 code128 = new Code128();
- code128.BarCodeValue = "*211232231131221213131222212222221224121213121211321132331112";
- code128.BarCodeFontSize = 30;
- code128.ShowBarCodeValue = true;
- Stream ms = new MemoryStream();
- ms = code128.CreateWinForm(System.Drawing.Imaging.ImageFormat.Gif);
- pictureBox1.Image = Image.FromStream(ms);
- code128 = null;
- }
复制代码代码就不解释了,另外要注意一点如果直接执行上面的代码是不能打印成功的,输出的是一串文字图片,这是因为没有安装code128字体的原因,安装字体即可。 下面是字体包下载:  - code_128.zip (, 下载次数:65)
|