通过jQuery AJAX从Controller调用返回PDF

时间:2016-11-18 23:18:57

标签: javascript jquery ajax pdf evopdf

我找到了一些关于使用控制器从EvoPDF创建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;
}

我可以确认它们没有错误,并且使用正确的application / pdf类型返回200成功,并且大小与磁盘大小相同。但是,没有PDF出现,浏览器中没有任何内容。

1 个答案:

答案 0 :(得分:-2)

您需要在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);
}