Openxml: добавлен ImagePart, который не отображается в Powerpoint / Missing RelationshipID
Я пытаюсь динамически создать презентацию 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 ответ
Итак, для всех, кто сталкивается с подобной проблемой, я наконец нашел решение. Совершенно глупая ошибка. Инстад из PresentationDocument document = PresentationDocument.Open(mstream, true);
ты должен использовать
using (PresentationDocument document = PresentationDocument.Open(mstream, true))
{
do your editing here
}
Этот ответ привел меня на правильный путь.