Asp.net - экспорт вьюер отчетов в Image в режиме локальной обработки - PullRequest
0 голосов
/ 15 ноября 2011

Следующий код, который я использую для экспорта в качестве изображения в режиме локальной обработки:

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 ]

2 голосов
/ 15 ноября 2011

Вы можете получить изображение только для одной страницы из элемента управления ReportViewer. Что вы можете сделать, это сгенерировать изображения для всех страниц - либо изменив свойство CurrentPage элемента управления, либо воспользовавшись перегрузкой Render , которая принимает 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 продолжает вызывать обратный вызов до тех пор, пока страницы не будут завершены, и, таким образом, ваша коллекция m_pages будет заполнена данными для всех изображений страниц. Теперь вы, вероятно, можете сжать все эти изображения и отправить через ответ, или вы можете использовать некоторую библиотеку манипуляций с изображениями, чтобы сшить эти изображения вместе, чтобы сформировать одно большое изображение для возврата назад (не очень хорошая идея, потому что это создаст большую нагрузку на ваш сервер ).

Как правило, если вы собираетесь создать вид перед просмотром, то хорошей идеей будет кэширование этих изображений и возврат HTML, который будет содержать гиперссылки на эти изображения.

0 голосов
/ 17 ноября 2011

Попробуйте добавить элемент StartPage к информации об устройстве и установите для него значение "0" Смотри http://msdn.microsoft.com/en-us/library/ms155373.aspx.

...