Example #1
0
        internal ReportPaginationInfo(Microsoft.ReportingServices.OnDemandReportRendering.Report report, Version serverRPLVersion, double pageHeight)
        {
            bool isNewChunk = false;

            m_stream = report.GetOrCreateChunk(Microsoft.ReportingServices.OnDemandReportRendering.Report.ChunkTypes.Pagination, "PaginationInfo", out isNewChunk);
            if (m_stream != null)
            {
                if (isNewChunk)
                {
                    m_version    = serverRPLVersion;
                    m_pageHeight = pageHeight;
                    SavePaginationInfo();
                    m_paginatedPages = 0;
                    m_metadataPages  = new List <long>();
                    m_reportDone     = false;
                }
                else if (ExtractPaginationInfo(serverRPLVersion))
                {
                    m_stream.Close();
                    m_stream     = report.CreateChunk(Microsoft.ReportingServices.OnDemandReportRendering.Report.ChunkTypes.Pagination, "PaginationInfo");
                    m_version    = serverRPLVersion;
                    m_pageHeight = pageHeight;
                    SavePaginationInfo();
                    m_paginatedPages = 0;
                    m_metadataPages  = new List <long>();
                    m_reportDone     = false;
                }
                else if (pageHeight != m_pageHeight)
                {
                    m_stream         = null;
                    m_version        = new Version(0, 0, 0);
                    m_paginatedPages = -1;
                    m_offsetLastPage = -1L;
                    m_offsetHeader   = -1L;
                    m_pageHeight     = 0.0;
                    m_metadataPages  = null;
                    m_reportDone     = false;
                }
            }
        }
Example #2
0
        private static Stream GetInteractivityChunck(Microsoft.ReportingServices.OnDemandReportRendering.Report report, string chunkName, int page, out int lastPage)
        {
            lastPage = 0;
            Stream stream     = null;
            bool   isNewChunk = false;

            stream = ((page != 1) ? report.GetChunk(Microsoft.ReportingServices.OnDemandReportRendering.Report.ChunkTypes.Interactivity, chunkName) : report.GetOrCreateChunk(Microsoft.ReportingServices.OnDemandReportRendering.Report.ChunkTypes.Interactivity, chunkName, out isNewChunk));
            if (stream == null)
            {
                return(null);
            }
            if (!isNewChunk)
            {
                long num = stream.Length - 9;
                if (num > 0)
                {
                    stream.Seek(num, SeekOrigin.Begin);
                    BinaryReader binaryReader = new BinaryReader(stream);
                    binaryReader.ReadByte();
                    num = 9 + binaryReader.ReadInt64();
                    stream.Seek(-num, SeekOrigin.End);
                    binaryReader.ReadByte();
                    lastPage = binaryReader.ReadInt32();
                    if (binaryReader.ReadBoolean())
                    {
                        return(null);
                    }
                    stream.Seek(-num, SeekOrigin.End);
                }
                else
                {
                    stream.Seek(0L, SeekOrigin.Begin);
                }
            }
            return(stream);
        }