2012-04-04 3 views
8

포함 된 이미지가 포함 된 SSRS 보고서 정의 파일이 제공되면 이미지 XML을 추출하여 원본 이미지 파일을 다시 만들 수 있는지 궁금 할뿐입니다.임베디드 이미지를 파일로 추출 할 수 있습니까?

:

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

는 imageData의 가지고 가고, 원본 이미지 비트 맵 바이트 스트림을 다시 만들려면 어떤 방법으로 형식을 변환 할 수 있습니다 :

RDLC 파일 내의

,이 같은 XML을 볼 수 있습니다?

(이 등이 포함 된 이미지 기반이되는 원본 이미지 파일을 분실 한 경우와 같이 경우에 유용 할 수 있습니다.)

답변

13

두 가지 방법이 this blog post에 자세히 설명되어 있습니다 :

  1. 복사 보고서를 다시 사용해야하는 경우 한 보고서에서 다른 보고서로 이미지를 인코딩 할 수 있습니다.
  2. 보고서 복사본을 Excel로 내보내고 스프레드 시트에서 이미지를 복사하십시오.

또는 이미지에 직접 액세스해야하는 경우 XML을 구문 분석하고 이미지를로드하고 내보내는 this utility을 발견했습니다. 소스 코드를 사용할 수있는 것처럼 보입니다.

+1

덕분에 유틸리티가 잘 작동합니다. rdlc 파일 (파일 열기 대화 상자의 * .rdlc 파일 스펙 포함)에 대해서도 약간의 변경이 필요합니다. –

1

이 작업을 수행하기 만하면 복사 및 붙여 넣기가 불가능할지라도 포함 된 이미지를 잘라내어 붙여 넣을 수 있다는 것을 깨달았습니다.

5

나는이 문제를 해결하기 위해 작은 파워 쉘 스크립트를 만들었습니다

$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

Lifesaver - 감사합니다! – CamM

관련 문제