Могу ли я создать отчет на основе изображений из отчетов SQL Reporting Services (.rdlc) без сохранения изображения в любом месте?

Сценарий:

У меня есть веб-страница с несколькими диаграммами, и у меня есть кнопка «Экспорт в PDF», которую пользователь должен иметь возможность щелкнуть, и он создает PDF-файл, который пользователь может сохранить.

Данный:

Telerik RadChart, который может сохранить себя в потоке памяти как таковой:

MemoryStream chartStream = new MemoryStream(); RadChart1.Save(chartStream, ImageFormat.Png); 

Используя этот поток памяти, можно ли построить PDF, используя службы SQL Reporting Services WITH OUT, сначала сохранить его в файл или вставить его сначала в таблицу MSSQL?

Я буду голосовать и / или принимать любые ответы, которые являются открытым исходным кодом или свободным решением этой проблемы.

Благодарю.

Хорошо, просто понял это. Есть три элемента для этого ответа, два скриншота, которые нужно выполнить по порядку, а затем код:

  1. Создание типизированного набора данных для хранения графических изображений (ов)

    Шаг 1

  2. Подсоединение типизированного набора данных до отчета RDLC

    Шаг 2

  3. Код кнопки для создания PDF-файла и потоковой передачи его в браузер.

     protected void btnPDF_Click(object sender, EventArgs e) { //Put the image you want to display in a MemoryStream. You can read an image from the file system //or generate an image, etc. This example renders an image to a memory stream using a custom charting control. MemoryStream chtLoginsByMonthStream = new MemoryStream(); this.chtLoginsByMonth.Save(chtLoginsByMonthStream, ImageFormat.Png); //Setup the datatable you will pass into the RDLC dsStudentUsage.dtUsageChartsDataTable dt = new dsStudentUsage.dtUsageChartsDataTable(); dsStudentUsage.dtUsageChartsRow dr = dt.NewdtUsageChartsRow(); //create new Byte Array, this will hold the image data from the memory stream byte[] chtLoginsByMonthArray = new byte[chtLoginsByMonthStream.Length]; //Set pointer to the beginning of the stream chtLoginsByMonthStream.Position = 0; //Read the entire stream chtLoginsByMonthStream.Read(chtLoginsByMonthArray, 0, (int)chtLoginsByMonthStream.Length); //Put the byte array into the new datarow in the appropriate column dr["imgLoginsByMonth"] = chtLoginsByMonthArray; dt.Rows.Add(dr); //Add the data source to the report. ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dsStudentUsage_dtUsageCharts", dt)); //Setup objects for streaming the PDF to the browser Warning[] warnings; string[] streamids; string mimeType; string encoding; string extension; byte[] bytes; //Make a container for all of your report parameters var rptList = new List<KeyValuePair<string, string>>(); rptList.Add(new KeyValuePair<string, string>("rpTotalLogins", "2,000")); //more parameters go here //Feed the report parameters into the actual "ReportParameters" class ReportParameter[] rptParams = new ReportParameter[rptList.Count]; for (int i = 0; i < rptList.Count; i++) { rptParams[i] = new ReportParameter(rptList[i].Key, rptList[i].Value); } //Set parameters for the report. ReportViewer1.LocalReport.SetParameters(rptParams); //Render the report to a byte array in PDF format bytes = ReportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); //Set the stream to either prompt user as file download or "inline" to stream //PDF directly into the browser window. HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=StudentUsageReport.pdf"); //HttpContext.Current.Response.AddHeader("Content-disposition", "inline;"); HttpContext.Current.Response.ContentType = "application/pdf"; HttpContext.Current.Response.BinaryWrite(bytes); HttpContext.Current.Response.End(); } - protected void btnPDF_Click(object sender, EventArgs e) { //Put the image you want to display in a MemoryStream. You can read an image from the file system //or generate an image, etc. This example renders an image to a memory stream using a custom charting control. MemoryStream chtLoginsByMonthStream = new MemoryStream(); this.chtLoginsByMonth.Save(chtLoginsByMonthStream, ImageFormat.Png); //Setup the datatable you will pass into the RDLC dsStudentUsage.dtUsageChartsDataTable dt = new dsStudentUsage.dtUsageChartsDataTable(); dsStudentUsage.dtUsageChartsRow dr = dt.NewdtUsageChartsRow(); //create new Byte Array, this will hold the image data from the memory stream byte[] chtLoginsByMonthArray = new byte[chtLoginsByMonthStream.Length]; //Set pointer to the beginning of the stream chtLoginsByMonthStream.Position = 0; //Read the entire stream chtLoginsByMonthStream.Read(chtLoginsByMonthArray, 0, (int)chtLoginsByMonthStream.Length); //Put the byte array into the new datarow in the appropriate column dr["imgLoginsByMonth"] = chtLoginsByMonthArray; dt.Rows.Add(dr); //Add the data source to the report. ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dsStudentUsage_dtUsageCharts", dt)); //Setup objects for streaming the PDF to the browser Warning[] warnings; string[] streamids; string mimeType; string encoding; string extension; byte[] bytes; //Make a container for all of your report parameters var rptList = new List<KeyValuePair<string, string>>(); rptList.Add(new KeyValuePair<string, string>("rpTotalLogins", "2,000")); //more parameters go here //Feed the report parameters into the actual "ReportParameters" class ReportParameter[] rptParams = new ReportParameter[rptList.Count]; for (int i = 0; i < rptList.Count; i++) { rptParams[i] = new ReportParameter(rptList[i].Key, rptList[i].Value); } //Set parameters for the report. ReportViewer1.LocalReport.SetParameters(rptParams); //Render the report to a byte array in PDF format bytes = ReportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); //Set the stream to either prompt user as file download or "inline" to stream //PDF directly into the browser window. HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=StudentUsageReport.pdf"); //HttpContext.Current.Response.AddHeader("Content-disposition", "inline;"); HttpContext.Current.Response.ContentType = "application/pdf"; HttpContext.Current.Response.BinaryWrite(bytes); HttpContext.Current.Response.End(); } 

Я использовал этот метод в прошлом без проблем, и он отлично работал для меня.

Я использую iTextSharp для всего моего поколения PDF. Есть немного кривая обучения, но тогда это становится довольно легко. Вот несколько ссылок:

  • Массив изображения в PDF
  • iTextSharp
  • Как передать несколько значений одному параметру в хранимой процедуре
  • Выражение размещения этикеток SSRS BIDS 2008
  • Как добавить столбец в таблицу SSRS на основе критериев
  • Скрытые столбцы SSRS 2008 не должны экспортироваться в CSV
  • Ошибка запроса с HTTP-статусом 401: Несанкционированный IN SSRS
  • Недопустимое имя столбца "USER_SOURCE"
  • Записи не отображаются в отчетах по таблицам 2008
  • Видимость текстового окна SSRS BIDS на основе AD Logins
  • Любые преимущества для хранения данных sql по вертикали?
  • Как скрыть столбец матрицы?
  • Запрос на фиксированный месяц в таблице транзакций для диаграммы SSRS
  • Interesting Posts

    Удалить все объекты в SQL DB?

    Используется ли мой SQL-запрос для заполнения раскрывающегося списка?

    Как использовать встроенную проверку подлинности MS SQL Server в IntelliJ IDEA 12?

    Параметрированная сохраненная процедура в Access 2010

    Нужно сделать некоторые значения отрицательными при вычислении суммы

    Выполнить файл .SQL в Powershell без установки SQL Server?

    Почему вставить – выбрать переменную таблицу из переменной XML так медленно?

    Выберите запрос подсчета или вычисленный столбец

    SQL-запрос и специальные символы

    Преобразование данных строки в столбцы в SQL Server

    SQL Server: как я могу сделать усечение и скопировать на C #?

    Можете ли вы упорядочить порядок отображения столбцов, используя вид диаграммы?

    Что вызывает «Неустранимые ошибки внутреннего соединения»

    Сделать столбец SQL узлом XML другого столбца

    Остановить SQL Server Management Studio от добавления ANSI_NULLS и QUOTED_IDENTIFIER

    Давайте будем гением компьютера.