给定一个带有嵌入图像的SSRS报告定义文件,只是想知道是否可以提取该图像XML来重新创建原始图像文件。
e.g。 :
在rdlc文件中,你可能会看到像这样的xml:<EmbeddedImage Name="tick">
<MIMEType>image/bmp</MIMEType>
<ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE>>
</ImageData>
</EmbeddedImage>
是否可以获取ImageData,并以某种方式转换形式以重新创建原始图像位图字节流?
(在您丢失嵌入图像所基于的原始图像文件时,这可能很有用。)
答案 0 :(得分:17)
this blog post中详述了两种方法:
或者,如果您需要更直接地访问图像,我发现this utility将解析XML并加载和导出图像。看起来像源代码。
答案 1 :(得分:7)
我已经创建了一个小的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
此脚本从当前文件夹中的所有报告中提取所有图像。
答案 2 :(得分:1)
我只需要这样做,并意识到可以剪切和粘贴嵌入的图像,即使无法复制和粘贴。
答案 3 :(得分:1)
<ImageData></ImageData>
标签