convertir una imagen guardada en byte en una imagen itextsharp para mostrar en PDF C#

publicado por: Anonymous

Necesito convertir una imagen guardada en byte en la base de datos (SQL) para poder imprimirla a un pdf con itextsharp

En este codigo llamo al metodo donde se consulta el byte de la base de datos.

string imgByte = obtenerByteImagen (codigo, codigoCuentas, imageByte, cone);
            Byte[] img = Convert.FromBase64String(imgByte);

Este es el metodo:

public string obtenerByteImagen(string codigo, string codigoCuentas, string imageByte, SqlConnection cone) {

    SqlDataReader reader;

    try
    {
        cone.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cone;

        cmd.CommandText = "SELECT codigoCuentas FROM dbo.pruebasMil where identificador = '" + codigo + "'";
        reader = cmd.ExecuteReader();
        //reader.Read();

        //cmd.CommandType = CommandType.Text;



        if (reader.Read())
        {
            //Console.WriteLine(String.Format("{0}", reader["nombre"]));

            codigoCuentas = reader["codigoCuentas"].ToString();

            cone.Close();
        }
    }
    catch
    {

    }
    try
    {
        cone.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cone;

        cmd.CommandText = "SELECT logo FROM dbo.cuentas where codigo = '" + codigoCuentas + "'";
        reader = cmd.ExecuteReader();
        //reader.Read();

        //cmd.CommandType = CommandType.Text;



        if (reader.Read())
        {
            //Console.WriteLine(String.Format("{0}", reader["nombre"]));

            imageByte = reader["logo"].ToString();

            cone.Close();
        }
    }
    catch
    {

    }

    return imageByte;
}

Aqui lo convierto a imagen de itextsharp y lo pongo en el documento:

iTextSharp.text.Image image12 = iTextSharp.text.Image.GetInstance(img);
document.Add(image12);

El error que me da es el siguente:

System.FormatException: ‘La entrada no es una cadena Base 64 válida porque contiene un carácter que no es Base 64, más de dos caracteres de relleno o un carácter no válido entre los caracteres de relleno. ‘

En esta linea de codigo:

Byte[] img = Convert.FromBase64String(imgByte);

solución

  1. No es aconsejable llevar las imágenes o archivos a la base de datos pues
    implica mucho espacio de almacenamiento a usar, lo cual
    te puede traer problemas pues tu base de datos crecería demasiado(es
    mi opnion)
  2. Para poder usar una imagen en iTextSharp podrías usar esta pedazo de código.
    Como podras ver convertimos primero el byte[] a una imagen para luego usarla
    en el reporte.

    public Image Base64ToImage(string base64String)
    {
        // Convierte tu string 64 a un byte[]
        var imagenBytes = Convert.FromBase64String(base64String);
        var ms = new MemoryStream(imagenBytes, 0,
            imagenBytes.Length);
    
        // Convierte tu byte[] a imagen 
        ms.Write(imagenBytes, 0, imagenBytes.Length);
        var image = Image.FromStream(ms, true);
        return image;
    }
    

    Uso:

    iTextSharp.text.Image image12 = iTextSharp.text.Image.GetInstance(
                       Base64ToImage(
                           obtenerByteImagen (codigo, codigoCuentas, imageByte, cone)
                       ),System.Drawing.Imaging.ImageFormat.Jpeg);
    

saludos espero que te sirva de ayuda

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *