Как открыть в новой вкладке PDF из Response MemoryStream - PullRequest
0 голосов
/ 28 февраля 2020

Я не уверен, что это хороший способ сделать это. Я хочу показать PDF в новой вкладке браузера.

У меня есть метод, который генерирует MemoryStream и возвращает мой вызов ajax. Как правильно это сделать?

my Ajax Звоните:

$("#selector").click(function () {
    urlToFunction = "/Controller/Function";
    $.ajax({
        url: urlToFunction,
        data: ({ id: 12345 }),
        type: 'GET',
        success: function (response) {
           ???? here
        },
        error:
            function (response) {
            }
    });   
});

[HttpGet]
        public async Task Print(int? id)
        {

            var ms = GETMemoryStreamPDF();

            Response.ContentType = "application/pdf; charset=utf-8";
            Response.Headers.Add("content-disposition", "attachment;filename=" + randomName + ".pdf;charset=utf-8'");            
            await Response.Body.WriteAsync(ms.GetBuffer(), 0, ms.GetBuffer().Length);            
        }

Мой вопрос здесь:

success: function (response) {
           ???? here
        },

Что такое хорошая практика отобразить мой PDF в новой вкладке?

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете попробовать следующий код:

Javascript

$("#selector").click(function (e) {
    e.preventDefault();
    window.open('@Url.Action("ActionName", "ControllerName", new { id=12345})', '_blank');

});

Контроллер

    [HttpGet]
    public IActionResult Pdf(int? id)
    {
        MemoryStream memoryStream = new MemoryStream();

        PdfWriter pdfWriter = new PdfWriter(memoryStream);

        PdfDocument pdfDocument = new PdfDocument(pdfWriter);

        Document document = new Document(pdfDocument);
        document.Add(new Paragraph("Welcome"));
        document.Close();

        byte[] file = memoryStream.ToArray();
        MemoryStream ms = new MemoryStream();
        ms.Write(file, 0, file.Length);
        ms.Position = 0;

        return File(fileStream: ms, contentType: "application/pdf", fileDownloadName: "test_file_name" + ".pdf");
    }
...