2016-11-18 4 views
0

Я нашел несколько ответов об использовании контроллера для создания PDF-файла из EvoPDF, однако ни один из них не имеет отношения к контроллеру, вызываемому через jQuery AJAX.Возврат PDF из контроллера, вызванного через jQuery AJAX

У меня есть простая функция JQuery, которая посылает данные в контроллер так же, как и многие другие в моем приложении:

$.ajax({ 
    url: "/AnnualFees/showStatement", 
    cache: false, 
    data: { 
     authKey: memberData.authKey, 
     entityId: memberData.entityId, 
     barNumber: memberData.barNumber, 
     statementHTML: encodeURIComponent($("#statementBody").html()) 
    }, 
    method: "POST", 
    success: function (data) { 
    }, 
}); 

я следовал всем образцам и иметь этот код. Я могу изменить его, чтобы сохранить PDF-файл и подтвердить, что PDF-файл создается.

public ActionResult getStatementPDF(string statementHTML) 
{ 
    //initialize the PdfConvert object 
    PdfConverter pdfConverter = new PdfConverter(); 

    // set the license key - required 
    pdfConverter.LicenseKey = "uzUmNCcnNCYsIjQgOiQ0JyU6JSY6LS0tLQ=="; 

    StringBuilder PDFBody = new StringBuilder(); 
    PDFBody.Append("<!DOCTYPE html>"); 
    PDFBody.Append("<html lang=\"en\">"); 
    PDFBody.Append("<head>"); 
    PDFBody.Append(" <meta charset=\"utf - 8\">"); 
    PDFBody.Append(" <title>Statement</title>"); 
    PDFBody.Append("</head>"); 
    PDFBody.Append(""); 
    PDFBody.Append("<body>"); 
    PDFBody.Append("Hello world."); 
    PDFBody.Append("</body>"); 
    PDFBody.Append("</html>"); 

    byte[] outPdfBuffer = pdfConverter.GetPdfBytesFromHtmlString(PDFBody.ToString()); 

    // Send the PDF file to browser 
    FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf"); 
    fileResult.FileDownloadName = "Statement.pdf"; 

    return fileResult; 
} 

Я могу подтвердить их ошибок нет, и что 200 успеха возвращается с правом применения/типа PDF и примерно такого же размера, как и на диске. Однако ни один PDF не появляется, в браузере ничего не открывается.

+0

Nothing происходит потому, что обратный вызов ничего не делает в ответ на запрос AJAX. Плюс загрузка файла не будет работать с ajax. Вы хотите сгенерировать и сохранить файл PDF на сервере и вернуть URL-адрес, указывающий на этот файл, чтобы браузер мог быть перенаправлен в обратном вызове. – marekful

+0

Я хотел бы во что бы то ни стало избежать сохранения PDF-документа, так как на этом этапе PDF является черновиком окончательного документа. Я вижу пример кода для потоковой передачи PDF в браузер, но он просто не работает. Разве это невозможно? –

ответ

0

Вам нужно обрабатывать OnSuccess данных в вызове Ajax, вы можете сделать что-то вроде этого, чтобы открыть файл, вы можете использовать FileSaverJS (https://github.com/eligrey/FileSaver.js/), если вы хотите, чтобы сохранить файл

success: function (data) { 

    var file = new Blob([data], { type: 'application/pdf' }); 
    var fileURL = URL.createObjectURL(file); 
    window.open(fileURL); 
} 
+0

Является ли это открытием потока файлов или ожидает, что файл будет существовать на сервере? Поскольку этот шаг генерирует черновик PDF, я бы хотел избежать загрязнения сервера и просто нажать копию копии PDF-файла в браузере. –

+0

Это попытка работать, но я получаю это для файлаURL и открывается только пустая вкладка: blob: E9D06943-1619-4B89-BCF9-CD208BB9BAA9 –

+0

в вызове ajax, пожалуйста, добавьте $ .ajax ({ URL:/AnnualFees/showStatement ", cache: false, responseType: 'arraybuffer', .... –