En el foro de MSDN han consultado como poder generar códigos de barra en una aplicación ASP.NET, yo hace bastante tiempo hice un ejemplo para una aplicación windows utilizando unas fuentes True Type para este menester y ahora haré lo mismo pero para una aplicación web.
El artículo original para Windows lo podéis encontrar en la web del guille en http://www.elguille.info/colabora/NET2006/Marckys_BarCode.htm .
Lo primero que voy a hacer es un proyecto web con una simple página donde podré introducir los datos para generar el código de barras y una combo para seleccionar las fuentes que me darán los diferentes formatos de código de barras.
La idea de esta utilidad es mostrar los datos en un formato de código de barras y la opción que he considerado más oportuna es generar una imagen con este texto y mostrarlo en la web como un simple control de servidor image de toda la vida.
Para poder realizar esto si tenernos que complicar muchísimo la vida. Lo mejor es crear un http handler que nos genere esta imagen y la muestre en el control.
Que es un HttpHandler ??
Nuestro Manejador:
El Método ProcessRequest
public void ProcessRequest(HttpContext context)
{
var cd = context.Request.QueryString.Get("code");
var fm = context.Request.QueryString.Get("format");
var width = (!string.IsNullOrEmpty(
context.Request.QueryString.Get("width")))
? int.Parse(context.Request.QueryString.Get("width"))
: 200;
var height = (!string.IsNullOrEmpty(
context.Request.QueryString.Get("height")))
? int.Parse(context.Request.QueryString.Get("height"))
: 60;
var size = (!string.IsNullOrEmpty(
context.Request.QueryString.Get("size")))
? int.Parse(context.Request.QueryString.Get("size"))
: 60;
if (!string.IsNullOrEmpty(cd))
{
using (new System.IO.MemoryStream())
{
var bitmap = new Bitmap(width, height);
var grafic = Graphics.FromImage(bitmap);
var fuente = CargarFuente(fm, size);
var point = new Point();
var brush = new SolidBrush(Color.Black);
grafic.FillRectangle(new SolidBrush(Color.White)
, 0, 0, width, (float)height);
grafic.DrawString(FormatBarCode(cd), fuente, brush, point);
context.Response.ContentType = "image/jpeg";
bitmap.Save(context.Response.OutputStream,
Imaging.ImageFormat.Jpeg);
}
}
else context.Response.Write("");
}
[/sourcecode]
Este manejador simplemente recupera la fuente que utilizaremos de la lista disponible crea un bitmap y le inserta el texto con la fuente del código de barras para mostrar el resultado como una imagen jpeg.
Los otros dos métodos a destacar es el formateo de los datos para que se puedan leer desde un lector de códigos de barras añadiendo los caracteres de escape correspondientes.
[sourcecode language=»csharp»]
private string FormatBarCode(string code)
{
return string.Format("*{0}*", code);
}
[/sourcecode]
[sourcecode language=»csharp»]
private Font CargarFuente(string fuente, int size)
{
var pfc = new PrivateFontCollection();
var f = "BARCOD39.TTF";
switch (fuente)
{
case "E39":
f = "BARCOD39.TTF";
break;
case "E13":
f = "EAN-13.TTF";
break;
case "E9":
f = "FRE3OF9X.TTF";
break;
}
pfc.AddFontFile(ConfigurationManager.AppSettings.Get("PATH_FONTS")
+ @"" + f);
return new Font(pfc.Families[0], (float)size);
}
[/sourcecode]
[sourcecode language=»csharp»]
protected void btnCargar_Click(object sender, EventArgs e)
{
Image2.ImageUrl = string.Format(@"MarckysCodeBar.ashx?code={0}&format={1}"
+ "&width=400&height=60&size=50",
TextBox1.Text, ddlFuentes.SelectedItem.Value);
Image2.Visible = true;
}
[/sourcecode]