Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 是否可以将嵌入图像提取到文件?_Image_Reporting Services - Fatal编程技术网

Image 是否可以将嵌入图像提取到文件?

Image 是否可以将嵌入图像提取到文件?,image,reporting-services,Image,Reporting Services,给定一个包含嵌入图像的SSRS报告定义文件,只是想知道是否可以提取该图像XML来重新创建原始图像文件 e、 g: 在rdlc文件中,您可能会看到如下xml: <EmbeddedImage Name="tick"> <MIMEType>image/bmp</MIMEType> <ImageData>Qk1mAwAAAAAAADYAAAAoAAAAEAAAABEAAAABABgA ... <<REST OF IMAGE HERE&g

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

e、 g:

在rdlc文件中,您可能会看到如下xml:

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

图像/bmp
QK1mawaaaaaaadayaaaaaaaaaaaaaaaaaaaaaaaaaaaaababga。。。
是否可以获取图像数据,并以某种方式对其进行转换,以重新创建原始图像位图字节流


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

中详细介绍了两种方法:

  • 如果需要在报表中重复使用编码图像,请将其从一个报表复制到另一个报表
  • 将报告副本导出到Excel并从电子表格中复制图像

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

    我只需要执行此操作,并意识到可以剪切和粘贴嵌入的图像,即使无法复制和粘贴。

    我创建了一个小型的powershell脚本来解决此问题:

    $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;
        }
    }
    

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

  • 打开XML(用记事本++或任何东西)
  • 查找
    标记
  • 在标记之间复制64位编码字符串
  • 查找将x64编码字符串转换为文件的实用程序。我使用并下载了图片

  • 谢谢,这个工具工作得很好。为了使它也适用于rdlc文件(包括文件打开对话框中的*.rdlc filespec),需要做一点小小的修改。只需将“打开文件”对话框过滤器更改为“(.rdl)|.rdl |(.rdlc)|.rdlc”,即可打开rdlc文件。脚本很棒,谢谢!如果您有多个包含名称相同但内容不同(例如“Header.png”)的图像的报表,您可以通过将第9行更改为
    $filename=[System.IO.Path]::GetFileNameWithoutExtension($reportFile)+'.+$imagexml.name+'.+$imageextension,将源报表名称作为图像名称的前缀这个网站更好。我无法使用您建议的站点提取图像。