2009-08-12 71 views
7

我使用ASP.NET自带的Microsoft ReportViewer,并有一个报告参数应该设置报告中图像的值(路径)。我现在提供的路径是一个完整的URL,从http://开始,但也尝试过将它作为应用相对路径,站点根路径等,由于某些原因,图像始终显示为红色X它输出到PDF。我只是在代码中创建一个控件实例,设置属性并直接导出到响应流,以便下载。ASP.NET rdlc与外部图像不显示PDF中的图像

我只是不确定问题可能与图像没有显示出来,所以如果任何人有任何想法,请让我知道。

更新1

我已经决定,我可以用一个URL嵌入图像,如果它是我的公共Web服务器上,但是当我在本地主机的图像快到不会嵌入。我已经为localhost证实,如果我将相同的URL粘贴到我的浏览器中,图像将打开正常。据我所知,我没有代理。所以我可以解决我的问题,但我仍然不明白本地问题是什么。

更新2

忘了提,当URL的图像从浏览器中打开它工作正常。

回答

13

这是不可能的PDF包含的参考外部图像(至少从我的理解)。为了使图像出现在PDF中,它必须嵌入到文档中。因此,要使用外部图像,应用程序必须检索图像并将其存储在文档中。报告查看器将尝试为您执行此操作。

两个可能的答案:

首先,为了让您的应用程序打包图像到PDF,它必须能够检索您指定的URL的形象。如果该URL位于代理之后(从应用程序服务器的角度来看)和/或需要凭据访问,则这会对报告查看器的默认配置带来挑战。

如果代理服务器出现问题,请查看您的web.config中的设置,您可以在下面添加它。您可能还需要提供网络凭据,以便您的应用可以向代理进行身份验证。有很多方法可以解决这个问题,但最简单的方法之一就是将您的应用程序作为您的域中的服务帐户运行,并有权通过您的代理服务器。您可以通过临时运行该网站来测试此功能(应该是临时性的,因为这是一种可怕的安全措施)。

您正在使用的图像可能需要凭据才能访问(尝试使用空的cookie提取Firefox中的图像并验证是否需要凭据来访问它)。如果它需要Windows身份验证,则代理安全性的相同解决方案可能适用于远程映像上所需的身份验证。如果需要其他形式的身份验证,则最好下载并将图像嵌入到项目中。

也可以在代码中使用其他方式下载图像,并将其转换为字节数组以包含在报告中。网上有很多这样的例子,包括Stack Overflow here

,看看下面的页面:

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

在 的ReportViewer报告使用外部图像不被 默认启用。要使用外部图像,您必须在您的代码中设置EnableExternalImages 属性。根据 您的网络配置,您可能需要跳过代理设置 以允许外部图像出现。 您可以将以下设置添加到 Web.config文件以绕过 本地代理。当修改您的 Web.config文件,一定要指定 那是你的网络中使用 代理服务器的名称:

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

希望的一个或两个的这些帮助。

杰里

+0

我忘记提及如果您的映像位于本地应用程序中并且您使用Windows身份验证,则可能会遇到Windows身份验证本地失败的常见问题: http://support.microsoft.com/kb/896861 您还应该在您的服务器上登录事件日志以了解任何类型的错误或身份验证失败情况,以帮助您诊断此问题。 Jerry – 2009-08-15 21:13:04

+0

您在本地网站上进行了哪种身份验证?按照我的建议,你是在IE中提取图像还是用Firefox测试?你的事件日志中是否有任何相关的错误? – 2009-08-17 23:58:44

+0

我想我提到的图像在浏览器中显示得很好。另外,生成报告时事件日志中没有任何内容。我很感谢你的建议,但他们似乎都没有解决问题。我同意可能会检索到图像并将其转换为字节数组来显示,但我更愿意避免这种情况,因为这只是本地的问题而不是实际使用。 – 2009-08-19 16:23:36

0
  1. 报表查看器是否可以从相对网址获取图片?我从来没有用过它,所以最好检查一下这个假设。
  2. 您是否尝试过使用Html.Content()助手来设置URL?每当我的网址遇到问题时,我都没有使用它来为视图生成正确的网址。
+0

使用http的网址://绝对是正确的,使用相对URL似乎没有被发挥作用,没有事关它的相关性。 – 2009-08-12 22:31:16

0

我不认为Adobe Reader(或者PDF规范本身?)允许为安全目的加载外部内容。我隐约记得有一个类似的问题,与报告服务无关(我动态生成PDF并使用变量标识并且必须嵌入它们)。

0

你试过一个普通的文件路径(c:/temp/somefile.bmp)吗?报告服务本地报告从磁盘读取文件并将其嵌入到生成的pdf文件中。确保IIS中应用程序池的标识具有图像文件的读取权限。

我们正在这样做,我们的图像被放置在网站下的img文件夹中,以及其余的网站图像。我们避免使用Server.MapPath(相对路径)对路径进行硬编码。

希望这有助于

2

当通过外部图像的文件名的ReportViewer参数,通过这样的格式:文件:// C:\应用\图像\ pic.jpg。其他任何情况通常在部署时无法正常工作。

+1

你有我的问题的答案,男人。很简单。 – celerno 2013-08-30 11:29:08

+1

这应该是被接受的答案! – 2016-11-11 11:38:01

1

好的,所以这是我们的解决方案。 Web服务器无法将自己的合格DNS名称识别为URL,因此我们必须编辑C:\ Windows \ System32 \ drivers \ etc文件夹中的主机文件,并将主机名添加为localhost。我们添加到该文件的路线是:

ourserver.ourdomain.com 127.0.0.1