2009-07-02 7 views
1

좋아, 그래서 내 SSRS 2008 보고서를 이미지로 내보내는 중입니다. 내가하고 싶은 것은 각 개별 페이지를 이미지로 내보내기입니다. 내 코드에서 보고서의 첫 번째 페이지 만 내보낼 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.SSRS 2008 이미지 전용 내보내기 보고서 내보내기 첫 페이지

Dim warnings As Microsoft.Reporting.WebForms.Warning() 
    Dim streamids As String() 
    Dim mimeType, encoding, extension As String 

    Dim deviceInfo As XElement = _ 
     <DeviceInfo> 
      <OutputFormat>JPEG</OutputFormat> 
     </DeviceInfo> 

    Report.ServerReport.SetParameters(Parameters) 
    Dim bytes As Byte() = Report.ServerReport.Render("Image", deviceInfo.ToString(), mimeType, encoding, extension, streamids, warnings) 

    Dim FileStream As New MemoryStream(bytes) 
    Dim ReportImage As New System.Drawing.Bitmap(FileStream) 

    ReportImage.Save(Server.MapPath("/Testing.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg) 

답변

5

내 프로젝트 중 하나에서 다음 코드를 사용하여 페이지 당 하나의 스트림을 얻습니다. 불행히도 VB.NET을 사용하지는 않지만 C#에서 VB로 변환 할 수 있어야합니다. 참고 : 이것은 SSRS2005에서 작동합니다 - SSRS2008에서도 작동하는지 잘 모르겠습니다! 또한 보고서 뷰어를 사용하지 않고 코드를 직접 인쇄하므로 EMF 장치 정보가 생성되므로이 코드를 변경해야 할 수도 있습니다.

이 기본 코드는 몇 시간 동안 인터넷 검색을 통해 웹에서 발견되었습니다. 저자에게 크레딧을주고 싶지만 링크를 북마크하지 않았습니다. 죄송합니다.

CultureInfo us = new CultureInfo("en-US"); 
string deviceInfo = String.Format(
     "<DeviceInfo>" + 
     " <OutputFormat>EMF</OutputFormat>" + 
     " <PageWidth>{0}cm</PageWidth>" + 
     " <PageHeight>{1}cm</PageHeight>" + 
     " <MarginTop>{2}cm</MarginTop>" + 
     " <MarginLeft>{3}cm</MarginLeft>" + 
     " <MarginRight>{4}cm</MarginRight>" + 
     " <MarginBottom>{5}cm</MarginBottom>" + 
     "</DeviceInfo>", 
     Math.Round(m_pageSize.Width, 2).ToString(us), 
     Math.Round(m_pageSize.Height, 2).ToString(us), 
     Math.Round(m_marginTop, 2).ToString(us), 
     Math.Round(m_marginLeft, 2).ToString(us), 
     Math.Round(m_marginRight, 2).ToString(us), 
     Math.Round(m_marginBottom, 2).ToString(us)); 

m_reportStreams = new List<Stream>(); 
try 
{ 
    // Tell SSRS to store one stream per page on server 
    NameValueCollection urlAccessParameters = new NameValueCollection(); 
    urlAccessParameters.Add("rs:PersistStreams", "True"); 

    // Render first page 
    Stream s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension); 
    m_reportStreams.Add(s); 

    // Loop to get other streams 
    urlAccessParameters.Remove("rs:PersistStreams"); 
    urlAccessParameters.Add("rs:GetNextStream", "True"); 
    do 
    { 
     s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension); 
     if (s.Length != 0) m_reportStreams.Add(s); 
    } 
    while (s.Length > 0); 

    // Now there's one stream per page - do stuff with it 
} 
finally 
{ 
    foreach (Stream s in m_reportStreams) 
    { 
     s.Close(); 
     s.Dispose(); 
    } 
    m_reportStreams = null; 
} 

편집
viewer 당신이/인쇄, 저장하려는 보고서를 렌더링하는 초기화 ReportViewer 컨트롤의 프로그래밍 생성 된 인스턴스는 것을 언급하는 것을 잊었다.

+0

시도한 결과 오류가 발생합니다. 실행 ''을 (를) 찾을 수 없습니다. –

+0

빠른 Google에서 다음 URL을 보여줍니다. 다른 사람은 당신이 당신의 착오 알림말을 도울 때 유효하다 : http://social.msdn.microsoft.com/forums/en-US/sqlreportingservices/thread/0ab399df-56b3-4ac8-a703-4001e7a5fb18 –

+0

나는 있고, 나 제안 된 모든 권장 솔루션을 사용해 보았습니다. 나는 당신의 대답을 옳은 것으로 받아 들일 것이고, 문제와 함께 새로운 질문을 게시 할 것이다. –

관련 문제