Exemple #1
0
        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();
            }
        }