建议不要用CODE-39码,改用CODE-128码;
CODE-39码密度比较低,条码数字内容太多,导致条码太长,缩短长度就只能减小X尺寸,造成识读困难;
CODE-128码密度高,相同的数字生成条码更短。
你可以对比一下图中的两个条码,上面是CODE-39,下面是CODE-128,相同的内容:
解决方案:
Default.aspx
%201%20<%@%20Page%20Language="C#"%20AutoEventWireup="true"%20CodeBehind="Default.aspx.cs"%20Inherits="BarcodeTest.Default"%20%>%202%20%203%20<!DOCTYPE%20html>%204%20%205%20<html%20xmlns="http://www.w3.org/1999/xhtml">%206%20<head%20runat="server">%207%20%20%20%20%20<meta%20http-equiv="Content-Type"%20content="text/html;%20charset=utf-8"%20/>%208%20%20%20%20%20<title>条形码</title>%209%20%20%20%20%20<script%20type="text/javascript"%20src="jquery-latest.min.js"></script>10%20%20%20%20%20<script%20type="text/Javascript">11%20%20%20%20%20%20%20%20%20$(function%20()%20{12%20%20%20%20%20%20%20%20%20%20%20%20%20$("#btnBar").click(function%20()%20{13%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20rawData%20=%20$.trim($("#txtRawData").val());14%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20$("#imgBarcode").attr("src",%20"BarcodeHandler.ashx?RawData="%20+%20rawData%20+%20"&BarHeight=50&BarcodeType="%20+%20$("#ddlBarcodeType").val()15%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20"&IsDisplayFontData="%20+%20($("#cbIsDisplayFontData").attr("checked")%20==%20"checked")%20+%20"&FontSize="%20+%20$("#txtFontSize").val()%20+%20"&FontAlignment="%20+%20$("#ddlFontAlignment").get(0).selectedIndex);16%20%20%20%20%20%20%20%20%20%20%20%20%20});17%20%20%20%20%20%20%20%20%20});18%20%20%20%20%20</script>19%20</head>20%20<body>21%20%20%20%20%20<form%20id="form1"%20runat="server">22%20%20%20%20%20%20%20%20%20<div>23%20%20%20%20%20%20%20%20%20%20%20%20%20原始码:24%20%20%20%20%20%20%20%20%20%20%20%20%20<input%20type="text"%20id="txtRawData"%20maxlength="48"%20value="BJ-BJSJF-GCSG-0004-HTFY00002"%20/>25%20%20%20%20%20%20%20%20%20%20%20%20%20<br%20/>26%20%20%20%20%20%20%20%20%20%20%20%20%20编码选择:<select%20id="ddlBarcodeType"><option>Auto</option>27%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<option>A</option>28%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<option>B</option>29%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<option>C</option>30%20%20%20%20%20%20%20%20%20%20%20%20%20</select>31%20%20%20%20%20%20%20%20%20</div>32%20%20%20%20%20%20%20%20%20<br%20/>33%20%20%20%20%20%20%20%20%20字体大小:<input%20type="text"%20id="txtFontSize"%20value="16"%20/>字体布局:<select%20id="ddlFontAlignment"><option>Near</option>34%20%20%20%20%20%20%20%20%20%20%20%20%20<option%20selected="selected">Center</option>35%20%20%20%20%20%20%20%20%20%20%20%20%20<option>Far</option>36%20%20%20%20%20%20%20%20%20</select><input%20checked="checked"%20type="checkbox"%20id="cbIsDisplayFontData"%20/>字体显示37%20%20%20%20%20%20%20%20%20<div>38%20%20%20%20%20%20%20%20%20%20%20%20%20<input%20type="button"%20id="btnBar"%20value="生成条形码"%20/>39%20%20%20%20%20%20%20%20%20</div>40%20%20%20%20%20%20%20%20%20<div%20style="text-align:%20center;">41%20%20%20%20%20%20%20%20%20%20%20%20%20<img%20id="imgBarcode"%20src=""%20alt="条形码"%20/>42%20%20%20%20%20%20%20%20%20</div>43%20%20%20%20%20</form>44%20</body>45%20</html>
BarcodeHandler.ashx
%201%20using%20Barcode;%202%20using%20System;%203%20using%20System.Collections.Generic;%204%20using%20System.Linq;%205%20using%20System.Web;%206%20%207%20namespace%20BarcodeTest%208%20{%209%20%20%20%20%20///%20<summary>10%20%20%20%20%20///%20author:%20Kenmu11%20%20%20%20%20///%20created%20by:%202014-11-0612%20%20%20%20%20///%20function:%20条形码生成13%20%20%20%20%20///%20</summary>14%20%20%20%20%20public%20class%20BarcodeHandler%20:%20IHttpHandler15%20%20%20%20%20{16%2017%20%20%20%20%20%20%20%20%20public%20void%20PRocessRequest(HttpContext%20context)18%20%20%20%20%20%20%20%20%20{19%20%20%20%20%20%20%20%20%20%20%20%20%20HttpRequest%20request%20=%20context.Request;20%20%20%20%20%20%20%20%20%20%20%20%20%20HttpResponse%20response%20=%20context.Response;21%20%20%20%20%20%20%20%20%20%20%20%20%20response.ClearContent();22%20%20%20%20%20%20%20%20%20%20%20%20%20response.ContentType%20=%20"image/jpeg";23%2024%20%20%20%20%20%20%20%20%20%20%20%20%20string%20barcodeType%20=%20request["BarcodeType"]%20??%20"Auto";25%20%20%20%20%20%20%20%20%20%20%20%20%20string%20rawData%20=%20request["RawData"]%20??%20((char)20).ToString()%20+%20@"123a"%20+%20((char)18).ToString()%20+%20"ab";26%20%20%20%20%20%20%20%20%20%20%20%20%20byte%20barHeight%20=%20byte.Parse(string.IsNullOrEmpty(request["BarHeight"])%20?%20"32"%20:%20request["BarHeight"]);27%20%20%20%20%20%20%20%20%20%20%20%20%20bool%20isDisplayFontData%20=%20string.IsNullOrEmpty(request["IsDisplayFontData"])%20?%20true%20:%20bool.Parse(request["IsDisplayFontData"]);28%20%20%20%20%20%20%20%20%20%20%20%20%20int%20fontSize%20=%20string.IsNullOrEmpty(request["FontSize"])%20?%2016%20:%20int.Parse(request["FontSize"]);29%20%20%20%20%20%20%20%20%20%20%20%20%20int%20fontAlignment%20=%20string.IsNullOrEmpty(request["FontAlignment"])%20?%201%20:%20int.Parse(request["FontAlignment"]);//0(Near左)、1(Center中)、2(Far右)30%20%20%20%20%20%20%20%20%20%20%20%20%20BaseCode128%20code128;31%20%20%20%20%20%20%20%20%20%20%20%20%20switch%20(barcodeType)32%20%20%20%20%20%20%20%20%20%20%20%20%20{33%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20"A":34%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code128%20=%20new%20Code128A(rawData);35%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;36%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20"B":37%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code128%20=%20new%20Code128B(rawData);38%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;39%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20"C":40%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code128%20=%20new%20Code128C(rawData);41%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;42%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20"Auto":43%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default:44%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code128%20=%20new%20Code128Auto(rawData);45%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;46%20%20%20%20%20%20%20%20%20%20%20%20%20}47%20%20%20%20%20%20%20%20%20%20%20%20%20code128.BarHeight%20=%20barHeight;48%20%20%20%20%20%20%20%20%20%20%20%20%20code128.IsDisplayFontData%20=%20isDisplayFontData;49%20%20%20%20%20%20%20%20%20%20%20%20%20code128.FontSize%20=%20fontSize;50%20%20%20%20%20%20%20%20%20%20%20%20%20code128.FontAlignment%20=%20(System.Drawing.StringAlignment)fontAlignment;51%2052%20%20%20%20%20%20%20%20%20%20%20%20%20System.Drawing.Image%20img%20=%20code128.GetBarCodeImage();53%20%20%20%20%20%20%20%20%20%20%20%20%20img.Save(response.OutputStream,%20System.Drawing.Imaging.ImageFormat.Jpeg);54 img.Dispose();55 }56 57 public bool IsReusable58 {59 get60 {61 return false;62 }63 }64 }65 }
CharacterSet.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 //author: Kenmu 7 //created by: 2014-11-05 8 //function: 条形码 9 namespace Barcode10 {11 /// <summary> 12 /// Code128字符集 13 /// </summary> 14 internal enum CharacterSet15 {16 A,17 B,18 C19 } 20 }
IBarCode.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.Linq; 5 using System.Text; 6 7 //author: Kenmu 8 //created by: 2014-11-05 9 //function: 条形码10 namespace Barcode11 {12 /// <summary> 13 /// 条形码接口 14 /// </summary> 15 public interface IBarCode16 {17 string RawData { get; }18 /// <summary> 19 /// 条形码对应的数据 20 /// </summary> 21 string EncodedData { get; }22 /// <summary> 23 /// 当前条形码标准 24 /// </summary> 25 string BarCodeType { get; }26 27 /// <summary> 28 /// 得到条形码对应的图片 29 /// </summary> 30 /// <returns></returns> 31 Image GetBarCodeImage();32 }33 }
BaseCode128.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Drawing; 6 7 //author: Kenmu 8 //created by: 2014-11-06 9 //function: 条形码 10 namespace Barcode 11 { 12 /// <summary> 13 /// BaseCode128抽象类 14 /// </summary> 15 public abstract class BaseCode128 : IBarCode 16 { 17 protected Color backColor = Color.White;//条码背景色 18 protected Color barColor = Color.Black;//条码和原始数据字体颜色 19 20 /// <summary> 21 /// 当前条形码种类 22 /// </summary> 23 public string BarCodeType 24 { 25 get { return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name; } 26 } 27 28 /// <summary> 29 /// 条形码对应的编码数据 30 /// </summary> 31 protected string _EncodedData; 32 public string EncodedData 33 { 34 get { return this._EncodedData; } 35 } 36 37 /// <summary> 38 /// 【原始数据】 39 /// </summary> 40 protected string _RawData; 41 public string RawData 42 { 43 get { return this._RawData; } 44 } 45 46 /// <summary> 47 /// 在条形码下面显示数据;如果为空,则取【原始数据】 48 /// </summary> 49 protected string _PresentationData = null; 50 public string PresentationData 51 { 52 get { return string.IsNullOrEmpty(this._PresentationData) ? this._RawData : this._Present
新闻热点
疑难解答