11

给定一个带有嵌入图像的 SSRS 报告定义文件,只是想知道是否可以提取该图像 XML 以重新创建原始图像文件。

例如:

在 rdlc 文件中,您可能会看到这样的 xml:

<EmbeddedImage Name="tick">
  <MIMEType>image/bmp</MIMEType>
  <ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE>>
  </ImageData>
</EmbeddedImage>

是否可以获取 ImageData,并以某种方式对其进行转换以重新创建原始图像位图字节流?

(这在您丢失嵌入图像所基于的原始图像文件等情况下可能很有用。)

4

4 回答 4

19

此博客文章中详细介绍了两种方法:

  1. 如果您需要在此处重复使用,请将编码图像从一份报告复制到另一份报告。
  2. 将报告的副本导出到 Excel 并从电子表格中复制图像。

或者,如果您需要更直接地访问图像,我发现这个实用程序可以解析 XML 并加载和导出图像。看起来源代码可用。

于 2012-04-04T13:46:30.133 回答
9

我创建了一个小的 Power Shell 脚本来解决这个问题:

$ErrorActionPreference = 'Stop';
Get-ChildItem -Filter '*.rdl' | ForEach {
    $reportFile = $_;
    Write-Host $reportFile;
    $report = [xml](Get-Content $reportFile);
    $report.Report.EmbeddedImages.EmbeddedImage | Foreach {
        $imagexml = $_;
        $imageextension = $imagexml.MIMEType.Split('/')[1];
        $filename = $imagexml.Name + '.' + $imageextension;
        Write-Host '->' $filename;
        $imageContent =  [System.Convert]::FromBase64String($imagexml.ImageData);
        Set-Content -Path $filename -Encoding Byte -Value $imageContent;
    }
}

https://gist.github.com/Fabian-Schmidt/71746e8e1dbdf9db9278

此脚本从当前文件夹中的所有报告中提取所有图像。

于 2016-03-29T22:12:15.590 回答
2
  1. 打开 XML(在记事本 ++ 或任何东西中)
  2. 寻找<ImageData></ImageData>标签
  3. 复制标签之间的 64 位编码字符串
  4. 查找将 x64 编码字符串转换为文件的实用程序。我使用了这个网站并下载了图像
于 2019-11-13T16:06:42.170 回答
1

我只需要这样做并意识到可以剪切和粘贴嵌入的图像,即使无法复制和粘贴。

于 2014-05-30T15:17:06.267 回答