PDF 不可能包含对外部图像的引用(至少根据我的理解)。为了使图像出现在 PDF 中,它必须嵌入到文档中。因此,要使用外部图像,您的应用程序必须检索图像并将其存储在文档中。报表查看器将尝试为您执行此操作。
两个可能的答案:
首先,为了让您的应用程序将图像打包成 PDF,它必须能够从您指定的 URL 中检索图像。如果该 URL 位于代理后面(从您的应用服务器的角度来看)和/或需要凭据才能访问,这将对报表查看器的默认配置提出挑战。
如果代理服务器是问题,请查看您可以在下面添加的 web.config 的设置。您可能还需要提供网络凭据,以便您的应用可以向代理进行身份验证。有很多方法可以解决这个问题,但最简单的方法之一是将您的应用程序作为服务帐户在您的域上运行,该服务帐户有权遍历您的代理。您可以通过临时运行站点来测试这一点(应该是临时的,因为这是一种可怕的安全做法)。
您正在使用的图像可能需要凭据才能访问(尝试在 Firefox 中使用空 cookie 提取图像并验证是否需要凭据才能访问它)。如果它需要 Windows 身份验证,则代理安全性的相同解决方案可能适用于远程映像所需的身份验证。如果它需要某种其他形式的身份验证,您最好将图像下载并嵌入到您的项目中。
也可以在代码中使用其他方式下载图像并将其转换为字节数组以包含在报告中。网上有很多这样的例子,包括这里的 Stack Overflow 。
其次,看看下面的页面:
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>
希望其中一项或两项有所帮助。
杰瑞