如何在MVC中的动作结果中返回PDF

我有点问题让我解决这个问题。 我有一个ajax调用,应该呈现一个加载PDF的iframe。 PDF是使用托管在其他环境中的Apache FOP生成的。 到目前为止我所拥有的是:

在控制器动作中(iFrame指向的src元素),代码片段为:

var targetStream = new MemoryStream(); using (var response = FOPrequest.GetResponse()) // response from FOP { using (var stream = response.GetResponseStream()) { stream.CopyTo(targetStream); } } return new FileStreamResult(targetStream, "application/pdf"); 

但是,这不能按预期工作。 将按预期填充流,但PDF不会在iFrame中呈现。 我得到一个Http响应代码200(OK)。

我会感激任何帮助。

您使用MVC FileContentResult返回ActionResult例如:

 return File(fileArray, contentType, fileName) 

另一个堆栈答案

你可以在这里使用返回类型作为FileResult ,如下所示:

 public FileResult getFile(string CsvName) { //Add businees logic here byte[] fileBytes = System.IO.File.ReadAllBytes(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Uploads/records.csv")); string fileName = CsvName; return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); } 

可能不是确切的解决方案,你可以操纵和发展自己的。

希望这可以帮助。

通过nuget安装MvcPdfActionResult

 PM> Install-Package MvcPdfActionResult 

只需使用返回类型,因为控制器中的PdfActionResult将输出PDF文档而不是HTML。 这会使用iTextXmlWorker库将HTML转换为PDF。

  ... return PdfActionResult(model); } 

在asp.net 5 MVC项目中从您的剃刀视图生成pdf文档。 https://www.nuget.org/packages/MvcPdfActionResult/

对于FileStreamResult,您的targetStream需要仍然是OPEN。 “使用”部分会关闭您的响应流,看起来您的targetStream也会关闭然后……

当我使用未关闭的MemoryStream时 – 您的代码有效! 我得到了感谢Natan Cooper的评论和链接。