【问题标题】:ASP.NET MVC Generate PDF from byte[]ASP.NET MVC 从 byte[] 生成 PDF
【发布时间】:2015-11-22 11:10:17
【问题描述】:

在发布此消息之前,我查看了 SO 中的许多帖子,但很少有人直接关闭说他们需要查看常见问题解答,很少有人提供使用 iTextSharp 或其他东西的解决方案。但是没有一个能解决我的问题。我的问题是我有一个 byte[],我需要在新的子窗口中生成 PDF我们只使用 ASP.NET MVC 4,没有 iTextSharp 或类似的。如果已经有与此完全匹配的帖子,请告诉我。我可以创建新的局部视图

我的部分视图中有一张 PDF 图标图像。当用户单击它时,我需要在新的浏览器窗口中显示 PDF。我可以成功调用一个 JavaScript 函数,该函数调用从另一台服务器获取文件的控制器。我什至可以将文件转换为字节数组。我想在新的浏览器窗口中以 PDF 格式显示这个字节数组。

在视图中我有如下 PDF 图标

<img onclick="ShowCDinPDF('@Url.Action("ShowPDF", "MyController", new {personid= personid} )','', '920','500')" />

ShowCDinPDF 在我的 javascript 中,如下所示

function ShowCDinPDF(popUpURL, windowProperties, w, h) {    
var childWindow = window.showModelessDialog(popUpURL, "", "");   
}

在我的控制器中,我有以下 ShowPDF 方法

public ActionResult ShowPDF(string personid)
{ 
   //call service and get data
   string fileContent = response.FileContent;
   byte[] data = Convert.FromBase64String(fileContent);

   **// Here using data I need to show PDF in new window**

}

请告诉我如何创建 PDF。

更新

我进步不大。现在我的代码如下所示。将打开一个新窗口,并弹出错误消息文件不以'%PDF-'开头。我试图找到解决方案,但没有成功。

 public ActionResult ShowPDF(string personid)
 { 
     //call service and get data
     string fileContent = response.FileContent;
     byte[] data = Convert.FromBase64String(fileContent);

     using (MemoryStream memoryStream = new MemoryStream())
      {
          Response.ClearHeaders();
          Response.ClearContent();
          Response.Charset = "";
          Response.AddHeader("Content-Type", "application/pdf");
          memoryStream.Write(data, 0, data.Length);
          memoryStream.WriteTo(Response.OutputStream);
          Response.Flush();
          Response.Close();
          Response.End();
     }
    return View();
 } 

提前致谢。

更新 2

我尝试了很多,但没有用。由于临近 PROD 的最后期限,我们的团队决定在我们的服务器中创建 PDF 文件并在 IE 浏览器中启动该文件。

注意

我真的不知道为什么这被否决了。有没有人可以在任何物理位置存储/创建 PDF 文件的情况下以 PDF 格式呈现文件。 为什么要投反对票?

【问题讨论】:

  • @克里斯:我试过了。这是行不通的。它只是打开一个空白窗口。
  • 为什么这个问题会被否决票 -1。我在 SO 上搜索了许多论坛和讨论,但没有一个确切地说明解决方案是什么,他们说的所有解决方案我都试过了,但没有任何效果......
  • 我从 alpha 开始就一直在做 .Net,我可以手动做 HTTP,但老实说,我迷失在 MVC 等更高级别的抽象中。我这样说是因为最终您需要发出 HTTP 请求并且服务器必须返回字节。忽略点击、操作和 JavaScript,您应该能够通过 Fiddler 之类的东西或浏览器的调试区域看到此对话的发生。 “空白窗口”可能没有返回字节,也可能是浏览器混乱。如果您没有收到任何字节,请暂时忽略该文件并尝试仅返回一个字符串。

标签: c# asp.net-mvc pdf-generation


【解决方案1】:

假设您拥有的字节数组表示一个有效的 PDF,那么在您的控制器操作中,您可以通过返回具有正确 Content-Type 响应标头的正确 ActionResult 来提供此 PDF:

public ActionResult ShowPDF(string personid)
{ 
    //call service and get data
    string fileContent = response.FileContent;
    byte[] data = Convert.FromBase64String(fileContent);

    **// Here using data I need to show PDF in new window**
    return File(data, "application/pdf");
}

【讨论】:

  • 我确实尝试过使用 File、FileStreaResult。我只是得到一个空白窗口。
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
相关资源
最近更新 更多