Cargar una imagen en un report

03/08/2006 - 23:27 por Baldor | Informe spam
¿Es posible establecer por código una imagen en un crystal report?

Utilizo VSNET 2003

Preguntas similare

Leer las respuestas

#1 Jordi Julià
04/08/2006 - 08:32 | Informe spam
Hola,

Si que es posible, pude que el sistema que utilizo sea un poco complicado
pero funciona.

He generado una tabla en la base de datos con um campo imagen.
He generado un subinforme que como origen de datos temga esa tabla y ese
campo
Inserto el subinforme en el informe que quiero

Y este es un ejemplo del código para que en tiempo de ejecución:


'Explorar el informe que se está generando y si existen SubInformes de
imágenes se generan las tablas con las imágenes particulares
'Un subinforme de imágenes debe empezar con la clave "img"
Private Function Ensamblar_Informe_Imagenes_Explorar(ByRef Informe As
ReportDocument, ByRef ds As DataSet)

'Lectura de los objetos del informe para buscar subinformes de
imágenes
For Each Ctl As ReportObject In
Informe.ReportDefinition.ReportObjects

If Ctl.Name.Substring(0, 3) = "img" Then

Dim sbrpt As SubreportObject = Ctl
Dim NombreSubInforme As String =
sbrpt.SubreportName.Replace(".rpt", "")

Ensamblar_Informe_Imagenes_Cargar(NombreSubInforme, ds)

End If

Next

End Function

Private Function Ensamblar_Informe_Imagenes_Cargar(ByVal
NombreSubInforme As String, ByRef ds As DataSet)

'Generar la tabla donde colocaremos la imagen
ds.Tables.Add(NombreSubInforme)
With ds.Tables(NombreSubInforme).Columns
.Add("Compañia", System.Type.GetType("System.String"))
.Add("Imagen_1", System.Type.GetType("System.Byte[]"))
End With

'Según el nombre del subinforme cargaremos la imagen desde una
ubicación en el proyecto
Dim path_imagen As String = ""

If NombreSubInforme = "Imagen_Logo_Grande" Then
'srp1.ResourceName.Replace(".rpt", "") Then
path_imagen = HttpContext.Current.Server.MapPath("../") &
"Configuracion/Imagenes particulares/Cabecera_Informes_Grande.jpg"
End If

If NombreSubInforme = "Imagen_Logo_Pequeño" Then
'srp2.ResourceName.Replace(".rpt", "") Then
path_imagen = HttpContext.Current.Server.MapPath("../") &
"Configuracion/Imagenes particulares/Cabecera_Informes_Pequeño.jpg"
End If

'Generar la fila con la imagen y cargarla en la tabla
Dim dRow As DataRow
dRow = ds.Tables(NombreSubInforme).NewRow
dRow("Compañia") = Compañia

Dim oStream As New System.IO.MemoryStream
Dim ChartImage As System.Drawing.Image =
System.Drawing.Image.FromFile(path_imagen)
ChartImage.Save(oStream, System.Drawing.Imaging.ImageFormat.Jpeg)
dRow("Imagen_1") = oStream.ToArray()
oStream.Close()

ds.Tables(NombreSubInforme).Rows.Add(dRow)

End Function

Sólo quedará vincular la tabla generada en tiempo de ejecución al
subinfiorme:

Informe.OpenSubreport(NombreSubInforme).SetDataSource(ds.Tables(NombreSubInforme).)


Saludos
Jordi



"Baldor" escribió en el mensaje
news:
¿Es posible establecer por código una imagen en un crystal report?

Utilizo VSNET 2003

Respuesta Responder a este mensaje
#2 Jose Luis
04/08/2006 - 12:46 | Informe spam
Yo lo hago de otra manera, también complicada pero distinta a la tuya Jordi.
Cuando creo la consulta y genero el conjunto de datos, entro en el xsd que
genero y a pelo meto un campo base64binary, una vez que recupero los datos
le asigno a este campo la imagen que quiero.

Seguro que alguien tiene una manera mas sencilla, pero es otra opción y que
funciona.

Suerte.
"Jordi Julià" escribió en el mensaje
news:OHYWD$
Hola,

Si que es posible, pude que el sistema que utilizo sea un poco complicado
pero funciona.

He generado una tabla en la base de datos con um campo imagen.
He generado un subinforme que como origen de datos temga esa tabla y ese
campo
Inserto el subinforme en el informe que quiero

Y este es un ejemplo del código para que en tiempo de ejecución:


'Explorar el informe que se está generando y si existen SubInformes de
imágenes se generan las tablas con las imágenes particulares
'Un subinforme de imágenes debe empezar con la clave "img"
Private Function Ensamblar_Informe_Imagenes_Explorar(ByRef Informe As
ReportDocument, ByRef ds As DataSet)

'Lectura de los objetos del informe para buscar subinformes de
imágenes
For Each Ctl As ReportObject In
Informe.ReportDefinition.ReportObjects

If Ctl.Name.Substring(0, 3) = "img" Then

Dim sbrpt As SubreportObject = Ctl
Dim NombreSubInforme As String =
sbrpt.SubreportName.Replace(".rpt", "")

Ensamblar_Informe_Imagenes_Cargar(NombreSubInforme, ds)

End If

Next

End Function

Private Function Ensamblar_Informe_Imagenes_Cargar(ByVal
NombreSubInforme As String, ByRef ds As DataSet)

'Generar la tabla donde colocaremos la imagen
ds.Tables.Add(NombreSubInforme)
With ds.Tables(NombreSubInforme).Columns
.Add("Compañia", System.Type.GetType("System.String"))
.Add("Imagen_1", System.Type.GetType("System.Byte[]"))
End With

'Según el nombre del subinforme cargaremos la imagen desde una
ubicación en el proyecto
Dim path_imagen As String = ""

If NombreSubInforme = "Imagen_Logo_Grande" Then
'srp1.ResourceName.Replace(".rpt", "") Then
path_imagen = HttpContext.Current.Server.MapPath("../") &
"Configuracion/Imagenes particulares/Cabecera_Informes_Grande.jpg"
End If

If NombreSubInforme = "Imagen_Logo_Pequeño" Then
'srp2.ResourceName.Replace(".rpt", "") Then
path_imagen = HttpContext.Current.Server.MapPath("../") &
"Configuracion/Imagenes particulares/Cabecera_Informes_Pequeño.jpg"
End If

'Generar la fila con la imagen y cargarla en la tabla
Dim dRow As DataRow
dRow = ds.Tables(NombreSubInforme).NewRow
dRow("Compañia") = Compañia

Dim oStream As New System.IO.MemoryStream
Dim ChartImage As System.Drawing.Image =
System.Drawing.Image.FromFile(path_imagen)
ChartImage.Save(oStream, System.Drawing.Imaging.ImageFormat.Jpeg)
dRow("Imagen_1") = oStream.ToArray()
oStream.Close()

ds.Tables(NombreSubInforme).Rows.Add(dRow)

End Function

Sólo quedará vincular la tabla generada en tiempo de ejecución al
subinfiorme:

Informe.OpenSubreport(NombreSubInforme).SetDataSource(ds.Tables(NombreSubInforme).)


Saludos
Jordi



"Baldor" escribió en el mensaje
news:
¿Es posible establecer por código una imagen en un crystal report?

Utilizo VSNET 2003





Respuesta Responder a este mensaje
#3 Baldor
04/08/2006 - 13:49 | Informe spam
Gracias a los dos por las ideas, pero yo no uso el método setDataSource.

Mis reports son quienes se conectan a las bases de datos que sean
necesarias, no les paso yo el conjunto de datos.

Lo que busco es una forma de que el report sea quien carge la imagen, sin
que yo tenga que enviarle la cantidad de datos que esta ocupe. Algo así como
una formula o similar con la ruta de la imagen, y que el report la visualice
en un objeto.

¿Alguna idea?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida