Muchas veces tenemos que insertar imágenes ennuestros reportes dependiendo el registro que estemos mostrando, una forma queme a funcionado muy bien es la siguiente.
Cuando diseñemos el reporte debemos insertar un campo de tipo System.Byte[] en el DataTable utilizadopara el diseño de nuestro reporte, en este campo meteremos la imagen entiempo de ejecución.
Este campo se inserta en el reporte y será dondemostraremos la imagen.
Para mostrar el reporte utilizamos lo siguiente, para llenarel campo creado.
public void CargarReporte()
{
DataTable Dt = new
DataTable();//Creo un DataTable que sera la fuente de datos de mi reporte.
Dt=clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden);//Lleno el DataTable
rptOrdenSalidaTercero rpt = new rptOrdenSalidaTercero();// instancio el reporte
Dt.Columns.Add("Ruta11",System.Type.GetType("System.Byte[]"));//Agrego la columna con el tipo de dato "System.Byte[]",donde guardare mi imagen.
Dt.Rows[0]["Ruta11"] = CargarImagen("C:\foto.jpg"));//Cargo La imagen
rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
}
Y esta es la función que carga la imagen.
public static Byte[]CargarImagen(string rutaArchivo)
{
if (rutaArchivo != "")
{
try
{
FileStream Archivo = new FileStream(rutaArchivo, FileMode.Open);//Creo el archivo
BinaryReader binRead = new BinaryReader(Archivo);//Cargo el Archivo en modo binario
Byte[] imagenEnBytes = new Byte[(Int64)Archivo.Length]; //Creo un Array de Bytes donde guardare la imagen
binRead.Read(imagenEnBytes,0, (int)Archivo.Length);//Cargo la imagen en el array de Bytes
binRead.Close();
Archivo.Close();
return imagenEnBytes;//Devuelvo la imagen convertida en un array de bytes
}
catch
{
return new Byte[0];
}
}
return new byte[0];
}
Espacio de nombre Usados
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
En este enlace hay otra forma de leer las imágenes y cambiarles la resolución, ya que muchas veces el Crystal saca errores cuando la imagen tiene una resolución mayor a 100 ppp
ResponderEliminarhttp://codigodepuracepa.blogspot.com/2010/03/cambiar-reslucion-una-imagen-en-c.html
hola puede poner el proyecto de ejemplo es que lo estoy haciendo y no me da...
ResponderEliminarQue no le da .... ? que error le sale?
ResponderEliminarpues la verdad en la cargada de la imagen le doy la ruta
ResponderEliminarFileStream Archivo = new FileStream(rutaArchivo, FileMode.Open);//Creo el archivo
y de esta linea no pasa se sale al catch como si no puedra abrir la imagen
Puede ser por permisos, intenta abrirla en modo lectura
ResponderEliminarFileStream Archivo = new FileStream(rutaArchivo, FileMode.Open,FileAccess.Read)
ó remplaza el metodo "CargarImagen", por "imageToByteArray" que esta en este link:
http://codigodepuracepa.blogspot.com/2010/03/cambiar-reslucion-una-imagen-en-c.html
nada no sale depronto es que tenga algo malo en las otras lineas de codigo
ResponderEliminarno sera posible que subas la solucion. se lo agradeceria mucho... o mandamelo al correo pablo4426@gmail.com
Hola ... como estan ... espero q muy bien ... la verdad muchas gracias me sirvio exactamente para lo q necesitaba... no se q hubiera heco sin uds...
ResponderEliminarhola que tal me podrian explicar esta parte del codigo por que no se que son cada cosa por favor:
ResponderEliminarDt=clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden);
el Dt se que es el data table pero lo demas no se que sea
clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden), es una clase, donde yo le envio un parámetro y el me devuelve un dataTable con la información, que yo nececito para mi reporte, en su caso puede ser una consulta cualquiera, el caso es llenar el datatable, espero haberme explicado bien.
ResponderEliminarMe solicitaron crear un reporte que en la estructura tiene campos con texto e imágenes, lo que lo hace particular es que las imágenes pueden variar en cantidad y no quisiera dejar espacios en blanco en el reporte. Existe alguna forma de asignar dinámicamente las fotografías al reporte sin que deje espacios, es decir, que justifique cuando sea solo una imágen que aparezca en el centro, y así sucesivamente que las vaya asignando a una cierta región. Entiendo que a lo mejor estoy frente a dos problemas, manejar varias imágenes en un reporte en forma dinámica y la distribución de las mismas en el cuerpo definido del reporte.
ResponderEliminarSaludos
Antonio
Disculpa, como puedo poner un logo en el encabezado de un reporte, C#, visula estudio 2008
ResponderEliminarbuen aporte, solo un detalle.. como se utiliza C# la ruta correcta es asi: "C:\\foto.jpg" y no "C:\foto.jpg"
ResponderEliminarSi, tiene toda la razon, tambien se puede usar @"C:\\foto.jpg", el @ significa texto explicito.
ResponderEliminar