public async Task <IActionResult> DownloadMonthlySalary(string yearMonth) { try { var fileName = string.Format("MonthlySalary_{0}.pdf", DateTime.Now.ToString("yyyyMMddHHmmss")); var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Resources", "Report", fileName); //get data _UnitOfWork.Transaction = _UnitOfWork.Begin(); var listData = await _UnitOfWork.SalaryRepository.GetMonthlySalaryReportAsync(yearMonth); //save file // instantiate a html to pdf converter object var converter = new HtmlToPdf(); // specify the number of seconds the conversion is delayed converter.Options.MinPageLoadTime = 2; // set the page timeout (in seconds) converter.Options.MaxPageLoadTime = 30; converter.Options.MarginTop = 20; converter.Options.PdfPageOrientation = PdfPageOrientation.Landscape; var HtmlString = TemplateGenerator.GetMonthlySalaryHTMLString(listData, yearMonth); // create a new pdf document converting an url PdfDocument doc = converter.ConvertHtmlString(HtmlString); // save pdf document doc.Save(filePath); // close pdf document doc.Close(); //download if (!System.IO.File.Exists(filePath)) { return(NotFound()); } var memory = new MemoryStream(); using (var stream = new FileStream(filePath, FileMode.Open)) { stream.CopyTo(memory); } memory.Position = 0; return(File(memory, "application/pdf", fileName)); } catch (Exception ex) { _UnitOfWork.Dispose(); return(BadRequest(new { message = ex.Message })); } finally { _UnitOfWork.Dispose(); } }