lunes, 28 de diciembre de 2015

Generar código de barras (Imagen) en C# y agregarlo en un informe

Lo que vamos a hacer es un fichero con extensión ashx, el cual es un fichero que se genera dinámicamente para crear en este caso una imagen, la imagen será un código de barras con el formato Barcoe128, por ejemplo para ponerlo en tu factura, para que lo paguen en el banco.

Una vez creada esta imagen lo vamos a poner en un informe, indicándole los parámetros adecuados para que genere el código barras concreto de una factura, por ejemplo pasandole el número único de la factura.

- Lo primero será generan el fichero ashx, en este caso: prueba.ashx, lo podréis crear en vuestro projecto, en Visual Studio, en este caso en C#:

<%@ WebHandler Language="C#" Class="prueba" %>

using System;
using System.Web;
using System.IO;

public class CodigoBarras : IHttpHandler
{   
    public string GetCode(HttpContext context)
    {
        string codigo = String.Empty;
        bool resultado = false;
        int? numeroFactura = String.IsNullOrEmpty(context.Request.QueryString["numeroFactura"]) ? null : (short?)Convert.ToInt16(context.Request.QueryString["numeroFactura"]);

        // Obtiene el texto con la información del código de barras
        // En posteriores entradas indicaré un ejemplo co la información del texto del código de barras
        if (numeroFactura.HasValue)
            resultado = facturaBL.ObtenerBarcode(numeroFactura, out codigo);

        if (resultado)
            return codigo;
        return null;
    }

    public void ProcessRequest(HttpContext context)
    {
        // Formato de código de barras 128
        iTextSharp.text.pdf.Barcode128 barcode = new iTextSharp.text.pdf.Barcode128();
        barcode.CodeType = iTextSharp.text.pdf.Barcode128.CODE128_UCC;

        // Obtiene el texto con la información del código de barras
        // En posteriores entradas indicaré un ejemplo co la información del texto del código de barras
        barcode.Code = GetCode(context) ?? String.Empty;

        //Establecer tipo mime
        context.Response.ContentType = "image/png";
       
        //Tamaño de la imagen one va alojado el código de barras
        System.Drawing.Bitmap imagen = new System.Drawing.Bitmap(363, 59);
        System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(imagen);
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

        // Pintar la imagen del código de barras
        graphics.DrawImage(barcode.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White), new System.Drawing.Point(30, 0));
        // Pintar el texto con el código de barras
        graphics.DrawString(barcode.Code, new System.Drawing.Font("Verdana", 7, System.Drawing.FontStyle.Regular), System.Drawing.Brushes.Black, new System.Drawing.Point(34, 22));
  
        // Guardar imagen
        using (MemoryStream stream = new MemoryStream())
        {
            imagen.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            stream.WriteTo(context.Response.OutputStream);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}


Antes de ponerlo en vuestro informe podréis probarlo desde el navegador para ver si os sale correctamente:

http://localhost/prueba.ashx?numeroFactura=1

- Por último crear la imagen en un informe (SSRS Reporting Services)


1. Creamos la imagen:

Crear imagen



2. Vamos a las propiedades de la imagen y le vamos a indicar una expresión para recoger la imagen del fichero ashx.

Propiedades de la imagen


3. Le indicamos de donde va a coger la imagen dinámica y le pasamos como parámetro el número de la factura, que ya debemos tener en el propio informe.

Dirección de la imagen




No hay comentarios:

Publicar un comentario