ASP.从字节[]生成PDF

本文关键字:生成 PDF 字节 ASP | 更新日期: 2023-09-27 18:10:05

在发布此消息之前,我在SO中查看了许多帖子,但很少有人直接关闭说他们需要查看FAQ,很少有人给出使用iTextSharp或其他东西的解决方案。但没有一个能解决我的问题。我的问题是我有一个字节[],我需要在新的子窗口中生成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文件。为什么投反对票?

ASP.从字节[]生成PDF

假设你的字节数组代表一个有效的PDF,那么在你的控制器动作中,你可以通过返回正确的ActionResult和正确的Content-Type响应头来提供这个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");
}