I would like to call an action on a controller. Have the controller get the data from the model. The view then runs and generates a PDF. The only example I have found is in an article by Lou http://whereslou.com/2009/04/12/returning-pdfs-from-an-aspnet-mvc-action. His code is very elegant. The view is using ITextSharp to generate the PDF. The only downside is his example uses the Spark View Engine. Is there a way to do a similar thing with the standard Microsoft view engine?
I use iTextSharp to generate dynamic PDF's in MVC. All you need to do is put your PDF into a Stream object and then your ActionResult return a FileStreamResult. I also set the content-disposition so the user can download it.
public FileStreamResult PDFGenerator() { Stream fileStream = GeneratePDF(); HttpContext.Response.AddHeader("content-disposition", "attachment; filename=form.pdf"); return new FileStreamResult(fileStream, "application/pdf"); }
I also have code that enables me to take a template PDF, write text and images to it etc (if you wanted to do that).
private Stream GeneratePDF() { //create your pdf and put it into the stream... pdf variable below //comes from a class I use to write content to PDF files MemoryStream ms = new MemoryStream(); byte[] byteInfo = pdf.Output(); ms.Write(byteInfo, 0, byteInfo.Length); ms.Position = 0; return ms; }