2011-11-15 5 views
0

내가 로컬 처리 모드에서 이미지로 내보낼 사용하고 다음 코드는 코드가 잘 작동 여기Asp.net- 보고서 뷰어 수출

Response.Buffer = true; 
Response.Clear(); 
Response.ContentType = mimeType; 
Response.AddHeader("content-disposition", "attachment; filename= hi." + "jpeg"); 
Response.BinaryWrite(byts); 
Response.Flush(); 
Warning[] warnings; 
string[] streamids; 
string encoding; 
string extension; 
string mimeType = "image/png";' 
string deviceInfo ="<DeviceInfo><OutputFormat>PNG</OutputFormat></DeviceInfo>"; 
byte[] byts = null; 
byts = ReportViewer1.LocalReport.Render("Image", deviceInfo , out mimeType, out encoding, out extension, out streamids, out warnings); 
Response.Buffer = true; 
Response.Clear(); 
Response.ContentType = mimeType; 
Response.AddHeader("content-disposition", "attachment; filename= hi." + "jpeg"); 
Response.BinaryWrite(byts); 
Response.Flush(); 

이지만, 그렇지 않습니다 이미지로 전체 보고서를 내보낼, 첫 페이지는 이미지로 내보내는 경우에만, 나는 이미지로 두 번째 페이지를 볼 수없는, 당신이 할 수있는

답변

2

Shanmugapriya.D

사전에 감사 저를 도와주세요 에 대한 이미지 만 가져 오기 ReportViewer 컨트롤에서 한 페이지. 어느 컨트롤의 CurrentPage 속성을 변경하거나 경우 CreateStreamCallback 같은

private Stream LocalReportCreateStreamCallback(string name, string extension, 
     Encoding encoding, string mimeType,bool willSeek) 
{ 
    var stream = new MemoryStream(); 
    m_pages.Add(stream); 
    return stream; 
} 

걸리는 Render overload를 사용하여 방법까지 콜백에 호출 계속 렌더링 - 당신이 할 수있는 모든 페이지에 대한 이미지를 생성하는 것입니다 페이지가 완료되고 모든 페이지 이미지에 대한 데이터로 m_pages 컬렉션이 채워집니다. 이제는 모든 이미지를 압축하여 응답을 보낼 수 있습니다. 또는 이미지 조작 라이브러리를 사용하여 해당 이미지를 결합하여 이미지를 하나의 큰 이미지로 만들어서 되돌릴 수 있습니다 (서버에 많은 부하가 걸릴 수 있으므로 좋은 생각이 아닙니다.).

일반적으로 미리보기 종류의 것을 만들려면 이미지를 캐시하고 해당 이미지에 대한 하이퍼 링크가 포함 된 HTML을 반환하는 것이 좋습니다.

+0

+1 훌륭한 답변과 훌륭한 조언 – Icarus