当表达式设置值时不显示 SSRS 外部图像

SSRS external image not displayed when value set by expression

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

问题

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

我在呈现报告时收到这些警告:

The ImageData for the image ‘LinkedImage’ is invalid. Details: Invalid URI: The format of the URI could not be determined.

The value of the ImageData property for the image ‘LinkedImage’ is “”, which is not a valid ImageData.

我试过的

  1. 我仔细检查了生成的 URL,它是正确的。我什至将点击操作设为图像的超链接,它会正确转到图像。

  2. 最初我在表达式中连接 URL 但在这不起作用之后我让 SQL 查询构建整个 URL。还是不显示。

  3. 我试过设置一个标志:

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

  5. 我把输出格式改成了HTML,还是不显示。图像标记(如 Chrome 开发人员工具中所示)呈现为:

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

  7. 我尝试了 SizingAutoSizeFitFitProportionalClip

  8. 我使用此处的安装程序完全修复并重新安装了 ReportViewer 运行time 安装:https://www.microsoft.com/en-gb/download/details.aspx?id=35747

  9. 我有 运行 来自本地 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

我错过了什么吗?谢谢!

在 Image 对象的属性中,我会检查 MIMEType 属性 是否已正确设置,例如image/jpeg.

我的理解是您的网络浏览器足够聪明,可以在没有这些信息的情况下正确猜测,但 SSRS 渲染引擎并不那么聪明。

我终于弄明白了。事实证明,这个问题是由定制 ReportProcessor class 引起的,该定制 ReportProcessor class 已添加到 MVC 应用程序中,该应用程序甚至在渲染发生之前就对 RDL 进行了操作。具体来说,它从 RDL 中图像节点的值节点中删除 = 字符。我没有想到报告没有以其原始状态进入渲染阶段。我会用我付出的声望来付出代价!

这个问题对于引入不同的 ReportProcessor 以这种方式操作 RDL 的人来说是独一无二的,所以我不知道它对在 SO 上发现这个问题的人有多大用处。我会把它留在这里,因为它可以用作要检查的事项列表。

抱歉浪费大家的时间。感谢 Mike-Honey、user1429080 和 AndrewE 付出的时间和精力。