Openxml:已添加的ImagePart未显示在Powerpoint / Missing RelationshipID中

时间:2014-07-12 14:03:01

标签: openxml presentationml

我正在尝试动态创建PowerPoint演示文稿。一张幻灯片有一堆占位符图像需要根据特定值进行更改。 我的方法是创建一个新的ImagePart并将其链接到相应的Blip。图像被下载并存储到演示文稿中。问题是,在图像的slide.xml.rels文件中没有创建关系,这会导致关于幻灯片上缺少图像和空框的警告。 我有什么想法吗?

提前感谢您的帮助!祝福

SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite siteCollection = new SPSite(SPContext.Current.Site.RootWeb.Url))
                {
                    using (SPWeb oWeb = siteCollection.OpenWeb())
                    {
                        SPList pictureLibrary = oWeb.Lists[pictureLibraryName];                           
                        SPFile imgFile = pictureLibrary.RootFolder.Files[imgPath];                                                   
                        byte[] byteArray = imgFile.OpenBinary();
                        int pos = Convert.ToInt32(name.Replace("QQ", "").Replace("Image", ""));
                        foreach (DocumentFormat.OpenXml.Presentation.Picture pic in pictureList)
                        {
                            var oldimg = pic.BlipFill.Blip.Embed.ToString();                                                               ImagePart ip = (ImagePart)slidePart.AddImagePart(ImagePartType.Png, oldimg+pos);
                            using (var writer = new BinaryWriter(ip.GetStream()))
                            {
                                writer.Write(byteArray);
                            }
                            string newId = slidePart.GetIdOfPart(ip);
                            setDebugMessage("new img id: " + newId);
                            pic.BlipFill.Blip.Embed = newId;
                        }

                        slidePart.Slide.Save();
                    }
                }
            });

1 个答案:

答案 0 :(得分:2)

因此,对于遇到类似问题的每个人,我终于找到了解决方案。相当愚蠢的错误。您必须使用

的机构PresentationDocument document = PresentationDocument.Open(mstream, true);
using (PresentationDocument document = PresentationDocument.Open(mstream, true))
{
    do your editing here
}

This answer让我走上了正确的道路。