Asp.net-报表查看器以本地处理模式导出到Image

时间:2011-11-15 04:55:45

标签: asp.net report viewer

以下用于在本地处理模式下导出为图像的代码是

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(); 

此处代码工作正常,但它不会将完整报告导出为图像,只有第一页导出为图像,我无法将第二页看作图像, 请帮帮我 提前致谢

Shanmugapriya.D

2 个答案:

答案 0 :(得分:2)

您只能从ReportViewer控件获取一页的图像。您可以做的是为所有页面生成图像 - 通过更改控件的CurrentPage属性或使用带有CreateStreamCallback的Render overload,例如

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

在这种情况下,Render方法会一直呼叫回叫直到页面完成,因此您的m_pages集合将填充所有页面图像的数据。现在,您可以将所有这些图像压缩并发送到响应中,或者您可以使用一些图像处理库将这些图像拼接在一起以形成一个大图像以便返回(不是一个好主意,因为它会对您的服务器造成相当大的负担) )。

通常情况下,如果您要创建预览类型的东西,那么好主意就是缓存这些图像并返回包含这些图像的超链接的html。

答案 1 :(得分:0)

尝试将StartPage元素添加到设备信息中并将其设置为“0”。请参阅http://msdn.microsoft.com/en-us/library/ms155373.aspx

相关问题