c# – 如何使用MS Open XML SDK检索一些图像数据和格式?
发布时间:2020-12-15 08:27:28 所属栏目:百科 来源:网络整理
导读:这是 How can I retrieve images from a .pptx file using MS Open XML SDK?的后续问题 我该如何检索: DocumentFormat.OpenXml.Presentation.Picture对象的图像数据? 图像名称和/或类型? 在比方说,如下: using (var doc = PresentationDocument.Open(ppt
这是
How can I retrieve images from a .pptx file using MS Open XML SDK?的后续问题
我该如何检索: > DocumentFormat.OpenXml.Presentation.Picture对象的图像数据? 在比方说,如下: using (var doc = PresentationDocument.Open(pptx_filename,false)) { var presentation = doc.PresentationPart.Presentation; foreach (SlideId slide_id in presentation.SlideIdList) { SlidePart slide_part = doc.PresentationPart.GetPartById(slide_id.RelationshipId) as SlidePart; if (slide_part == null || slide_part.Slide == null) continue; Slide slide = slide_part.Slide; foreach (var pic in slide.Descendants<Picture>()) { // how can one obtain the pic format and image data? } } } 我意识到我有点要求在这里找到烤箱外的答案,但我无法在任何地方找到足够好的文档来自行解决. 解决方法
首先,获取对Picture的ImagePart的引用. ImagePart类提供您要查找的信息.这是一个代码示例:
string fileName = @"c:tempmyppt.pptx"; using (var doc = PresentationDocument.Open(fileName,false)) { var presentation = doc.PresentationPart.Presentation; foreach (SlideId slide_id in presentation.SlideIdList) { SlidePart slide_part = doc.PresentationPart.GetPartById(slide_id.RelationshipId) as SlidePart; if (slide_part == null || slide_part.Slide == null) continue; Slide slide = slide_part.Slide; // from a picture foreach (var pic in slide.Descendants<Picture>()) { // First,get relationship id of image string rId = pic.BlipFill.Blip.Embed.Value; ImagePart imagePart = (ImagePart)slide.SlidePart.GetPartById(rId); // Get the original file name. Console.Out.WriteLine(imagePart.Uri.OriginalString); // Get the content type (e.g. image/jpeg). Console.Out.WriteLine("content-type: {0}",imagePart.ContentType); // GetStream() returns the image data System.Drawing.Image img = System.Drawing.Image.FromStream(imagePart.GetStream()); // You could save the image to disk using the System.Drawing.Image class img.Save(@"c:temptemp.jpg"); } } } 出于同样的原因,您还可以使用以下代码迭代SlidePart的所有ImagePart: // iterate over the image parts of the slide part foreach (var imgPart in slide_part.ImageParts) { Console.Out.WriteLine("uri: {0}",imgPart.Uri); Console.Out.WriteLine("content type: {0}",imgPart.ContentType); } 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |