1
我正嘗試使用OpenXML生成包含圖像的PowerPoint文件。不幸的是它不起作用。圖像未被顯示。我檢查了使用OpenXML生產力工具生成的文件,並分別解壓縮文件內容。該文件本身包含/ppt/media/image.png中的圖像,並且應該顯示在第二張幻燈片中。使用OpenXML在PPTX中插入圖像不起作用
這裏是我的代碼:
private void InsertSlide(string chartString, int position, string title, string text = "")
{
if (m_presentation == null || title == null || m_presentation.PresentationPart == null)
return;
var slide = new Slide(new CommonSlideData(new ShapeTree()));
var nonVisualProperties =
slide.CommonSlideData.ShapeTree.AppendChild(new NonVisualGroupShapeProperties());
nonVisualProperties.NonVisualDrawingProperties = new NonVisualDrawingProperties { Id = 1, Name = "" };
nonVisualProperties.NonVisualGroupShapeDrawingProperties = new NonVisualGroupShapeDrawingProperties();
nonVisualProperties.ApplicationNonVisualDrawingProperties = new ApplicationNonVisualDrawingProperties();
slide.CommonSlideData.ShapeTree.AppendChild(new GroupShapeProperties());
var slidePart = m_presentation.PresentationPart.AddNewPart<SlidePart>();
var imagePart = slidePart.AddImagePart(ImagePartType.Png, "irgendeinscheiss");
//var imageStream = new MemoryStream(Convert.FromBase64String(chartString));
using (var imageStream = new FileStream(@"C:\Users\DA\Desktop\Charts\1_Chart2_01.png", FileMode.Open))
{
imageStream.Position = 0;
imagePart.FeedData(imageStream);
}
slide.Save(slidePart);
var slideIdList = m_presentation.PresentationPart.Presentation.SlideIdList;
uint maxSlideId = 1;
SlideId prevSlideId = null;
foreach (SlideId slideId in slideIdList.ChildElements)
{
if (slideId.Id > maxSlideId)
maxSlideId = slideId.Id;
position--;
if (position == 0)
prevSlideId = slideId;
}
maxSlideId++;
SlidePart lastSlidePart;
if (prevSlideId != null)
lastSlidePart = (SlidePart)m_presentation.PresentationPart.GetPartById(prevSlideId.RelationshipId);
else
lastSlidePart = (SlidePart)m_presentation.PresentationPart.GetPartById(((SlideId)(slideIdList.ChildElements[0])).RelationshipId);
if (lastSlidePart.SlideLayoutPart != null)
slidePart.AddPart(lastSlidePart.SlideLayoutPart);
var newSlideId = slideIdList.InsertAfter(new SlideId(), prevSlideId);
newSlideId.Id = maxSlideId;
newSlideId.RelationshipId = m_presentation.PresentationPart.GetIdOfPart(slidePart);
m_presentation.PresentationPart.Presentation.Save();
}
我這麼想嗎?也許關係?在查看了232243000個不同的例子之後,我仍然停留在這一點上。謝謝!
我不嘗試從頭開始編寫代碼的OpenXML ---像這樣的問題太多,太一些很好的文檔。我使用PowerPoint生成一個.pptx文件,該文件看起來像我想要的示例,然後使用OpenXML生產力工具生成C#代碼。我逐漸地,經常進行測試,將代碼變成我想要的。無論什麼時候停止工作,我都會撤消,看看有什麼不同。知道到目前爲止,PowerPoint的山羊已經發生了什麼變化,足以讓我發現我的錯誤。 – 2013-03-30 00:49:53
你知道了嗎?遇到類似的問題。 – tr4nc3 2014-01-28 14:14:07