【问题标题】:ASP.NET MVC AJAX Open PDF with parametersASP.NET MVC AJAX 打开带有参数的 PDF
【发布时间】:2017-11-04 07:27:36
【问题描述】:

我正在使用 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 文件。除此之外,我想将参数传递给控制器​​。

【问题讨论】:

    标签: jquery asp.net ajax pdf pdfsharp


    【解决方案1】:

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

    所以我会建议另一条路线。

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

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

    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');
    }
    

    【讨论】:

    • C#代码有错误。应该是 new {url = pdfUrl} 而不是 new {url: pdfUrl}
    • @dremerDT 很好,感谢您的反馈。我修改了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-04-16
    • 2011-03-24
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多