我正在通过嵌入在MVC应用程序中的aspx页面使用Microsoft.ReportViewer.WebForms
版本11。该报告可直接从报告查看器中以PDF格式呈现。
问题
我有一个Tablix显示外部图像。如果图像的URL是从表达式中计算出来的,或者是从数据库中的列设置的,则图像不会显示。仅当我直接在报告中对URL进行硬编码时,才会显示该图像。显然,这不是一种解决方案,但它表明该报表能够访问URL并呈现图像。
我从呈现报告时得到这些警告:
图像“ LinkedImage”的ImageData无效。详细信息:无效的URI:无法确定URI的格式。
“ LinkedImage”图像的ImageData属性值为“”,这不是有效的ImageData。
我尝试过的事情
我已经仔细检查了生成的URL,它是正确的。我什至使点击操作成为了指向图像的超链接,它可以正确转到图像。
最初,我是在表达式中连接URL,但此操作不起作用后,我让SQL Query构建了整个URL。它仍然不显示。
我尝试设置一个标志:
reportViewer.LocalReport.EnableExternalImages = true;
使用.NET Reflector生成PDB文件,我能够逐步浏览报告查看器的代码。在值对象上有一个称为“ IsExpression”的标志,在呈现报表时将其设置为false。我对“报表”查看器的内部功能了解不多,所以不知道这是不是一个红鲱鱼。
我已将输出格式更改为HTML,但仍不显示。图片标记(在Chrome开发者工具中可以看到)呈现为:
<img onload="this.fitproportional=true;this.pv=0;this.ph=0;" height="5px" width="1px" src=(unknown)>
代码
这是RDL中的标记:
<Image Name="LinkedImage">
<Source>External</Source>
<Value>=Fields!imageUrl.Value</Value>
<Sizing>FitProportional</Sizing>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Image>
以下是示例网址(从示例中删除了主机):
http://---------/images/FEE40608-0457-E511-A17F-00155D145C00/FFE40608-0457-E511-A17F-00155D145C00.jpg
我想念什么吗?谢谢!
答案 0 :(得分:3)
我终于走到了尽头。事实证明,此问题是由定制的ReportProcessor
类引起的,该类已添加到MVC应用程序中,该类甚至在渲染发生之前就操纵RDL。具体来说,它从RDL中“图像”节点的“值”节点中删除了=
字符。在我看来,报告并没有进入原始状态。我会用我花的声誉来付出代价!
对于引入了以这种方式操纵RDL的其他ReportProcessor的人们来说,此问题将是唯一的,因此我不知道这对于人们在SO上发现此问题有多大用处。我将其保留在此处,因为它可以用作要检查的事情的列表。
很抱歉浪费大家的时间。感谢Mike-Honey,user1429080和AndrewE的时间和精力。
答案 1 :(得分:0)
在Image对象的属性中,我将检查 MIMEType 属性是否已正确设置,例如图片/ jpeg 。
我的理解是,在没有此信息的情况下,您的Web浏览器足够聪明,可以正确猜测,但是SSRS呈现引擎并不那么聪明。