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
            });
        }