嗨,我有一个大问题。 我有一个来自Wcf服务的byte [] receveid。字节数组表示pdf文件。 在Controller中,我想这样做:
PDFDto pdfDTO = new PDFDTO();
pdfDTO.pdfInBytes = pdfInBytes; //the byte array representing pdf
return PartialView("PopupPDF,pdfDTO);
在视图中我想这样做:
<object data="@Model.pdfInBytes" width="900" height="600" type="application/pdf"> </object>
但似乎不正确。 我在互联网上搜索过,有很多关于这个问题的帖子,但没有人能完全匹配我的情况。 你有什么想法吗?非常感谢!
答案 0 :(得分:9)
我建议在控制器designed specifically for rendering the PDF data上创建另一个操作。然后,只需在data
属性中引用它:
data="@Url.Action("GetPdf", "PDF")"
我不确定您是否可以在DOM中转储原始PDF数据而不会遇到某种编码问题。尽管我从未尝试过,但您可能会像图像一样。但是,为了演示,图像看起来像:
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
所以,假设可以做同样的事情,它可能如下所示:
@{
String base64EncodedPdf = System.Convert.ToBase64String(Model.pdfInBytes);
}
@* ... *@
<object data="data:application/pdf;base64,@base64EncodedPdf"
width="900" height="600" type="application/pdf"></object>
我仍然坚持原来的回应来创造新的行动。
答案 1 :(得分:0)
protected ActionResult InlineFile(byte[] content, string contentType, string fileDownloadName)
{
Response.AppendHeader("Content-Disposition", string.Concat("inline; filename=\"", fileDownloadName, "\""));
return File(content, contentType);
}
将此代码添加到基本控制器或控制器本身,并调用此函数在浏览器中显示文件。