正如您所知,Spread是非常灵活的,当涉及到自定义单元格类型的时候--即使条形码单元格并不是Spread原生的。用ASP.NET的创建它将是一个非常轻便的任务。本文选择的是Aspose条形码生成器.NET控件(可生成任何条码生成器)。当然您也可以使用一个在线生成器:传递一个查询字符串的URL即可。
首先,我们自定义一个BarcodeCellType:
1: [Serializable()]
2: public class BarcodeCellType : FarPoint.Web.Spread.TextCellType
3: {
4: public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
5: {
6: parent.Attributes.Add("FpCellType", "BarcodeCellType");
7: ApplyStyleTo(parent, style, margin, true);
8:
9: System.Web.UI.WebControls.Image c = new System.Web.UI.WebControls.Image();
10: c.AlternateText = "";
11: c.ImageUrl = "~/bcimagemanager.aspx?value=" + value.ToString();
12: return c;
13: }
14: }
我们继承了TextCellType, 因为它GetEditorControl类是可接受单元格的编辑模式字符串值,我们还需要override就是paintCell函数。
通过后台代码生成barecode图片。 添加一个新的ASPX页面到。在这个新页面的服务器端代码,我们将引用的产生我们的条码图像组件:
1: using Aspose.BarCode;
1: public partial class bcimagemanager : System.Web.UI.Page
2: {
3: protected void Page_Load(object sender, EventArgs e)
4: {
5: if (Request.QueryString["value"].ToString() == null) return;
6: byte[] imgContent = GenerateBarCode(Request.QueryString["value"].ToString());
7: Response.ContentType = "image/jpeg";
8: Response.BinaryWrite(imgContent);
9: }
10: public byte[] GenerateBarCode(string codeInfo)
11: {
12: using (MemoryStream ms = new MemoryStream())
13: {
14: BarCodeBuilder bb = new BarCodeBuilder();
15: bb.CodeText = codeInfo;
16: bb.SymbologyType = Symbology.Code128;
17: bb.BarCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
18: byte[] imgContent = new Byte[ms.Length];
19: ms.Position = 0;
20: ms.Read(imgContent, 0, (int)ms.Length);
21: return imgContent;
22: }
23: }
24: }
25:
使用URL中的查询字符串,我们将单元格的值传递给这个aspx页面。图像在页面上生成的页面的URL是由Image控件的ImageUrl属性引用。
见源码: