Пример #1
0
        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));
        }