2012-04-04 43 views
8

給定一個帶有嵌入式圖像的SSRS報告定義文件,只是想知道是否可以提取該圖像XML來重新創建原始圖像文件。可能將嵌入式圖像提取到文件?

例如:

的RDLC文件中,你可能會看到這樣的XML:

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

是否有可能採取的ImageData,並變換形式,它以某種方式重新創建原始圖像的位圖字節流?

(這可能是有用的情況下,例如當你失去了在其上嵌入的圖像是基於原始圖像文件)。

回答

13

兩種方法詳見this blog post

  1. 複製編碼的圖像從一個報告到另一個報告,如果你需要在那裏重複使用。
  2. 將報表的副本導出到Excel並從電子表格複製圖像。

或者如果您需要更直接地訪問圖像,我發現this utility將解析XML並加載和導出圖像。看起來像源代碼可用。

+1

謝謝,該實用程序運行良好。需要稍作更改才能使其適用於rdlc文件(包括文件打開對話框中的* .rdlc filespec)。 – 2012-04-05 01:06:26

1

我只需要做到這一點,並意識到即使無法複製和粘貼,也可以剪切和粘貼嵌入的圖像。

5

我創建了一個小功率的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

這個腳本在當前文件夾中的所有報告中提取的所有圖像。

+0

救命恩 - 謝謝! – CamM 2017-07-27 23:58:25