2009-08-12 25 views
7

Estoy usando el Microsoft ReportViewer que viene con ASP.NET y tengo un parámetro de informe que debe establecer el valor (ruta) de una imagen en mi informe. Proporciono la ruta como una URL completa en este momento, empezando por http: // pero también he intentado esto como una ruta relativa a la aplicación, una ruta enraizada en el sitio, etc. y por alguna razón la imagen siempre se muestra como la X roja cuando exporta a PDF Solo estoy creando una instancia de un control en el código, estableciendo las propiedades y exportando directamente a la secuencia de respuesta para que actúe como una descarga.ASP.NET rdlc con imágenes externas que no muestran imágenes en PDF

No estoy seguro de cuál podría ser el problema con la imagen no aparece, por lo que si alguien tiene alguna idea, por favor hágamelo saber.

ACTUALIZA 1

he determinado que puedo incrustar la imagen con un URL si está en mi servidor web público, pero cuando estoy corriendo en localhost La imagen no incrustar. He confirmado para localhost que si pego la misma URL en mi navegador, la imagen se abrirá correctamente. Hasta donde yo sé, no tengo un proxy. Así que puedo solucionar mi problema, pero todavía no entiendo cuál es el problema con localhost.

ACTUALIZACIÓN 2

olvidó mencionar que cuando se abre la URL de la imagen desde un navegador que funciona bien.

Respuesta

13

No es posible que un PDF para contener una referencia de una imagen externa (al menos desde mi entendimiento). Para que una imagen aparezca en el PDF, debe estar integrada en el documento. Por lo tanto, para usar una imagen externa, su aplicación debe recuperar la imagen y almacenarla en el documento. El visor de informes intentará hacer esto por usted.

dos respuestas posibles:

Primeros, a fin de que su aplicación para empaquetar la imagen en el PDF, que deben ser capaces de recuperar la imagen de la URL que está especificando. Si esa URL está detrás de un proxy (desde la perspectiva de su servidor de aplicaciones) y/o requiere credenciales para acceder, esto presentará un desafío con la configuración predeterminada del visor de informes.

Si el problema es un servidor proxy, consulte la configuración de su web.config que puede agregar a continuación. Es posible que también deba proporcionar credenciales de red, para que su aplicación pueda autenticarse en el proxy. Hay muchas maneras de resolver esto, pero una de las más fáciles es ejecutar su aplicación como una cuenta de servicio en su dominio que tiene derecho a atravesar su proxy. Puede probar esto ejecutando el sitio temporalmente (debe ser temporal porque esta es una práctica de seguridad horrible).

La imagen que está utilizando podría requerir el acceso de credenciales (intente extraer la imagen en Firefox con las cookies vacías y verifique si se requieren credenciales para acceder a ella). Si requiere la autenticación de Windows, la misma solución a la seguridad del proxy puede aplicarse a la autenticación requerida en la imagen remota. Si requiere alguna otra forma de autenticación, es mejor que descargue e incorpore la imagen en su proyecto.

También es posible descargar la imagen usando otros medios en su código y convertirla en una matriz de bytes para incluirla en el informe. Hay muchos ejemplos de esto en la web, incluido un Desbordamiento de pila here.

Segunda, echar un vistazo a la siguiente página:

http://msdn.microsoft.com/en-us/library/ms251715%28VS.80%29.aspx

El uso de imágenes externas en un informe ReportViewer no está habilitado de forma predeterminada . Para usar una imagen externa, debe establecer la propiedad EnableExternalImages en su código. Dependiendo de su configuración de red, es posible que también tenga que omitir las configuraciones de proxy a para permitir que aparezca la imagen externa. Puede agregar la siguiente configuración al del archivo Web.config para eludir el proxy local . Al modificar el archivo Web.config , asegúrese de especificar el nombre del servidor proxy que es utilizado en su red:

<system.net> 
<defaultProxy> 
<proxy usesystemdefault = "false" bypassonlocal = "true" proxyaddress = "http://<proxyservername>:80/" /> 
<defaultProxy> 
</system.net> 

Esperanza una o ambas de estas ayudas.

Jerry

+0

Olvidé mencionar que si su imagen está en su aplicación local y usa la autenticación de Windows, es posible que se encuentre con un problema común donde la autenticación de Windows falla localmente: http://support.microsoft.com/kb/896861 También debe controlar el registro de eventos en su servidor por cualquier tipo de error o error de autenticación para ayudar a su diagnóstico de este problema. Jerry –

+0

¿Qué tipo de autenticación tiene en su sitio local? ¿Has levantado la imagen en IE o has probado con Firefox como sugerí? ¿Tiene algún error relevante en su registro de eventos? –

+0

Creo que mencioné que la imagen aparece bien en el navegador. Además, no hay nada en los registros de eventos cuando genero el informe. Agradezco sus sugerencias, pero ninguna de ellas parece resolver el problema. Estoy de acuerdo en que la imagen probablemente podría recuperarse y convertirse en una matriz de bytes para mostrar, pero preferiría evitarlo, ya que este es solo un problema localmente y no en uso en vivo. –

0
  1. ¿Puede el visor de informes obtener una imagen de una URL relativa? Nunca lo he usado, así que mejor verificar esa suposición.
  2. ¿Ha intentado utilizar el helper Html.Content() para establecer la URL? Cada vez que tengo problemas con mis URL es porque no usé esto para generar la URL correcta para la vista.
+0

la URL http: // es sin duda correcta y el uso de una dirección URL relativa no parece estar haciendo una diferencia, sin importa lo que es relativo a. –

0

No creo que Adobe Reader (o tal vez la especificación de PDF en sí?) Permite cargar contenido externo por razones de seguridad. Recuerdo vagamente tener un problema similar que no tenía nada que ver con la presentación de informes de los servicios (generaba dinámicamente archivos PDF y usaba logotipos variables y tenía que incrustarlos).

0

¿Intentó una ruta de archivo normal (c: /temp/somefile.bmp)? El informe local de servicios de informes lee el archivo del disco y lo inserta en el archivo pdf producido. Asegúrese de que la identidad del grupo de aplicaciones en IIS tenga permiso de lectura en el archivo de imagen.

Lo estamos haciendo y nuestras imágenes se colocan en una carpeta img debajo del sitio web, junto con el resto de las imágenes de los sitios web. Evitamos la codificación difícil de la ruta utilizando Server.MapPath (ruta relativa).

Esperanza esto ayuda

2

Al pasar los nombres de archivos de imagen externos a Reportviewer parámetros, pase el formato como el siguiente: file: // C: \ app \ imágenes \ pic.jpg. Por lo demás, todo lo demás no funciona bien cuando se implementa.

+1

Tuviste la respuesta a mi problema, hombre. Tan sencillo. – celerno

+1

¡Esta debería ser la respuesta aceptada! –

1

Bien, esta es nuestra solución. El servidor web no reconoció su propio nombre DNS calificado como una URL, por lo que tuvimos que editar el archivo Hosts en la carpeta C: \ Windows \ System32 \ drivers \ etc y agregar el nombre de host como localhost. La línea hemos añadido al archivo fue:

ourserver.ourdomain.com 127.0.0.1

Cuestiones relacionadas