public async Task <Response> CreateReport([FromBody] InvoicingPrinterCriteria criteria, InvoicingPrinterVM report) { var viewResult = compositeViewEngine.FindView(ControllerContext, "CreateReport", false); var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()) { Model = report }; var viewContext = new ViewContext(ControllerContext, viewResult.View, viewDictionary, TempData, new StringWriter(), new HtmlHelperOptions()); var result = repo.Get(criteria); return(await repo.CreatePDF(viewResult, viewContext, result)); }
public async Task <Response> CreatePDF(ViewEngineResult viewResult, ViewContext viewContext, InvoicingPrinterVM report) { using var stringWriter = new StringWriter(); var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()) { Model = report }; var view = new ViewContext(viewContext, viewResult.View, viewDictionary, viewContext.TempData, stringWriter, new HtmlHelperOptions()); var htmlToPdf = new HtmlToPdf(); htmlToPdf.Options.PdfPageSize = PdfPageSize.A4; htmlToPdf.Options.PdfPageOrientation = PdfPageOrientation.Portrait; htmlToPdf.Options.MarginLeft = 20; htmlToPdf.Options.MarginRight = 20; htmlToPdf.Options.MarginTop = 20; htmlToPdf.Options.MarginBottom = 0; await viewResult.View.RenderAsync(view); var pdf = htmlToPdf.ConvertHtmlString(stringWriter.ToString()); var pdfBytes = pdf.Save(); if (!Directory.Exists("Reports")) { Directory.CreateDirectory("Reports"); } var filename = Guid.NewGuid().ToString("N"); using var streamWriter = new StreamWriter("Reports\\" + filename + ".pdf"); await streamWriter.BaseStream.WriteAsync(pdfBytes.AsMemory(0, pdfBytes.Length)); pdf.Close(); return(new Response { Filename = filename }); }