打开XML添加图片到演示文稿

时间:2014-03-03 14:50:37

标签: c# powerpoint openxml

我正在尝试动态创建功率点演示(不使用预先创建的模板幻灯片)。到目前为止,我有结果,但在添加图片方面遇到了困难(见下面的代码)

当禁用P.Picture部件时,它正在工作(意味着可以打开创建的pptx文件)。

使用P.Picture部分PowerPoint 建议修复并删除“找到的不可读部分”导致仅显示图片的占位符“图片无法显示信息”。如果在未修复状态下展开pptx,则媒体文件夹包含可以打开的正确图片... _rels文件夹包含正确链接现有图像文件和图像占位符的文件...我肯定缺少某事。但是????

任何帮助表示赞赏!非常感谢!

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

1 个答案:

答案 0 :(得分:0)

我的问题非常简单 - 只是发现它比较了修复后的版本(序列化的XML)......

未修复在BlipFill部分中,前缀 a:已修复 p: ......

演示文稿和绘图中都有BlipFill

所以我的错误在于使用D.BlipFill而不是P.BlipFill

现在它按预期工作。