尝试下载pdf文件时,“发送HTTP标头后服务器无法清除标头”

时间:2019-02-23 17:38:33

标签: pdf

我正在尝试将html转换为pdf并下载。我有一个控制器的ajax调用,并且我已经编写了用于转换和下载html字符串的代码。但是我收到了错误异常

  

发送HTTP标头后,服务器无法清除标头。

var param = { entityId: entityId, fromDate: fromdate, toDate: todate, serviceIds: serviceIds, customfields: customfields, reportformattype: reportformatType, requestType: requestType };

    $.ajax({
        url: "/ReportingAnalytics/GenerateReport",
        type: "GET",
        data: param,
        dataType: "json",
        contentType: "application/json",
        success: function (data) {
            if (data != "" && data != "undefined" && data.IsSuccess != "") {
                showFCMessage('SUCCESS', 'Report generated and downloaded successfully', GlobalEnums.MessageType.Success);
            }
            else {
                showFCMessage('ERROR', 'No data found with selected filters', GlobalEnums.MessageType.Error);
            }
        },
        error: function () {
            $('#DataLoading').removeClass('show');
            showFCMessage('ERROR', 'Error happened while getting data', GlobalEnums.MessageType.Error);
        }
    });`

这是我的Controller方法

[HttpGet]                        
    public JsonNetResult GenerateReport(int entityId, string fromDate, string toDate, string serviceIds, string customfields, string reportformattype, string requestType)
    {
        bool isSuccess = false;
        string reportdata = "";
        try
        {

                //Need to generate/convert report based on 'reportformatType' if Data exist
                bool IsDownloaded = false;
                reportdata = "<b>Hello!.. </b><i>This is Kaptain!</i>";
                IsDownloaded = GenerateAndDownloadReport(reportdata, reportformattype);

                //Once report generated and downloaded
                isSuccess = true;

        }
        catch (Exception e)
        {
        }
        return new JsonNetResult(new
        {
            IsSuccess = isSuccess
        });
        //return RedirectToAction("ReportingAnalytics");
    }

这是我转换和下载的方法

public bool GenerateAndDownloadReport(string reportdata, string formattype)
    {
        if (!string.IsNullOrEmpty(reportdata) && !string.IsNullOrEmpty(formattype))
        {
            switch (formattype.ToLower())
            {
                case "pdf":
                    PDFManager pdfmgr = new PDFManager();
                    byte[] _pdfReport = null;
                    _pdfReport = pdfmgr.ConvertHTMLtoPDF(reportdata, "", "");
                    DownloadReport(_pdfReport, "", "pdf",".pdf");

                    Byte[] bytes = _pdfReport;
                    System.Web.HttpContext.Current.Response.Clear();

                    MemoryStream ms = new MemoryStream(_pdfReport);
                    System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
                    //Response.AddHeader("content-disposition", "attachment;filename=test.pdf");
                    System.Web.HttpContext.Current.Response.Buffer = true;
                    ms.WriteTo(Response.OutputStream);
                    System.Web.HttpContext.Current.Response.End();
                    System.Web.HttpContext.Current.Response.ClearHeaders();

                    break;
                case "word":
                    var strBody = new StringBuilder();
                    //-- add required formatting to html
                    AddFormatting(strBody, reportdata);
                    DownloadReport(null, reportdata, "msword",".doc");
                    break;
                case "excel":
                    break;
            }
        }
        return true;
    }

0 个答案:

没有答案