译: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只实现了文本框的功能.单个或 ...
随机推荐
- java bean、List、数组、map和Json的相互转化
工程 json包为 代码 package com.my.json; public class ChildBean { private String childName; private String ...
- javamail邮件发送例子
public class EmailTask{ // Session used by the javamail classes private Session session; ...
- iOS客户端的在线安装和更新——针对ADHoc证书
这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视. 一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不 ...
- mssql2012以后新增的offset分页,看起来爽死了!!!
有没有办法让那时间显示精确到毫秒级呢!!! 2016年12月01日更新 正式用到项目中的时候才发现大坑,那个排序字段必须形成唯一 ,要不然就分页失败的 ...
- ECshop 怎样修改商品详细页的“浏览次数”
怎样修改商品详细页的“浏览次数” 最好可以修改为成倍增加的,比如客户浏览了一次,显示的是20次. 修改 goods.php 文件的下面这行代码即可 $db->query('UPDATE ' . ...
- Homebrew
Homebrew官网:http://brew.sh Homebrew installs the stuff you need that Apple didn't Homebrew的安装非常简单,打开终 ...
- iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)
本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...
- Android Material Design控件学习(一)——TabLayout的用法
前言 Google官方在14年Google I/O上推出了全新的设计语言--Material Design.一并推出了一系列实现Material Design效果的控件库--Android Desig ...
- [原]SQLite的学习系列之获取数据库版本
最先了解到SQLite是基于其作为移动客户端数据存储平台,以下是其官网(https://www.sqlite.org/)关于SQLite的一段介绍: SQLite是遵守ACID的轻型数据库引擎,它包含 ...
- bootstrap插件学习-bootstrap.scrollspy.js
先看bootstrap.dropdown.js的结构 function ScrollSpy(){} //构造函数 ScrollSpy.prototype = {} //构造器的原型 $.fn.scro ...