Question

I am trying to create power point presentation on the fly (without usage of previuosly created template slide). So far I have results, but experiencing difficulties on adding picture (see code below)

When disable the P.Picture part it is working (means the created pptx file can be opened).

With the P.Picture part PowerPoint proposes repair and removes "found non-readable part" resulting of showing only placeholder of the picture with "Picture can not be shown message". If you expand the pptx in unrepaired state the media folder contains proper picture that can be opened... _rels folder contains file that properly links the existing image file with the image placeholder... I am surely missing sth. but what???

Any help appreciated! Many thanks!

    public static void CreatePresentation(string filepath)
    {
        // Create a presentation at a specified file path. The presentation document type is pptx, by default.
        PresentationDocument presentationDoc = PresentationDocument.Create(filepath, PresentationDocumentType.Presentation);
        PresentationPart presentationPart = presentationDoc.AddPresentationPart();
        presentationPart.Presentation = new Presentation();

        SlideMasterIdList sldMasterIdList = new SlideMasterIdList(new SlideMasterId() { Id = (UInt32Value)2147483648U, RelationshipId = "rId1" });
        SlideIdList sldIdList = new SlideIdList();
        SlideSize sldSize = new SlideSize() { Cx = 2751 * mm / 10, Cy = 1905 * mm / 10, Type = SlideSizeValues.Screen4x3 }; // DIN A4 - Landscape.
        NotesSize notesSize = new NotesSize() { Cx = 1905 * mm / 10, Cy = 2751 * mm / 10 }; // DIN A4 - Portrait.
        DefaultTextStyle defaultTextStyle = new DefaultTextStyle();

        presentationPart.Presentation.Append(sldMasterIdList, sldIdList, sldSize, notesSize, defaultTextStyle);

        #region [ SlidePart ]
        SlidePart slidePart = presentationPart.AddNewPart<SlidePart>("rId2");
        sldIdList.AppendChild<SlideId>(new SlideId() { Id = (UInt32Value)256U, RelationshipId = "rId2" });

        slidePart.Slide = new Slide
        (
            new CommonSlideData
            (
                new ShapeTree
                (
                    new P.NonVisualGroupShapeProperties
                    (
                        new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
                        new P.NonVisualGroupShapeDrawingProperties(),
                        new ApplicationNonVisualDrawingProperties()
                    ),
                    new GroupShapeProperties(new DocumentFormat.OpenXml.Drawing.TransformGroup())
                )
            ),
            new ColorMapOverride(new MasterColorMapping())
        );

        ImagePart ip = slidePart.AddImagePart(ImagePartType.Jpeg, "rId2");
        MyStream.Position = 0;
        ip.FeedData(MyStream);
        #endregion

        #region [ slideLayoutPart ]
        SlideLayoutPart slideLayoutPart = slidePart.AddNewPart<SlideLayoutPart>("rId1");
        SlideLayout slideLayout = new SlideLayout
            (
                new CommonSlideData
                    (
                        new ShapeTree
                            (
                                new P.NonVisualGroupShapeProperties
                                    (
                                        new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
                                        new P.NonVisualGroupShapeDrawingProperties(),
                                        new ApplicationNonVisualDrawingProperties()
                                    ),
                                    new GroupShapeProperties
                                        (
                                            new DocumentFormat.OpenXml.Drawing.TransformGroup()
                                        )
                            )
                    ),
                    new ColorMapOverride
                        (
                            new MasterColorMapping()
                        )
            );
        slideLayoutPart.SlideLayout = slideLayout;
        #endregion

        #region [ slideMasterPart ]
        SlideMasterPart slideMasterPart = slideLayoutPart.AddNewPart<SlideMasterPart>("rId1");
        SlideMaster slideMaster = new SlideMaster(
        new CommonSlideData(new ShapeTree(
          new P.NonVisualGroupShapeProperties(
          new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
          new P.NonVisualGroupShapeDrawingProperties(),
          new ApplicationNonVisualDrawingProperties()),
          new GroupShapeProperties(new DocumentFormat.OpenXml.Drawing.TransformGroup()),
          new P.Shape(
          new P.NonVisualShapeProperties(
            new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title Placeholder 1" },
            new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
            new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Type = PlaceholderValues.Title })),
          new P.ShapeProperties(),
          new P.TextBody(
            new BodyProperties(),
            new ListStyle(),
            new Paragraph())))),
        new P.ColorMap() { Background1 = D.ColorSchemeIndexValues.Light1, Text1 = D.ColorSchemeIndexValues.Dark1, Background2 = D.ColorSchemeIndexValues.Light2, Text2 = D.ColorSchemeIndexValues.Dark2, Accent1 = D.ColorSchemeIndexValues.Accent1, Accent2 = D.ColorSchemeIndexValues.Accent2, Accent3 = D.ColorSchemeIndexValues.Accent3, Accent4 = D.ColorSchemeIndexValues.Accent4, Accent5 = D.ColorSchemeIndexValues.Accent5, Accent6 = D.ColorSchemeIndexValues.Accent6, Hyperlink = D.ColorSchemeIndexValues.Hyperlink, FollowedHyperlink = D.ColorSchemeIndexValues.FollowedHyperlink },
        new SlideLayoutIdList(new SlideLayoutId() { Id = (UInt32Value)2147483649U, RelationshipId = "rId1" }),
        new TextStyles(new TitleStyle(), new BodyStyle(), new OtherStyle()));
        slideMasterPart.SlideMaster = slideMaster;
        slideMasterPart.AddPart(slideLayoutPart, "rId1");
        presentationPart.AddPart(slideMasterPart, "rId1");
        #endregion

        #region [ Theme ]
        ThemePart themePart = slideMasterPart.AddNewPart<ThemePart>("rId5");
        D.Theme theme = new D.Theme() { Name = "Office Theme" };

        D.ThemeElements themeElements = new D.ThemeElements(
        new D.ColorScheme(
          new D.Dark1Color(new D.SystemColor() { Val = D.SystemColorValues.WindowText, LastColor = "000000" }),
          new D.Light1Color(new D.SystemColor() { Val = D.SystemColorValues.Window, LastColor = "FFFFFF" }),
          new D.Dark2Color(new D.RgbColorModelHex() { Val = "1F497D" }),
          new D.Light2Color(new D.RgbColorModelHex() { Val = "EEECE1" }),
          new D.Accent1Color(new D.RgbColorModelHex() { Val = "4F81BD" }),
          new D.Accent2Color(new D.RgbColorModelHex() { Val = "C0504D" }),
          new D.Accent3Color(new D.RgbColorModelHex() { Val = "9BBB59" }),
          new D.Accent4Color(new D.RgbColorModelHex() { Val = "8064A2" }),
          new D.Accent5Color(new D.RgbColorModelHex() { Val = "4BACC6" }),
          new D.Accent6Color(new D.RgbColorModelHex() { Val = "F79646" }),
          new D.Hyperlink(new D.RgbColorModelHex() { Val = "0000FF" }),
          new D.FollowedHyperlinkColor(new D.RgbColorModelHex() { Val = "800080" })) { Name = "Office" },
          new D.FontScheme(
          new D.MajorFont(
          new D.LatinFont() { Typeface = "Calibri" },
          new D.EastAsianFont() { Typeface = "" },
          new D.ComplexScriptFont() { Typeface = "" }),
          new D.MinorFont(
          new D.LatinFont() { Typeface = "Calibri" },
          new D.EastAsianFont() { Typeface = "" },
          new D.ComplexScriptFont() { Typeface = "" })) { Name = "Office" },
          new D.FormatScheme(
          new D.FillStyleList(
          new D.SolidFill(new D.SchemeColor() { Val = D.SchemeColorValues.PhColor }),
          new D.GradientFill(
            new D.GradientStopList(
            new D.GradientStop(new D.SchemeColor(new D.Tint() { Val = 50000 },
              new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 },
            new D.GradientStop(new D.SchemeColor(new D.Tint() { Val = 37000 },
             new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 35000 },
            new D.GradientStop(new D.SchemeColor(new D.Tint() { Val = 15000 },
             new D.SaturationModulation() { Val = 350000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 100000 }
            ),
            new D.LinearGradientFill() { Angle = 16200000, Scaled = true }),
          new D.NoFill(),
          new D.PatternFill(),
          new D.GroupFill()),
          new D.LineStyleList(
          new D.Outline(
            new D.SolidFill(
            new D.SchemeColor(
              new D.Shade() { Val = 95000 },
              new D.SaturationModulation() { Val = 105000 }) { Val = D.SchemeColorValues.PhColor }),
            new D.PresetDash() { Val = D.PresetLineDashValues.Solid })
          {
              Width = 9525,
              CapType = D.LineCapValues.Flat,
              CompoundLineType = D.CompoundLineValues.Single,
              Alignment = D.PenAlignmentValues.Center
          },
          new D.Outline(
            new D.SolidFill(
            new D.SchemeColor(
              new D.Shade() { Val = 95000 },
              new D.SaturationModulation() { Val = 105000 }) { Val = D.SchemeColorValues.PhColor }),
            new D.PresetDash() { Val = D.PresetLineDashValues.Solid })
          {
              Width = 9525,
              CapType = D.LineCapValues.Flat,
              CompoundLineType = D.CompoundLineValues.Single,
              Alignment = D.PenAlignmentValues.Center
          },
          new D.Outline(
            new D.SolidFill(
            new D.SchemeColor(
              new D.Shade() { Val = 95000 },
              new D.SaturationModulation() { Val = 105000 }) { Val = D.SchemeColorValues.PhColor }),
            new D.PresetDash() { Val = D.PresetLineDashValues.Solid })
          {
              Width = 9525,
              CapType = D.LineCapValues.Flat,
              CompoundLineType = D.CompoundLineValues.Single,
              Alignment = D.PenAlignmentValues.Center
          }),
          new D.EffectStyleList(
          new D.EffectStyle(
            new D.EffectList(
            new D.OuterShadow(
              new D.RgbColorModelHex(
              new D.Alpha() { Val = 38000 }) { Val = "000000" }) { BlurRadius = 40000L, Distance = 20000L, Direction = 5400000, RotateWithShape = false })),
          new D.EffectStyle(
            new D.EffectList(
            new D.OuterShadow(
              new D.RgbColorModelHex(
              new D.Alpha() { Val = 38000 }) { Val = "000000" }) { BlurRadius = 40000L, Distance = 20000L, Direction = 5400000, RotateWithShape = false })),
          new D.EffectStyle(
            new D.EffectList(
            new D.OuterShadow(
              new D.RgbColorModelHex(
              new D.Alpha() { Val = 38000 }) { Val = "000000" }) { BlurRadius = 40000L, Distance = 20000L, Direction = 5400000, RotateWithShape = false }))),
          new D.BackgroundFillStyleList(
          new D.SolidFill(new D.SchemeColor() { Val = D.SchemeColorValues.PhColor }),
          new D.GradientFill(
            new D.GradientStopList(
            new D.GradientStop(
              new D.SchemeColor(new D.Tint() { Val = 50000 },
                new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 },
            new D.GradientStop(
              new D.SchemeColor(new D.Tint() { Val = 50000 },
                new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 },
            new D.GradientStop(
              new D.SchemeColor(new D.Tint() { Val = 50000 },
                new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 }),
            new D.LinearGradientFill() { Angle = 16200000, Scaled = true }),
          new D.GradientFill(
            new D.GradientStopList(
            new D.GradientStop(
              new D.SchemeColor(new D.Tint() { Val = 50000 },
                new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 },
            new D.GradientStop(
              new D.SchemeColor(new D.Tint() { Val = 50000 },
                new D.SaturationModulation() { Val = 300000 }) { Val = D.SchemeColorValues.PhColor }) { Position = 0 }),
            new D.LinearGradientFill() { Angle = 16200000, Scaled = true }))) { Name = "Office" });

        theme.Append(themeElements);
        theme.Append(new D.ObjectDefaults());
        theme.Append(new D.ExtraColorSchemeList());

        themePart.Theme = theme;
        presentationPart.AddPart(themePart, "rId5");
        #endregion

        P.Picture picture = new P.Picture
                            (
                                new P.NonVisualPictureProperties
                                (
                                    new P.NonVisualDrawingProperties() { Id = (UInt32Value)1026U, Name = "Photo", Description = "" },
                                    new P.NonVisualPictureDrawingProperties
                                    (
                                        new D.PictureLocks() { NoChangeAspect = true }
                                    ),
                                    new ApplicationNonVisualDrawingProperties()
                                ),
                                new D.BlipFill
                                (
                                    new D.Blip
                                        (
                                            new D.NonVisualPicturePropertiesExtensionList()
                                        ) { Embed = "rId2" },
                                    new D.Stretch
                                    (
                                        new D.FillRectangle()
                                    )
                                ),
                                new P.ShapeProperties
                                (
                                    new D.Transform2D
                                    (
                                        new D.Offset() { X = 1 * cm, Y = 3 * cm },
                                        new D.Extents() { Cx = 16 * cm, Cy = 14 * cm }
                                    ),
                                    new D.PresetGeometry
                                    (
                                        new D.AdjustValueList()
                                    ) { Preset = D.ShapeTypeValues.Rectangle }
                                )
                            );

        slidePart.Slide.CommonSlideData.ShapeTree.AppendChild<P.Picture>(picture);



        //Close the presentation handle
        presentationDoc.Close();
    }

No correct solution

OTHER TIPS

My problem was really very simple - just found it comparing the repaired against genererated version (serialized XML)...

Unrepaired there was in the BlipFill portion the Prefix a: repaired p:...

There are BlipFills both in Presentation and Drawing

So my mistake was in using the D.BlipFill instead of P.BlipFill

Now it works as expected.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top