ASP.NET MVC AJAX使用参数打开PDF

时间:2017-06-02 19:52:52

标签: jquery asp.net ajax pdf pdfsharp

我正在使用ASP.NET MVC并且我构建了一个返回PDF文件的控制器 我使用PDFsharp构建PDF:

public ActionResult GenerateReport(string Param)
{ 
    // Create a new PDF document
    PdfDocument document = new PdfDocument();
    document.Info.Title = "Created with PDFsharp";

    // Create an empty page
    PdfPage page = document.AddPage();

    // Get an XGraphics object for drawing
    XGraphics gfx = XGraphics.FromPdfPage(page);

    // Create a font
    XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

    // Draw the text
    gfx.DrawString("Hello, World!", font, XBrushes.Black,
    new XRect(0, 0, page.Width, page.Height),
    XStringFormats.Center);

    MemoryStream stream = new MemoryStream();
    document.Save(stream, false);
    byte[] bytes = stream.ToArray();

    return File(bytes, "application/pdf");
}

现在我的目标是从jQuery发送AJAX请求并在新选项卡中打开PDF文件。除此之外,我想将一个参数传递给控制器​​。

1 个答案:

答案 0 :(得分:2)

据我所知,直接通过ajax打开文件并不容易。

所以我建议另一条路线。

当jquery发送ajax以生成pdf时,不返回File,而是返回链接到文件,您可以在其中打开该链接 像新标签中的网址一样。

首先更改您的操作以返回链接:

public ActionResult GenerateReport(string Param)
{
  // same as before
  ....

  // save your pdf to a file
  File.WriteAllBytes("result.pdf", memoryStream.ToArray());

  // get url to that pdf which can be browsed
  var pdfUrl = "some location which url can browse";

  return Json(new {url = pdfUrl}, JsonBehaviour.AllowGet);
}

然后在你jquery ajax被触发的视图中,当得到结果时,只需浏览到那个pdf url

$.getJSON( "your GenerateReport url", function( data ) {
    window.open(data.url,'_blank');
}