private void CalculateDelayedHeader(RPLWriter rplWriter, ReportSection firstSection, Interactivity interactivity) { firstSection.CalculateDelayedHeader(rplWriter, interactivity); firstSection.UpdateReportSectionSizes(rplWriter); firstSection.WriteEndItemToStream(rplWriter); if (rplWriter != null) { m_sectionSizes[0].Height = firstSection.ItemRenderSizes.Height; m_sectionSizes[0].Width = firstSection.ItemRenderSizes.Width; m_sectionOffsets[0] = firstSection.Offset; } }
internal void NextPage(RPLWriter rplWriter, ref ReportSectionHelper lastPageInfo, int page, int totalPages, Interactivity interactivity, bool hasPaginationChunk) { ReportSection reportSection = null; bool flag = true; bool flag2 = false; bool flag3 = false; bool flag4 = (m_sections.Count <= 1) ? true : false; PageItemHelper lastBodyInfo = null; int pageNumber = page; int totalPages2 = totalPages; int sectionStartIndex = -1; CreateFirstSectionBodyFromPaginationState(page, lastPageInfo, ref lastBodyInfo, ref sectionStartIndex); if (m_pageContext.ImageConsolidation != null) { m_pageContext.ImageConsolidation.Reset(); m_pageContext.ImageConsolidation.SetName(m_report.Name, page); } m_pageContext.PageNumber = page; m_pageContext.PageTotalInfo.RegisterPageNumberForStart(page); m_pageContext.PageTotalInfo.RetrievePageBreakData(page, out pageNumber, out totalPages2); WriteStartItemToStream(rplWriter); WriteReportPageLayoutAtStart(rplWriter); for (int i = sectionStartIndex; i < m_sections.Count; i++) { ReportSection reportSection2 = m_sections[i]; bool delayedHeader = false; bool delayedFooter = false; bool lastSectionOnPage = false; if (flag) { reportSection = reportSection2; } if (i == m_sections.Count - 1) { flag4 = true; } if (reportSection2.Body == null) { reportSection2.SetContext(); } reportSection2.CalculatePage(rplWriter, page, totalPages, pageNumber, totalPages2, flag, flag4, interactivity, m_pageContext.PageHeight, ref lastBodyInfo, ref delayedHeader, ref delayedFooter, ref lastSectionOnPage); if (m_pageContext.CancelPage) { ResetSectionsOnPage(sectionStartIndex, i); return; } if (flag) { flag = false; flag2 = delayedHeader; lastPageInfo = null; } if (delayedFooter) { flag3 = delayedFooter; } m_sectionSizes.Add(reportSection2.ItemRenderSizes); m_sectionOffsets.Add(reportSection2.Offset); if (m_pageContext.PageHeight != double.MaxValue) { m_pageContext.PageHeight -= reportSection2.Body.ItemPageSizes.Height; } if (lastSectionOnPage) { if (i > m_lastSectionIndex) { m_lastSectionIndex = i; } reportSection2.SectionIndex = i; break; } } if (m_pageContext.TracingEnabled) { if (Done) { TracePageBreakIgnoredAtBottom(page, m_pageContext.Common.PageBreakInfo); } else if (m_pageContext.Common.PageBreakInfo != null) { TraceLogicalPageBreak(page + 1, m_pageContext.Common.PageBreakInfo); } else { TraceVerticalPageBreak(page + 1); } } m_pageContext.ApplyPageBreak(page); int num = 1; double bodyWidth = 0.0; double bodyHeight = 0.0; bool flag5 = flag4 && m_sections[m_lastSectionIndex].Done; if (m_pageContext.VersionPicker == RPLVersionEnum.RPL2008 || m_pageContext.VersionPicker == RPLVersionEnum.RPL2008WithImageConsolidation) { WriteEndReportBodyToRPLStream2008(rplWriter, sectionStartIndex, ref bodyWidth, ref bodyHeight); if (rplWriter != null || (interactivity != null && !interactivity.Done && interactivity.NeedPageHeaderFooter)) { WriteReportPageLayout2008(rplWriter, bodyWidth, bodyHeight); if (flag3) { m_sections[m_lastSectionIndex].CalculateDelayedFooter(rplWriter, interactivity); num++; } if (flag2 && (page == 1 || !flag5 || reportSection.IsHeaderPrintOnLastPage())) { reportSection.CalculateDelayedHeader(rplWriter, interactivity); num++; } if (rplWriter != null && rplWriter.BinaryWriter != null) { rplWriter.BinaryWriter.Write(byte.MaxValue); } } } else if (flag2) { if (!flag5) { CalculateDelayedHeader(rplWriter, reportSection, interactivity); } else { reportSection.WriteEndItemToStream(rplWriter); if (rplWriter != null) { m_sectionSizes[0].Height = reportSection.ItemRenderSizes.Height; m_sectionSizes[0].Width = reportSection.ItemRenderSizes.Width; m_sectionOffsets[0] = reportSection.Offset; } } } interactivity?.RegisterDocMapRootLabel(m_report.Instance.UniqueName, m_pageContext); if (m_pageContext.ImageConsolidation != null) { m_pageContext.ImageConsolidation.RenderToStream(); } string pageName = m_pageContext.PageTotalInfo.GetPageName(page); WriteEndItemToStream(rplWriter, sectionStartIndex, num, reportSection.Header, m_sections[m_lastSectionIndex].Footer, bodyWidth, bodyHeight, pageName); m_pageContext.PageHeight = m_pageContext.OriginalPageHeight; if (hasPaginationChunk) { ReleaseResourcesOnPage(rplWriter, sectionStartIndex, includeLastSection: false); } else { ReleaseResourcesOnPage(rplWriter, sectionStartIndex, includeLastSection: true); } }