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); }
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); }
/// <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); }
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); }