MvcRazorToPdf保存为MemoryStream或Byte []

时间:2014-04-24 14:47:12

标签: asp.net-mvc pdf pdf-generation asp.net-mvc-5 mvcrazortopdf

我在Azure网站中使用MvcRazorToPdf并创建我的PDF并在浏览器中输出它们。

现在我正在创建一个新功能,直接将PDF作为附件发送电子邮件(不在浏览器中输出)。

有人知道是否可以将PDF(使用MvcRazorToPdf)保存为MemoryStream或Byte []?

2 个答案:

答案 0 :(得分:0)

我认为你可以在ResultFilter中处理这个问题,我使用下面的代码来允许用户下载文件并提示下载弹出窗口,这样你就可以获取所有的内存流并存储在某个地方以便发送电子邮件。

public class ActionDownloadAttribute : ActionFilterAttribute { public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + "Report.pdf"); base.OnResultExecuted(filterContext); } }

 [ActionDownload]
 public ActionResult GeneratePdf()
 {
       List<Comment> comments = null;

        using (var db = new CandidateEntities())
        {
            comments = db.Comments.ToList();
        }

        return new PdfActionResult("GeneratePdf", comments);
 }

[ActionDownload] public ActionResult GeneratePdf() { List<Comment> comments = null; using (var db = new CandidateEntities()) { comments = db.Comments.ToList(); } return new PdfActionResult("GeneratePdf", comments); }

答案 1 :(得分:0)

我已经实现了类似的东西。所以基本上我没有改变我输出PDF的方法。我所做的是使用restsharp在URL获取请求,然后我获得PDF,然后你所拥有的是(这只是部分代码,所以你可以得到想法)

var client = new RestClient(IAPIurl);
var request = new RestRequest(String.Format(IAPIurl_generatePDF, targetID), Method.GET);
RestResponse response = (RestResponse) client.Execute(request);

// Here is your byte array 
response.RawBytes

否则,您可以使用here中我直接返回文件的答案。

希望这有帮助!