C# ASP.NET MVC从字节[]生成PDF
在发布这条消息之前,我查看了很多帖子,但很少有帖子明确表示需要查看FAQ,很少有人给出使用iTextSharp或其他东西的解决方案。但没有人能解决我的问题。我的问题是我有一个字节[],我需要在新的子窗口中生成一个PDF。我们只使用ASP.NETMVC4,没有iTextSharp或类似的版本。请让我知道,如果已经有一个职位,完全符合这一点。我可以创建新的局部视图 我的局部视图中有一个PDF图标图像。当用户单击它时,我需要在新的浏览器窗口中显示PDF。我可以成功调用一个JavaScript函数,该函数调用从另一台服务器获取文件的控制器。我甚至可以将文件转换为字节数组。我想在新的浏览器窗口中以PDF格式显示此字节数组 在视图中,我有如下PDF图标C# ASP.NET MVC从字节[]生成PDF,c#,asp.net-mvc,pdf-generation,C#,Asp.net Mvc,Pdf Generation,在发布这条消息之前,我查看了很多帖子,但很少有帖子明确表示需要查看FAQ,很少有人给出使用iTextSharp或其他东西的解决方案。但没有人能解决我的问题。我的问题是我有一个字节[],我需要在新的子窗口中生成一个PDF。我们只使用ASP.NETMVC4,没有iTextSharp或类似的版本。请让我知道,如果已经有一个职位,完全符合这一点。我可以创建新的局部视图 我的局部视图中有一个PDF图标图像。当用户单击它时,我需要在新的浏览器窗口中显示PDF。我可以成功调用一个JavaScript函数,该函
<img onclick="ShowCDinPDF('@Url.Action("ShowPDF", "MyController", new {personid= personid} )','', '920','500')" />
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
我试了很多,但没有用。由于我们快到产品的最后期限了,我们的团队决定在我们的服务器上创建PDF文件,并在IE浏览器中启动该文件
注
我真的不知道这为什么会被否决。是否有人可以以PDF格式呈现文件,而无需在任何物理位置存储/创建PDF文件。
为什么否决投票?假设您拥有的字节数组表示有效的PDF,那么在控制器操作中,您可以通过返回正确的操作结果和正确的内容类型响应标题来提供此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");
}
“是吗?”克里斯:我试过了。它不起作用。它只是打开了一扇空白的窗户。为什么这个问题会被否决?投票1。我搜索了很多论坛和讨论,但没有一个确切地告诉我解决方案是什么,他们说所有的解决方案我都试过了,但没有任何效果……这是真的吗。。从alphas开始,我就一直在做.Net,我可以手工做HTTP,但老实说,我在这些更高层次的抽象(比如MVC)中迷失了方向。我这样说是因为最终需要发出HTTP请求,服务器必须返回字节。忽略点击、动作和JavaScript,您应该能够通过类似Fiddler或您浏览器的调试区域来观看此对话。空白窗口可能没有返回字节,也可能是一个混乱的浏览器。如果没有字节,请暂时忽略该文件,并尝试仅返回一个字符串。我只是得到一个空白窗口。