2016-11-18 130 views
0

我發現了一些關於使用控制器從EvoPDF創建PDF的答案,但似乎沒有處理通過jQuery AJAX調用的控制器。從控制器通過jQuery返回PDF格式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

沒有發生是因爲回調對AJAX請求的迴應沒有任何作用。加上文件下載將無法使用ajax。您需要的是在服務器上生成並保存PDF文件,並返回指向該文件的URL,以便瀏覽器可以在回調中重定向。 – marekful

+0

我希望不惜一切代價避免保存PDF,因爲在這個階段,PDF是最終文檔的草稿。我看到示例代碼將PDF流式傳輸到瀏覽器,但它不起作用。這是不可能的嗎? –

回答

0

您需要處理的AJAX調用數據的onSuccess,你可以做這樣的事情來打開文件,您可能需要使用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

這試圖工作,但我得到這fileURL,只是一個空的選項卡打開:blob:E9D06943-1619-4B89-BCF9-CD208BB9BAA9 –

+0

在ajax調用,請添加 $ .ajax({0}/AnnualFees/showStatement「, cache:false, responseType:'arraybuffer', .... –

相關問題