示例#1
0
        public void GetPlaceholderType_Test()
        {
            var ms      = new MemoryStream(Properties.Resources._008);
            var xmlDoc  = PresentationDocument.Open(ms, false);
            var sldPart = xmlDoc.PresentationPart.SlideParts.First();
            var spId3   = sldPart.Slide.CommonSlideData.ShapeTree.Elements <DocumentFormat.OpenXml.Presentation.Shape>().Single(sp => sp.GetId() == 3);

            // ACT
            var phXml = PlaceholderLocationService.CreatePlaceholderData(spId3);

            // CLOSE
            xmlDoc.Close();

            // ASSERT
            Assert.Equal(PlaceholderType.DateAndTime, phXml.PlaceholderType);
        }
示例#2
0
        private static PlaceholderFontData FromLayoutMasterElement(P.Shape sdkShape)
        {
            var placeholderFontData = PlaceholderLocationService.PlaceholderFontDataFromCompositeElement(sdkShape);

            placeholderFontData.LvlFontHeights = FontHeightParser.FromCompositeElement(sdkShape.TextBody.ListStyle);

            if (!placeholderFontData.LvlFontHeights.Any()) // font height is still not known
            {
                var endParaRunPrFs = sdkShape.TextBody.GetFirstChild <A.Paragraph>().GetFirstChild <A.EndParagraphRunProperties>()?.FontSize;
                if (endParaRunPrFs != null)
                {
                    placeholderFontData.LvlFontHeights.Add(1, endParaRunPrFs.Value);
                }
            }

            return(placeholderFontData);
        }
示例#3
0
        /// <summary>
        /// Tries gets font height. Return null if font height is not defined.
        /// </summary>
        /// <param name="sdkCompositeElement">Placeholder element.</param>
        /// <param name="pLvl">Paragraph level.</param>
        /// <returns></returns>
        public int?TryGetFontHeight(OpenXmlCompositeElement sdkCompositeElement, int pLvl)  //TODO: use pattern Try
        {
            Check.NotNull(sdkCompositeElement, nameof(sdkCompositeElement));

            var paramPlaceholderData = PlaceholderLocationService.CreatePlaceholderData(sdkCompositeElement);

            // From slide layout element
            var lPlaceholder = _layoutPlaceholders.Value.FirstOrDefault(e => e.Equals(paramPlaceholderData));

            if (lPlaceholder != null && lPlaceholder.LvlFontHeights.ContainsKey(pLvl))
            {
                return(lPlaceholder.LvlFontHeights[pLvl]);
            }

            // From slide master element
            var mPlaceholder = _masterPlaceholders.Value.FirstOrDefault(e => e.Equals(paramPlaceholderData));

            if (mPlaceholder != null && mPlaceholder.LvlFontHeights.ContainsKey(pLvl))
            {
                return(mPlaceholder.LvlFontHeights[pLvl]);
            }

            // Title type
            var masterGlobalTextStyle = _sdkSldPart.SlideLayoutPart.SlideMasterPart.SlideMaster.TextStyles;

            if (paramPlaceholderData.PlaceholderType == PlaceholderType.Title)
            {
                return(masterGlobalTextStyle.TitleStyle.Level1ParagraphProperties.GetFirstChild <A.DefaultRunProperties>().FontSize.Value);
            }

            // Master body type placeholder settings
            if (_masterBodyFontHeights.Value.ContainsKey(pLvl))
            {
                return(_masterBodyFontHeights.Value[pLvl]);
            }

            return(null);
        }
示例#4
0
        public IList <ShapeEx> FromSldPart(SlidePart sdkSldPart)
        {
            var sldPhFontService    = new PlaceholderFontService(sdkSldPart); //TODO: make DI
            var phService           = new PlaceholderLocationService(sdkSldPart.SlideLayoutPart);
            var transformFactory    = new InnerTransformFactory(phService);
            var geometryFactory     = new GeometryFactory(phService);
            var shapeContextBuilder = new ShapeContext.Builder(_preSettings, sldPhFontService, sdkSldPart);

            var chartGrFrameHandler  = new ChartGraphicFrameHandler(shapeContextBuilder, transformFactory);
            var tableGrFrameHandler  = new TableGraphicFrameHandler(shapeContextBuilder, transformFactory);
            var oleGrFrameHandler    = new OleGraphicFrameHandler(shapeContextBuilder, transformFactory);
            var sdkShapeHandler      = new SdkShapeHandler(shapeContextBuilder, transformFactory, geometryFactory);
            var pictureHandler       = new PictureHandler(shapeContextBuilder, transformFactory, geometryFactory, sdkSldPart);
            var sdkGroupShapeHandler = new SdkGroupShapeHandler(shapeContextBuilder, transformFactory, geometryFactory, sdkSldPart);

            sdkShapeHandler.Successor      = sdkGroupShapeHandler;
            sdkGroupShapeHandler.Successor = oleGrFrameHandler;
            // OLE objects handler must be before pictures handler, cause OLE container can contain p:pic elements,
            // thereby defining OLE as a picture
            oleGrFrameHandler.Successor   = pictureHandler;
            pictureHandler.Successor      = chartGrFrameHandler;
            chartGrFrameHandler.Successor = tableGrFrameHandler;

            var sdkShapeTree = sdkSldPart.Slide.CommonSlideData.ShapeTree;
            var shapes       = new List <ShapeEx>(sdkShapeTree.Count());

            foreach (var openXmlElement in sdkShapeTree)
            {
                var shape = sdkShapeHandler.Create(openXmlElement);
                if (shape != null)
                {
                    shapes.Add(shape);
                }
            }

            return(shapes);
        }