Автоматический экспорт отчёта

Обсуждение Stimulsoft Reports.NET
Ответить
Eugene A. Bykov
Сообщения: 52
Зарегистрирован: 28 июн 2006, 05:34
Откуда: Ekaterinburg, Russia

Автоматический экспорт отчёта

Сообщение Eugene A. Bykov »

Добрый день!
В веб-приложении я успешно могу сгенерировать отчёт и сохранить его в файл без выведения в StiWebViewer:

Код: Выделить всё

                Stimulsoft.Report.StiReport Report = null;
                Report = Stimulsoft.Report.StiReport.GetReportFromAssembly(Server.MapPath("compiled_report.dll"));
                Report.RegData(dataTable);
                Report.Render();
                Report.ExportDocument(Stimulsoft.Report.StiExportFormat.Pdf, @"C:\report.pdf");
В результате я получаю на сервере файл C:\REPORT.PDF. Всё совершенно логично.
Вопрос в том, возможно ли отдать пользователю окошко с предложением сохранить у себя файл без необходимости отображения его в StiWebViewer? То есть упрощённо - пользователь нажимает кнопку отчёт и получает предложение сохранить где-то у себя автоматически сгенерированный файл отчёта в нужном ему формате, в частности, в PDF. Что происходит программно? После нажатия на кнопку формируется отчёт, т.е. грузится шаблон, извлекаются данные и т.д. Затем формируется файл, который и хотелось бы отдать пользователю.
Проблема возникла из-за сложного представления данных в HTML... Т.е. выглядят отчёты некрасиво в окошке IE, да и большие, пользователю проще сохранить у себя PDF файл, чем прокручивать окно браузера... При этом еще и из-за проблем с памятью периодически отчёты "слетают", т.е. выскакивает Object reference not set to an instance of an object, хотя UseCache=true, а ошибка появляется после некоторого времени простоя компьютера, когда кэш уже очистился. В результате возникла идея попробовать отдать сразу PDF.
Спасибо!
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Автоматический экспорт отчёта

Сообщение Edward »

Да, это возможно.

Используйте, пожалуйста, следующий код:

Код: Выделить всё

StiReportResponse.ResponseAsPdf(this, report);
Таким образом, отчет будет отображен в pdf формате у клиента.

Спасибо.
Eugene A. Bykov
Сообщения: 52
Зарегистрирован: 28 июн 2006, 05:34
Откуда: Ekaterinburg, Russia

Автоматический экспорт отчёта

Сообщение Eugene A. Bykov »

Интересно. У меня существует 2 формы - задание параметров отчета, затем, используя

Код: Выделить всё

Server.Transfer
я перехожу на форму отчёта. Чтобы протестировать, я просто добавил

Код: Выделить всё

StiReportResponse.ResponseAsPdf(this, report);
в конце обработчика PageLoad второй страницы, на которой установлен StiWebViewer, рассчитывя, что я получу предложение сохранить PDF, а затем на экране увижу StiWebViewer. Однако я никуда не переадресуюсь с первой страницы, а сразу вижу предложение сохранения отчёта... Такое впечатление, что даже postback не проиходит. На самом деле это именно такое поведение, как я задумывал, однако я рассчитывал перенести код по генерации отчёта на первую страницу, от второй вообще избавиться...
А вообще вопрос - несмотря на то, что я получил желаемый результат, ожидаемо было иное... Почему не отображается отчёт в StiWebViewer на второй странице, если я использую ResponseAsPdf? Этот Response перекрывает все остальные, включая Server.Transfer?
И возможно ли исполнить какой-либо код после вызова ResponseAsPdf?
Спасибо!
Eugene A. Bykov
Сообщения: 52
Зарегистрирован: 28 июн 2006, 05:34
Откуда: Ekaterinburg, Russia

Автоматический экспорт отчёта

Сообщение Eugene A. Bykov »

А вообще возможно узнать, открыл ли пользователь документ отчёта, сохранил ли он его или нажал отмену? И можно ли выполнять какие-либо действия после того как отработал ResponseAsPdf?
Спасибо!
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Автоматический экспорт отчёта

Сообщение Vital »

А вообще вопрос - несмотря на то, что я получил желаемый результат, ожидаемо было иное... Почему не отображается отчёт в StiWebViewer на второй странице, если я использую ResponseAsPdf? Этот Response перекрывает все остальные, включая Server.Transfer?
И возможно ли исполнить какой-либо код после вызова ResponseAsPdf?
После вызова метода ResponseAsPdf код больше не исполняется. Вот метод, который мы используем:

Код: Выделить всё

public static void ResponseAs(Page page, MemoryStream stream, string contentType, string fileName, bool openDialog)
		{
			page.Response.Buffer = true;
			page.Response.ClearContent();
			page.Response.ClearHeaders();
			page.Response.ContentEncoding = System.Text.Encoding.UTF8;
			
			if (openDialog)
			{
				page.Response.ContentType = string.Format("{0};{1};", contentType, fileName);
				page.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
			}
			else page.Response.ContentType = contentType;

			page.Response.AddHeader("content-length", stream.Length.ToString());
			page.Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
			page.Response.Cache.SetCacheability(HttpCacheability.Private);
			page.Response.BinaryWrite(stream.ToArray());

            if (StiOptions.Engine.FullTrust)
            {
                page.Response.Flush();
                page.Response.End();
            }
		}
А вообще возможно узнать, открыл ли пользователь документ отчёта, сохранил ли он его или нажал отмену?
При помощи методов Stimulsoft Reports Вы сделать этого не сможите. Возможно можно использовать JavaScript.

Спасибо.
Ответить