Esempio n. 1
0
        internal static ShapeCollection CreateForSlide(SlidePart slidePart, SCSlide slide)
        {
            var phService           = new PlaceholderService(slidePart.SlideLayoutPart);
            var transformFactory    = new LocationParser(phService);
            var geometryFactory     = new GeometryFactory(phService);
            var shapeContextBuilder = new ShapeContext.Builder(slidePart);

            var chartGrFrameHandler  = new ChartGraphicFrameHandler();
            var tableGrFrameHandler  = new TableGraphicFrameHandler(shapeContextBuilder, transformFactory);
            var oleGrFrameHandler    = new OleGraphicFrameHandler(shapeContextBuilder, transformFactory);
            var pShapeHandler        = new AutoShapeCreator(shapeContextBuilder, transformFactory);
            var pictureHandler       = new PictureHandler(shapeContextBuilder, transformFactory, geometryFactory);
            var sdkGroupShapeHandler =
                new PGroupShapeHandler(shapeContextBuilder, transformFactory, geometryFactory, slidePart);

            pShapeHandler.Successor        = sdkGroupShapeHandler;
            sdkGroupShapeHandler.Successor = oleGrFrameHandler;
            oleGrFrameHandler.Successor    = pictureHandler;
            pictureHandler.Successor       = chartGrFrameHandler;
            chartGrFrameHandler.Successor  = tableGrFrameHandler;

            P.ShapeTree shapeTree = slidePart.Slide.CommonSlideData.ShapeTree;
            var         shapes    = new List <IShape>(shapeTree.Count());

            foreach (OpenXmlCompositeElement compositeElement in shapeTree.OfType <OpenXmlCompositeElement>())
            {
                IShape shape = pShapeHandler.Create(compositeElement, slide);
                if (shape != null)
                {
                    shapes.Add(shape);
                }
            }

            return(new ShapeCollection(shapes));
        }
Esempio n. 2
0
        internal static ShapeCollection CreateForSlideLayout(P.ShapeTree pShapeTree, SCSlideLayout slideLayout)
        {
            var shapeList = new List <IShape>();

            foreach (OpenXmlCompositeElement compositeElement in pShapeTree.OfType <OpenXmlCompositeElement>())
            {
                switch (compositeElement)
                {
                case P.Shape pShape:
                    shapeList.Add(new LayoutAutoShape(slideLayout, pShape));
                    continue;

                case P.GraphicFrame pGraphicFrame:
                {
                    A.GraphicData aGraphicData =
                        pGraphicFrame.GetFirstChild <A.Graphic>().GetFirstChild <A.GraphicData>();
                    if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/presentationml/2006/ole",
                                                      StringComparison.Ordinal))
                    {
                        shapeList.Add(new LayoutOLEObject(slideLayout, pGraphicFrame));
                        continue;
                    }

                    if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/drawingml/2006/chart",
                                                      StringComparison.Ordinal))
                    {
                        shapeList.Add(new LayoutChart(slideLayout, pGraphicFrame));
                        continue;
                    }

                    if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/drawingml/2006/table",
                                                      StringComparison.Ordinal))
                    {
                        shapeList.Add(new LayoutTable(slideLayout, pGraphicFrame));
                        continue;
                    }

                    break;
                }
                }

                // OLE Objects should be parsed before pictures, since OLE containers can contain p:pic elements,
                // thus OLE objects can be parsed as a picture by mistake.
                P.Picture pPicture;
                if (compositeElement is P.Picture treePicture)
                {
                    pPicture = treePicture;
                }
                else
                {
                    P.Picture framePicture = compositeElement.Descendants <P.Picture>().FirstOrDefault();
                    pPicture = framePicture;
                }

                if (pPicture != null)
                {
                    shapeList.Add(new LayoutPicture(slideLayout, pPicture));
                }
            }

            return(new ShapeCollection(shapeList));
        }