1

编程新手。我正在尝试从 MVC 打印 PDF,如果我使用 Action Link 效果很好,这是我的代码:

  <%= Html.ActionLink("Print","GeneratePdf","Home", new { fc="Test" },null) %>

   public ActionResult GeneratePdf(string fc)
        {
            Document document = new Document();
            MemoryStream workStream = new MemoryStream();
            PdfWriter.GetInstance(document, workStream);
            document.Open();
            document.Add(new iTextSharp.text.Paragraph("\n\n"));
            // need to add the user name
            iTextSharp.text.Paragraph p = new iTextSharp.text.Paragraph("Name: " + fc);
            p.Alignment = 1;
            document.Add(p);

            document.Close();
            byte[] byteInfo = workStream.ToArray();
            SendPdfToBrowser(byteInfo);
            return null;
        }

   public void SendPdfToBrowser(byte[] buf)
        {
            string filename = "Certificate.pdf";

            // Prepare the headers.
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

            // Write the PDF data.
            Response.BinaryWrite(buf);

            // Flush the buffer to the browser.
            Response.End();
            Response.Flush();
            Response.Clear();
        }

我需要使用Json,代码如下:

function PrintChart(fc) {

                 var fc = "Test";
                 var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
                 $.post(url, { fc: fc },
            function (content) {
                if (content != null) { 5 }
            }, "json");

 <input type="button" onclick="PrintChart();" value="Print" />

我没有收到任何错误,但它不会生成 PDF 文件。提前致谢。

4

1 回答 1

0

您不能使用 Ajax 下载文件。jQuery $.post() 将期望来自服务器的响应是文本。以Ajax方式下载文件,一般的做法是使用隐藏的iframe,并将iframe的src设置为文件的URL

<iframe id="hiddenFrame" src="" style="display:none; visibility:hidden;"></iframe>

在 PrintChart() 创建包含数据的 URL 作为查询字符串并设置 iframe 的 src:

 function PrintChart(fc) {

    var fc = "Test";
    var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
    url += "?fc="+fc;

    $('#hiddenFrame').attr('src', url);
}
于 2012-04-07T09:43:57.850 回答