public override byte[] GenerateReport(ReportCardsInputModel settings) { Trace.Assert(ServiceLocator.Context.SchoolLocalId.HasValue); var inowReportCardTask = Task.Run(() => GetInowReportData(settings)); var logo = ServiceLocator.ReportService.GetLogoBySchoolId(ServiceLocator.Context.SchoolLocalId.Value) ?? ServiceLocator.ReportService.GetDistrictLogo(); var template = ServiceLocator.ServiceLocatorMaster.CustomReportTemplateService.GetById(settings.CustomReportTemplateId); var templateRenderer = new TemplateRenderer(settings.DefaultDataPath); var listOfReportCards = BuildReportCardsData(inowReportCardTask.Result, logo?.LogoAddress, settings); IList <byte[]> listOfpdf = new List <byte[]>(); string headerTpl = null, footerTpl = null; foreach (var data in listOfReportCards) { var bodyTpl = templateRenderer.Render(template.Layout, data); if (template.Header != null) { headerTpl = templateRenderer.Render(template.Header.Layout, data); } if (template.Footer != null) { footerTpl = templateRenderer.Render(template.Footer.Layout, data); } var report = DocumentRenderer.RenderToPdf(settings.DefaultDataPath, settings.ContentUrl, bodyTpl, template.Style, headerTpl, template.Header?.Style, footerTpl, template.Footer?.Style); listOfpdf.Add(report); } return(DocumentRenderer.MergePdfDocuments(listOfpdf)); }