private void CreateFirstSectionBodyFromPaginationState(int page, ReportSectionHelper lastPageInfo, ref PageItemHelper lastBodyInfo, ref int sectionStartIndex) { if (lastPageInfo != null) { sectionStartIndex = lastPageInfo.SectionIndex; this.m_sections[sectionStartIndex].UpdateItem(lastPageInfo); if (lastPageInfo.BodyHelper != null) { lastBodyInfo = lastPageInfo.BodyHelper; } else { sectionStartIndex++; } } else if (page == 1) { sectionStartIndex = 0; this.m_sections[sectionStartIndex].Reset(); } else { RSTrace.RenderingTracer.Assert(this.m_lastSectionIndex >= 0 && this.m_lastSectionIndex < this.m_sections.Count, "The index of the last section on the previous paginated page should be a valid index"); if (this.m_sections[this.m_lastSectionIndex].Done && this.m_lastSectionIndex < this.m_sections.Count - 1) { this.m_sections[this.m_lastSectionIndex].Reset(); sectionStartIndex = this.m_lastSectionIndex + 1; } else { sectionStartIndex = this.m_lastSectionIndex; this.m_sections[sectionStartIndex].Reset(); } } }
public ReportSectionHelper WritePaginationInfo() { ReportSectionHelper reportSectionHelper = new ReportSectionHelper(); this.WritePaginationInfoProperties(reportSectionHelper); return(reportSectionHelper); }
public void UpdateItem(ReportSectionHelper sectionHelper) { if (sectionHelper != null) { this.m_sectionIndex = sectionHelper.SectionIndex; this.m_bodyHelper = sectionHelper.BodyHelper; } }
public void WritePaginationInfoProperties(ReportSectionHelper sectionHelper) { if (sectionHelper != null) { sectionHelper.SectionIndex = this.m_sectionIndex; if (this.m_body != null && !this.Done) { sectionHelper.BodyHelper = this.m_body.WritePaginationInfo(); } } }
private static void ReadReportSectionProperties(ReportSectionHelper section, BinaryReader reader, long offsetEndPage) { RSTrace.RenderingTracer.Assert(section != null, "The section helper is null."); RSTrace.RenderingTracer.Assert(reader != null, "The pagination stream is null."); RSTrace.RenderingTracer.Assert(offsetEndPage > 0, "The pagination stream is corrupt."); byte b = reader.ReadByte(); if (b == 23) { section.SectionIndex = reader.ReadInt32(); section.BodyHelper = PageItemHelper.ReadItems(reader, offsetEndPage); b = reader.ReadByte(); if (reader.BaseStream.Position <= offsetEndPage) { return; } throw new InvalidDataException(SPBRes.InvalidPaginationStream); } throw new InvalidDataException(SPBRes.InvalidPaginationStream); }
public static ReportSectionHelper ReadReportSection(BinaryReader reader, long offsetEndPage) { if (reader != null && offsetEndPage > 0) { long position = reader.BaseStream.Position; ReportSectionHelper reportSectionHelper = null; byte b = reader.ReadByte(); if (b == 16) { reportSectionHelper = new ReportSectionHelper(); ReportSectionHelper.ReadReportSectionProperties(reportSectionHelper, reader, offsetEndPage); if (reader.BaseStream.Position > offsetEndPage) { throw new InvalidDataException(SPBRes.InvalidPaginationStream); } return(reportSectionHelper); } throw new InvalidDataException(SPBRes.InvalidTokenPaginationItems(b.ToString("x", CultureInfo.InvariantCulture))); } return(null); }
public void ReadPageInfo(int page, out ReportSectionHelper pageInfo) { RSTrace.RenderingTracer.Assert(this.m_stream != null, "The pagination stream is null."); RSTrace.RenderingTracer.Assert(this.m_paginatedPages >= 0, "The number of paginated pages is negative."); RSTrace.RenderingTracer.Assert(page >= 0 && page <= this.m_paginatedPages, "The number of the solicited page is outside of the interval: 0 - " + this.m_paginatedPages.ToString(CultureInfo.InvariantCulture) + "."); pageInfo = null; switch (page) { case 0: break; case 1: { this.BinaryReader.BaseStream.Seek(this.m_offsetHeader, SeekOrigin.Begin); long offsetEndPage2 = this.m_metadataPages[0]; if (RSTrace.RenderingTracer.TraceVerbose) { RSTrace.RenderingTracer.Trace(TraceLevel.Verbose, "We extract from stream the page: " + page.ToString(CultureInfo.InvariantCulture)); } pageInfo = ReportSectionHelper.ReadReportSection(this.BinaryReader, offsetEndPage2); break; } default: { long offset = this.m_metadataPages[page - 2]; long offsetEndPage = this.m_metadataPages[page - 1]; this.BinaryReader.BaseStream.Seek(offset, SeekOrigin.Begin); if (RSTrace.RenderingTracer.TraceVerbose) { RSTrace.RenderingTracer.Trace(TraceLevel.Verbose, "We extract from stream the page: " + page.ToString(CultureInfo.InvariantCulture)); } pageInfo = ReportSectionHelper.ReadReportSection(this.BinaryReader, offsetEndPage); break; } } }
public 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 = (byte)((this.m_sections.Count <= 1) ? 1 : 0) != 0; PageItemHelper pageItemHelper = null; int regionPageNumber = page; int regionTotalPages = totalPages; int num = -1; this.CreateFirstSectionBodyFromPaginationState(page, lastPageInfo, ref pageItemHelper, ref num); if (this.m_pageContext.ImageConsolidation != null) { this.m_pageContext.ImageConsolidation.Reset(); this.m_pageContext.ImageConsolidation.SetName(this.m_report.Name, page); } this.m_pageContext.PageNumber = page; this.m_pageContext.PageTotalInfo.RegisterPageNumberForStart(page); this.m_pageContext.PageTotalInfo.RetrievePageBreakData(page, out regionPageNumber, out regionTotalPages); this.WriteStartItemToStream(rplWriter); this.WriteReportPageLayoutAtStart(rplWriter); for (int i = num; i < this.m_sections.Count; i++) { ReportSection reportSection2 = this.m_sections[i]; bool flag5 = false; bool flag6 = false; bool flag7 = false; if (flag) { reportSection = reportSection2; } if (i == this.m_sections.Count - 1) { flag4 = true; } if (reportSection2.Body == null) { reportSection2.SetContext(); } reportSection2.CalculatePage(rplWriter, page, totalPages, regionPageNumber, regionTotalPages, flag, flag4, interactivity, this.m_pageContext.PageHeight, ref pageItemHelper, ref flag5, ref flag6, ref flag7); if (this.m_pageContext.CancelPage) { this.ResetSectionsOnPage(num, i); return; } if (flag) { flag = false; flag2 = flag5; lastPageInfo = null; } if (flag6) { flag3 = flag6; } this.m_sectionSizes.Add(reportSection2.ItemRenderSizes); this.m_sectionOffsets.Add(reportSection2.Offset); if (this.m_pageContext.PageHeight != 1.7976931348623157E+308) { this.m_pageContext.PageHeight -= reportSection2.Body.ItemPageSizes.Height; } if (flag7) { if (i > this.m_lastSectionIndex) { this.m_lastSectionIndex = i; } reportSection2.SectionIndex = i; break; } } if (this.m_pageContext.TracingEnabled) { if (this.Done) { Report.TracePageBreakIgnoredAtBottom(page, this.m_pageContext.Common.PageBreakInfo); } else if (this.m_pageContext.Common.PageBreakInfo != null) { Report.TraceLogicalPageBreak(page + 1, this.m_pageContext.Common.PageBreakInfo); } else { Report.TraceVerticalPageBreak(page + 1); } } this.m_pageContext.ApplyPageBreak(page); int num2 = 1; double bodyWidth = 0.0; double bodyHeight = 0.0; bool flag8 = flag4 && this.m_sections[this.m_lastSectionIndex].Done; if (this.m_pageContext.VersionPicker == RPLVersionEnum.RPL2008 || this.m_pageContext.VersionPicker == RPLVersionEnum.RPL2008WithImageConsolidation) { this.WriteEndReportBodyToRPLStream2008(rplWriter, num, ref bodyWidth, ref bodyHeight); if (rplWriter != null || (interactivity != null && !interactivity.Done && interactivity.NeedPageHeaderFooter)) { this.WriteReportPageLayout2008(rplWriter, bodyWidth, bodyHeight); if (flag3) { this.m_sections[this.m_lastSectionIndex].CalculateDelayedFooter(rplWriter, interactivity); num2++; } if (flag2 && (page == 1 || !flag8 || reportSection.IsHeaderPrintOnLastPage())) { reportSection.CalculateDelayedHeader(rplWriter, interactivity); num2++; } if (rplWriter != null && rplWriter.BinaryWriter != null) { rplWriter.BinaryWriter.Write((byte)255); } } } else if (flag2) { if (!flag8) { this.CalculateDelayedHeader(rplWriter, reportSection, interactivity); } else { reportSection.WriteEndItemToStream(rplWriter); if (rplWriter != null) { this.m_sectionSizes[0].Height = reportSection.ItemRenderSizes.Height; this.m_sectionSizes[0].Width = reportSection.ItemRenderSizes.Width; this.m_sectionOffsets[0] = reportSection.Offset; } } } if (interactivity != null) { interactivity.RegisterDocMapRootLabel(this.m_report.Instance.UniqueName, this.m_pageContext); } if (this.m_pageContext.ImageConsolidation != null) { this.m_pageContext.ImageConsolidation.RenderToStream(); } string pageName = this.m_pageContext.PageTotalInfo.GetPageName(page); this.WriteEndItemToStream(rplWriter, num, num2, reportSection.Header, this.m_sections[this.m_lastSectionIndex].Footer, bodyWidth, bodyHeight, pageName); this.m_pageContext.PageHeight = this.m_pageContext.OriginalPageHeight; if (hasPaginationChunk) { this.ReleaseResourcesOnPage(rplWriter, num, false); } else { this.ReleaseResourcesOnPage(rplWriter, num, true); } }