使用表达式设置值时,SSRS外部图片无法显示

12

我正在通过嵌入MVC应用程序的aspx页面使用Microsoft.ReportViewer.WebForms版本11。报告是直接从报告查看器呈现为PDF。

问题

我有一个表格,显示外部图像。如果图像的URL是从表达式计算或从数据库中的列设置,则不会显示图像。只有在报告中直接硬编码URL时,图像才会显示。显然这不是一个解决方案,但它显示了报告能够访问URL并呈现图像。

我从呈现报告中得到了这些警告:

图像“LinkedImage”的ImageData无效。详细信息:URI无效:无法确定URI的格式。

图像“LinkedImage”的ImageData属性的值为“”,这不是有效的ImageData。

我尝试过的

  1. 我已经仔细检查了生成的URL,它是正确的。我甚至将其点击操作设置为图像的超链接,它可以正确地转到图像。

  2. 最初我在表达式中连接URL,但在这样做不起作用后,我让SQL查询构建了整个URL。它仍然无法显示。

  3. 我尝试设置标志:

    reportViewer.LocalReport.EnableExternalImages = true;
    
  4. 使用 .NET Reflector 生成 PDB 文件,我能够逐步调试报表查看器的代码。值对象上有一个名为“IsExpression”的标志,当报表呈现时会设置为false。我不太了解报表查看器的内部工作原理,因此不知道这是否是一个红色警报。

  5. 我已将输出格式更改为HTML,但仍无法显示。图像标记(在Chrome开发者工具中看到)呈现为:

  6. <img onload="this.fitproportional=true;this.pv=0;this.ph=0;" height="5px" width="1px" src=(unknown)>
    
  7. 我已经尝试设置每个图像的正确MIMEType值。(感谢Mike Honey的建议)

  8. 我已经尝试了AutoSizeFitFitProportionalClip不同的Sizing值。

  9. 我修复并完全重新安装了ReportViewer运行时安装程序,使用的是这个安装程序:https://www.microsoft.com/en-gb/download/details.aspx?id=35747

  10. 我已经从本地的Visual Studio实例和另一个服务器上的网站(安装了相同的ReportViewer版本)中运行了网站,问题仍然存在。

我想引起对第4点的注意。是否有一种配置导致ReportViewer代码无法将该值视为表达式?

代码

以下是RDL中的标记:

<Image Name="LinkedImage">
    <Source>External</Source>
    <Value>=Fields!imageUrl.Value</Value>
    <Sizing>FitProportional</Sizing>                               
    <Style>
        <Border>
            <Style>None</Style>
        </Border>
    </Style>
</Image>

这里是一个示例URL(示例中已删除主机):

http://---------/images/FEE40608-0457-E511-A17F-00155D145C00/FFE40608-0457-E511-A17F-00155D145C00.jpg

我有什么遗漏吗?谢谢!


1
可能是一个完全无关的问题,但从我的经验来看,出于这个原因,我避免在SSRS中使用.jpg文件:https://dev59.com/E2Uo5IYBdhLWcg3w7jIq 对我来说,SSRS已知会导致jpg文件出现奇怪的不可复制问题。 - Pants
1
谢谢@ChanceFinley。我尝试了一些PNG文件,但没有成功。 - Bill
1
只是猜测,也许需要某种身份验证标头/cookie才能访问服务器上的图像?如果是这样,您可以通过在浏览器中输入URL(您可能已登录)来访问它,但报告引擎可能无法访问它... - user1429080
1
好的,让我们尝试一些东西。如果您使用普通的PictureBox并从数据库中使用URL会发生什么呢?让我们看看它是否显示,这样我们就知道您获取的URL确实是正确的。 - traveler3468
那是否意味着将URL作为报告的参数传递,以查看其是否正确呈现?我可以试一下。至于创建方面,我在SSMS中编写了查询,然后将其放入了一个使用安装了商业智能工具的Visual Studio 2013编辑的报告中。我即将尝试一个非常基本的数据集仅包含图像URL的新报告。 - Bill
显示剩余4条评论
2个回答

3
我最终找到了问题的根本原因。这个问题实际上是由自定义的ReportProcessor类引起的,该类已添加到MVC应用程序中,它在呈现之前操纵RDL。具体来说,它从RDL的Image节点的Value节点中删除了=字符。我没有意识到报表在其原始状态下没有到达呈现阶段。我将为此付出声誉代价!
对于那些引入了不同的ReportProcessor以执行此类操作的人来说,这个问题将是独特的,因此我不知道它对在SO上查找这个问题的人有多大用处。我将把它保留在这里,因为它可以用作检查清单。
很抱歉浪费大家的时间。感谢Mike-Honey、user1429080和AndrewE为他们的时间和努力。

很高兴你找到了问题的根源 :) - traveler3468

0
在Image对象的属性中,我会检查MIMEType属性是否已正确设置,例如image/jpeg。
我的理解是,您的Web浏览器足够聪明,可以在没有此信息的情况下猜测正确,但SSRS渲染引擎并不那么聪明。

1
很抱歉那没有改变任何事情。不过还是谢谢,我会把它添加到我尝试过的事情清单上。 - Bill
1
我弃权了。尺寸是多少? - Mike Honey
不好意思,我已经尝试了AutoSize、Fit、FitProportional和Clip的大小调整值,但都没有成功。 - Bill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接