译:c#生成条码的web控件
译文: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控件的更多相关文章
- Javascript语法去控制Web控件的Enabled属性
Web控件当使用Enabled属性时,它生成html之后会变成了disabled了.我们为了能够在javascript去控制控件的禁用与启用,得从这个disabled入手.如:
- 基本的Web控件四
基本的Web控件用法二 ListBox控件 页面布局: <div> <h1>ListBox控件</h1> 学生列表: <br/> <asp:Lis ...
- 一个完善的ActiveX Web控件教程
免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...
- Html控件和Web控件(转)
作为一名ASP.NET的初学者,了解并且区别一些混淆概念是很必须的,今天这篇博文 就是主要向大家介绍一下Html控件和Web控件.在ASP.net中,用户界面控件主要就是 Html控件和Web控件,在 ...
- 使用 WebView2 封装一个生成 PDF 的 WPF 控件
使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...
- 2015.2.16 关于delphi web控件打开新网页时弹出关闭页面(js代码)出错的解决办法研究
参考网址1:http://www.csharpwin.com/csharpspace/2360.shtml...参考网址2:http://www.oschina.net/question/234345 ...
- 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻
访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...
- [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)
@ ^ @:如果是加载到web控件上,就把注释掉的解除注释(改为web控件点后面的函数),把下一句注释 BOOL Button::LoadFromResource(UINT nRes){//打开网页加 ...
- Web控件文本框Reset的功能
在前一篇中<怎样实现Web控件文本框Reset的功能>http://www.cnblogs.com/insus/p/4120889.html Insus.NET只实现了文本框的功能.单个或 ...
随机推荐
- LCLFramework框架 1.1 Pre-Alpha 源码公布
使用开发框架的好处:1.框架在技术上为软件系统提供了完整的模式实践2.框架为团队提供了合理可行的软件开发过程模式3.框架的应用大大提高了团队的开发效率,团队只需要关注与领域相关的业务实现,而无需关注具 ...
- 批处理Ping服务器
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersio ...
- redhat下mysql安装与使用
1.安装 (1)查看是否安装 yum list installed mysql* (2)查看现有安装包 yum list mysql* (3)安装mysql服务器端 yum install mysql ...
- ODAC(V9.5.15) 学习笔记(十六)直接访问模式
直接访问模式(Direct mode)是ODAC最大的特色之一,即不需要安装Oracle客户端,ODAC越过了OCI(Oracle Call Interface ),使用TCP/IP协议就可以直接与O ...
- Android之GridView控制显示多少行以及遇到的怪事
前段时间接到一个需求,要求GridView超过两行只显示两行多余的不显示.但是GridView没有设置多少行的api,只有设置多少列的方法,到处查找资料都类似的case,stakeoverfrow上面 ...
- Windows batch,echo到文件不成功,只打印出ECHO is on.
jenkins 执行Windows batch command的时候,如果想要读写文件,echo到文件不成功. bat 代码如下: set ctime=%date%_%time% echo %ctim ...
- Android动态设置android:drawableLeft|Right|Top|Bottom 并根据分辨率自适应
http://blog.sina.com.cn/s/blog_4b93170a0102e1m9.html //调用setCompoundDrawables时,必须调用Drawable.setBound ...
- CentOS7之VMware安装
选择CentOS的原因 起初也了解了几个linux的发行版,最终决定选择centOS的原因却很简单:阿里云和腾讯云提供的云服务器中centos的版本最多. VMware12的安装 下载地址:http ...
- React JS 基础知识17条
1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js" ...
- HTML5[4]:去除不必要的标签,完全使用css实现样式
1)div.span的区别,div默认是沾满一行,span默认是inline 2)去除font之类的标签