译文:http://www.codeproject.com/Tips/846860/Csharp-Barcode-Generator-Web-Control

在asp.net的web页用c#的web控件生成条码。

简介:

我在一个小公司工作,几天前有人询问在asp页面生成条码的方法。我在谷歌上搜了一圈,大多数生成条码实在asp的”page_load”方法里通过Response.OutputStream来保存条码图片,这种方案,只能在页面上显示一个相同的条码。但是不能满足需求。该页面至少要显示2个以上的条码,而且页面上还要显示一些文字信息。

所有我放弃了这种方法,最终找到了另一个方法来生成条码。通过使用WebControl 和IHttpHandler.

使用WebControl 和IHttpHandler

因为公司的需求,我使用的是第三方生成控件,你也可以使用zxing这种开源控件。

首先创建一个webcontrol继承HtmlTextWriterTag.Img。在图片属性里src 里添加一些条码属性。

public BarcodeWebGenerator()
: base(HtmlTextWriterTag.Img)
{
...
} protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer); string httpHandler = "BarcodeGenerateHandler.ashx"; writer.AddAttribute(HtmlTextWriterAttribute.Src, httpHandler + "?" +
this.GetQueryString(), false);
} private string GetQueryString()
{
StringBuilder sb = new StringBuilder(); sb.Append("Type=" + this.Type.ToString());
sb.Append("&Text=" + this.Text.ToString());
sb.Append("&BarcodeWidth=" + this.BarcodeWidth.ToString());
sb.Append("&BarcodeHeight=" + this.BarcodeHeight.ToString()); return sb.ToString();
}

看上面的代码,src属性里添加了ashx。因此如果条码属性发生改变,那么条码图片会通过HttpHandler类重绘。这个例子中我只添加了4个最常用的属性(条码类型,条码内容,条码高度,条码宽度)。

在IHttpHandler这个类你唯一需要做的一件事就是重写ProcessRequest 方法,每一个请求都会在这个类中被处理。生成条码图片和保存在内容参数里。当条码控件的属性或src属性发生变化,条码图片会自动重绘。很简单,不是吗?

public void ProcessRequest(HttpContext context)
{
try
{
constructBarcode(context.Request); updateProperties(); Bitmap bmp = _barcode.CreateBarcode(); context.Response.Clear();
context.Response.ContentType = "image/png"; using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//context.Response.ClearContent();
context.Response.OutputStream.Write(ms.GetBuffer(), , (int)ms.Length);
} bmp.Dispose();
context.Response.Flush();
}
catch
{ }
}
}

大部分工作已经完成了,在web应用程序页把条码生成控件加到工具条里。然后拖放2个条码控件到你的页面,在page的cs文件的page_load方法里分别给两个控件设置属性。

protected void Page_Load(object sender, EventArgs e)
{
this.BarcodeWebGenerator1.Width = ;
this.BarcodeWebGenerator1.Height = ;
this.BarcodeWebGenerator1.Text = "abc123465789ABC"; this.BarcodeWebGenerator2.Width = ;
this.BarcodeWebGenerator2.Height = ;
this.BarcodeWebGenerator2.Type = BarCodeType.Code128;
this.BarcodeWebGenerator2.Text = "";
}

除此之外,你可以通过javascript(因为该控件是从image继承而来)来动态改变条码web控件的src属性来重绘条码图片。

如下:

document.getElementById('BarcodeWebGenerator1').src="BarcodeGenerateHandler.ashx?Type=QRCode&Text=987654321&BarcodeWidth=200&BarcodeHeight=200".

注意:arcodeGenerateHandler.ashx文件需要和page页放在同一文件夹下。

这是一个简短的文章,希望能够对你有帮助。

译:c#生成条码的web控件的更多相关文章

  1. Javascript语法去控制Web控件的Enabled属性

    Web控件当使用Enabled属性时,它生成html之后会变成了disabled了.我们为了能够在javascript去控制控件的禁用与启用,得从这个disabled入手.如:

  2. 基本的Web控件四

    基本的Web控件用法二 ListBox控件 页面布局: <div> <h1>ListBox控件</h1> 学生列表: <br/> <asp:Lis ...

  3. 一个完善的ActiveX Web控件教程

    免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带   跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...

  4. Html控件和Web控件(转)

    作为一名ASP.NET的初学者,了解并且区别一些混淆概念是很必须的,今天这篇博文 就是主要向大家介绍一下Html控件和Web控件.在ASP.net中,用户界面控件主要就是 Html控件和Web控件,在 ...

  5. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  6. 2015.2.16 关于delphi web控件打开新网页时弹出关闭页面(js代码)出错的解决办法研究

    参考网址1:http://www.csharpwin.com/csharpspace/2360.shtml...参考网址2:http://www.oschina.net/question/234345 ...

  7. 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻

    访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...

  8. [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)

    @ ^ @:如果是加载到web控件上,就把注释掉的解除注释(改为web控件点后面的函数),把下一句注释 BOOL Button::LoadFromResource(UINT nRes){//打开网页加 ...

  9. Web控件文本框Reset的功能

    在前一篇中<怎样实现Web控件文本框Reset的功能>http://www.cnblogs.com/insus/p/4120889.html Insus.NET只实现了文本框的功能.单个或 ...

随机推荐

  1. Core Java - 流(Stream) - 字节流和字符流(一)

    0. 概述: Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流. 字节流: InputStream / OutputStream 当操作字节或其它二进制对象时,应当使 ...

  2. 在ps中画两个同心圆并且把两个同心圆进行任意角度切割

    在工作中遇到要在ps中画如图两个同心圆,并且进行6等分.查找资料加自己摸索,可以通过以下方式实现: 1.新建一画布.并用通过标尺画出两条水平和垂直参考线,选择椭圆工具,并在选项设置中选择圆和从中心两个 ...

  3. 使用ueditor小结

    1. 导入 js: ueditor.config.js ueditor.all.js css/images/plugin: themes lang dialog(可选) third-party(可选) ...

  4. JVM -Xss调整Stack Space的大小 【转】

    Java程序中,每个线程都有自己的Stack Space.这个Stack Space不是来自Heap的分配.所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响 ...

  5. android Studio NDK

    官方文档地址: https://developer.android.com/studio/projects/add-native-code.html#download-ndk 最近推出CMake方式集 ...

  6. 气球或者泡泡向上飘动 jQuery插件

    圣诞.元旦要来了,公司以往基本每个月至少要搞一两款手机小游戏来宣传产品,这次也不例外!! 之前做过,按压柚子.许愿.吃柚子等等小游戏,这次是做个那种 气球向上飘动,戳破气球,随机获取奖品.如下图: 手 ...

  7. SASS用法指南-转

    作者: 阮一峰  日期: 2012年6月19日  原文地址:http://www.ruanyifeng.com/blog/2012/06/sass.html 艹,没想到sass 2012年就有了.现在 ...

  8. Windows下移动MariaDB数据目录 (转!)

    Windows下移动MariaDB数据目录: http://www.xue163.com/news/940/9403312.html [环境]OS:Windows Server 2008 R2 x64 ...

  9. xml和xsd架构文档相关知识

    1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...

  10. C primer plus 练习题 第二章

    6. #include <stdio.h> void echo(); int main() { /* echo(); echo(); echo(); printf("\n&quo ...