예제 #1
0
 private void RenderFixedPicture(FixedPicture picture, Page page)
 {
     Demon.PDF.Rectangle bounds = Convert.Rectangle(picture.Bounds);
     page.AddImage(picture.Image.Size, picture.Image.RawData, 8, bounds);
 }
예제 #2
0
        public override void Load(XElement root)
        {
            base.Load(root);

            XNamespace ns     = root.GetDefaultNamespace();
            XElement   header = root.Element(ns + "Header")?.Element(ns + "GroupLayout");

            if (header != null)
            {
                _headerLayout = new GroupLayout(_generator, _trackingInfo.LineNumber, _trackingInfo.LinePosition);
                _headerLayout.Load(header);
                _headerLayout.SetAsHeaderOf(this);
            }
            XElement footer = root.Element(ns + "Footer")?.Element(ns + "GroupLayout");

            if (footer != null)
            {
                _footerLayout = new GroupLayout(_generator, _trackingInfo.LineNumber, _trackingInfo.LinePosition);
                _footerLayout.Load(footer);
                _footerLayout.SetAsFooterOf(this);
            }

            PageMetrics metrics = _generator.ReportDesign.LoadPageMetrics(root.Element(ns + "PageMetrics"));

            if (metrics == null)
            {
                throw new System.InvalidOperationException($"ChapterLayout page metrics is null at {_trackingInfo}.");
            }
            _mediaBox = new Rectangle
            {
                Left   = metrics.MediaBoxLeft,
                Bottom = metrics.MediaBoxBottom,
                Right  = metrics.MediaBoxRight,
                Top    = metrics.MediaBoxTop
            };
            _bodyBox = new Rectangle
            {
                Left   = metrics.BodyBoxLeft,
                Bottom = metrics.BodyBoxBottom,
                Right  = metrics.BodyBoxRight,
                Top    = metrics.BodyBoxTop
            };
            _headerBox = new Rectangle
            {
                Left   = metrics.HeaderBoxLeft,
                Bottom = metrics.HeaderBoxBottom,
                Right  = metrics.HeaderBoxRight,
                Top    = metrics.HeaderBoxTop
            };
            _footerBox = new Rectangle
            {
                Left   = metrics.FooterBoxLeft,
                Bottom = metrics.FooterBoxBottom,
                Right  = metrics.FooterBoxRight,
                Top    = metrics.FooterBoxTop
            };

            _bounds = _bodyBox;

            //	Note that the header and footer tables are structured as part of the
            //	page layout, not as content. That is, the page layout has explicit
            //	pointers to the header and footer, and the header and footer layouts
            //	nominate no container. This allows a header or footer
            //	layout to be shared by any number of page layouts.
//			if(src.HeaderLayout != null)
//				_headerLayout = new TableLayout(src.HeaderLayout,generator);
//			if(src.FooterLayout != null)
//				_footerLayout = new TableLayout(src.FooterLayout,generator);

            //	A page layout's page break rules is always null because a page layout always
            //	starts on a new page

            //	Load any background images
            _background = new List <FixedPicture>();
            XElement background = root.Element(ns + "Background");

            if (background != null)
            {
                foreach (XElement pictureElement in background.Elements(ns + "Picture"))
                {
                    //	The picture can be specified either with an explicit filename or with
                    //	a reference to a resource
                    string filename   = _generator.ReportDesign.LoadString(pictureElement.Attribute("filename"));
                    string resourceId = _generator.ReportDesign.LoadString(pictureElement.Attribute("ref"));

                    int left   = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Left")) ?? 0;
                    int bottom = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Bottom")) ?? 0;
                    int right  = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Right")) ?? 0;
                    int top    = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Top")) ?? 0;

                    PictureAlignment alignment = _generator.ReportDesign.LoadEnum <PictureAlignment>(pictureElement.Element(ns + "Alignment"));
                    PictureScaleMode scalemode = _generator.ReportDesign.LoadEnum <PictureScaleMode>(pictureElement.Element(ns + "ScaleMode"));
                    int quality = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Quality")) ?? 0;

                    FixedPicture picture = new FixedPicture(resourceId, filename, left, bottom, right, top, alignment, scalemode, quality);
                    _background.Add(picture);
                }
            }

            //	Load any overlay images
            _overlays = new List <FixedPicture>();
            XElement overlay = root.Element(ns + "Overlay");

            if (overlay != null)
            {
                foreach (XElement pictureElement in overlay.Elements(ns + "Picture"))
                {
                    //	The picture can be specified either with an explicit filename or with
                    //	a reference to a resource
                    string filename   = _generator.ReportDesign.LoadString(pictureElement.Attribute("filename"));
                    string resourceId = _generator.ReportDesign.LoadString(pictureElement.Attribute("ref"));

                    int left   = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Left")) ?? 0;
                    int bottom = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Bottom")) ?? 0;
                    int right  = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Right")) ?? 0;
                    int top    = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Top")) ?? 0;

                    PictureAlignment alignment = _generator.ReportDesign.LoadEnum <PictureAlignment>(pictureElement.Element(ns + "Alignment"));
                    PictureScaleMode scalemode = _generator.ReportDesign.LoadEnum <PictureScaleMode>(pictureElement.Element(ns + "ScaleMode"));
                    int quality = _generator.ReportDesign.LoadInt(pictureElement.Element(ns + "Quality")) ?? 0;

                    FixedPicture picture = new FixedPicture(resourceId, filename, left, bottom, right, top, alignment, scalemode, quality);
                    _overlays.Add(picture);
                }
            }

            _drawRules   = _generator.ReportDesign.LoadBoolean(root.Attribute("drawRules")) ?? false;
            _renderEmpty = _generator.ReportDesign.LoadBoolean(root.Attribute("renderEmpty")) ?? false;
        }