0

我正在尝试添加一项功能来下载 pdf 文件。我正在使用 ironpdf 生成 pdf 文件,我希望用户单击并下载它。

这是我的处理程序。

try
        {
            // Render any HTML fragment or document to HTML
            var Renderer = new IronPdf.HtmlToPdf();
            var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
            var data = PDF.MetaData;
            context.Response.Clear();
            context.Response.ClearHeaders();
            context.Response.Buffer = true;
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("content-disposition", "attachment;filename=Cotacao.pdf");
            context.Response.BinaryWrite(PDF.BinaryData);
            context.Response.Flush();
        }
        catch (Exception e)
        {

        }
        finally
        {
            context.ApplicationInstance.CompleteRequest();
        }

这是我的ajax请求

function GeneratePDF() {
return $.ajax({
    type: "POST",
    url: "../Handlers/GeneratePDF.ashx",
    success: PDFSuccess,
    error: PDFError
});

我可以在浏览器中看到输出流响应,但没有下载对话框。我究竟做错了什么?

提前致谢。

4

1 回答 1

1

我有同样的问题,并且能够让它与前端的 FileDownload 一起工作:

const FileDownload = require('js-file-download');

postHtmlString(data).then(response => {
   console.log(response)
   commit('pdfDownloading', false)
   FileDownload(response.data, 'example.pdf');
})...

我的控制器返回:

return File(pdf.BinaryData, "application/pdf");

这是 js-file-download:https ://www.npmjs.com/package/js-file-download

最后,也许最重要的是,您需要在前端的 api 请求中设置响应类型:

 responseType: 'arraybuffer'
于 2020-03-17T14:57:16.940 回答