Как скачать файл memoryStream

1

Я новичок в asp.net, я создаю pdf файл с PdfRpt. Я пишу этот код в классе

namespace PdfReportSamples.CustomPriceNumber
{
    public class CustomPriceNumberPdfReport
    {
        public IPdfReportData CreatePdfReport()
        {
            using (var memoryStream = new MemoryStream())
            {
                var ii= new PdfReport().DocumentPreferences(doc =>
                {
                    doc.RunDirection(PdfRunDirection.LeftToRight);
                    doc.Orientation(PageOrientation.Portrait);
                    doc.PageSize(PdfPageSize.A4);
                    doc.DocumentMetadata(new DocumentMetadata { Author = "Vahid", Application = "PdfRpt", Keywords = "Test", Subject = "Test Rpt", Title = "Test" });
                })
           .DefaultFonts(fonts =>
           {
               fonts.Path(Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\arial.ttf",
                                 Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\verdana.ttf");
           })
           .PagesFooter(footer =>
           {
               footer.DefaultFooter(DateTime.Now.ToString("MM/dd/yyyy"));
           })
           .PagesHeader(header =>
           {
               header.DefaultHeader(defaultHeader =>
               {
                   defaultHeader.RunDirection(PdfRunDirection.LeftToRight);

               });
           })
           .MainTableTemplate(template =>
           {
               template.BasicTemplate(BasicTemplate.SilverTemplate);
           })
           .MainTablePreferences(table =>
           {
               table.ColumnsWidthsType(TableColumnWidthType.Relative);
           })
           .MainTableDataSource(dataSource =>
           {
               var listOfRows = new List<Transaction>();
               for (int i = 0; i < 200; i++)
               {
                   listOfRows.Add(new Transaction
                   {
                       Product = "Item " + i,
                       Description = "Desc. " + i,
                       SalePrice = 1000 * i
                   });
               }
               dataSource.StronglyTypedList(listOfRows);
           })

           .MainTableColumns(columns =>
           {
               columns.AddColumn(column =>
               {
                   column.PropertyName("rowNo");
                   column.IsRowNumber(true);
                   column.CellsHorizontalAlignment(HorizontalAlignment.Center);
                   column.IsVisible(true);
                   column.Order(0);
                   column.Width(1);
                   column.HeaderCell("#");
               });

               columns.AddColumn(column =>
               {
                   column.PropertyName<Transaction>(x => x.Product);
                   column.CellsHorizontalAlignment(HorizontalAlignment.Center);
                   column.IsVisible(true);
                   column.Order(1);
                   column.Width(2);
                   column.HeaderCell("Product");
               });

               columns.AddColumn(column =>
               {
                   column.PropertyName<Transaction>(x => x.Description);
                   column.CellsHorizontalAlignment(HorizontalAlignment.Center);
                   column.IsVisible(true);
                   column.Order(2);
                   column.Width(3);
                   column.HeaderCell("Description");
               });

               columns.AddColumn(column =>
               {
                   column.PropertyName<Transaction>(x => x.SalePrice);
                   column.CellsHorizontalAlignment(HorizontalAlignment.Center);
                   column.IsVisible(true);
                   column.Order(3);
                   column.Width(3);
                   column.HeaderCell("Sale Price");
                   column.ColumnItemsTemplate(template =>
                   {
                       template.CustomTemplate(new CustomPriceCell());
                   });
                   column.AggregateFunction(aggregateFunction =>
                   {
                       aggregateFunction.NumericAggregateFunction(AggregateFunction.Sum);
                       aggregateFunction.DisplayFormatFormula(obj => obj == null ? string.Empty : string.Format("{0:n0}", obj));
                   });
               });

           })
           .MainTableEvents(events =>
           {
               events.DataSourceIsEmpty(message: "There is no data available to display.");
           })
           .Export(export =>
           {
               export.ToExcel();
           })
           .Generate(data => data.AsPdfStream(memoryStream));


       }


        }
    }
}

Я хочу, чтобы пользователь нажал кнопку отправить этот файл (в memoryStream) для загрузки. но я не знаю, как написать этот код. пожалуйста помогите. спасибо эксперту

  • 1
    Действительно неясно, что вы подразумеваете под «отправить этот файл (в memoryStream) для загрузки». Вы создаете MemoryStream , но затем полностью игнорируете его, потому что вы немедленно возвращаетесь из метода. Похоже, что код, создающий отчет, не должен сериализовать его - он должен просто вернуть отчет вызывающему коду, который затем может сохранить его в поток. К сожалению, у нас недостаточно контекста, чтобы помочь гораздо большему.
  • 0
    @ Jon Skeet: сначала я создаю pdf-файл в MemoryStream, например, я помещаю кнопку в форму, я хочу, чтобы пользователь нажимал кнопку загрузки этого файла.
Показать ещё 1 комментарий
Теги:

1 ответ

9
Лучший ответ
byte[] bytes = memoryStream.GetBuffer();
Response.Buffer = true;
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=report.pdf");
Response.BinaryWrite(bytes);
Response.Flush();
  • 1
    Это напишет больше, чем нужно - либо используйте ToByteArray либо BinaryWrite вызов BinaryWrite зависимости от длины потока памяти.
  • 0
    Обратите внимание, что имя файла должно быть закодировано с помощью Server.UrlEncode(filename) .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню