Как я могу получить изображения из файла .pptx, используя MS Open XML SDK? - PullRequest
5 голосов
/ 16 августа 2011

Я начал экспериментировать с Open XML SDK 2.0 для Microsoft Office .

В настоящее время я могу выполнять определенные действия, например получать все тексты на каждом слайде и получатьпрезентация.Например, я делаю последнее следующим образом:

using (var doc = PresentationDocument.Open(pptx_filename, false)) {
     var presentation = doc.PresentationPart.Presentation;

     Debug.Print("width: " + (presentation.SlideSize.Cx / 9525.0).ToString());
     Debug.Print("height: " + (presentation.SlideSize.Cy / 9525.0).ToString());
}

Теперь я хотел бы получить встроенные изображения на данном слайде.Кто-нибудь знает, как это сделать, или может указать мне несколько документов на эту тему?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Сначала вам нужно взять SlidePart, в котором вы хотите получить изображения:

public static SlidePart GetSlidePart(PresentationDocument presentationDocument, int slideIndex)
{
    if (presentationDocument == null)
    {
        throw new ArgumentNullException("presentationDocument", "GetSlidePart Method: parameter presentationDocument is null");
    }

    // Get the number of slides in the presentation
    int slidesCount = CountSlides(presentationDocument);

    if (slideIndex < 0 || slideIndex >= slidesCount)
    {
        throw new ArgumentOutOfRangeException("slideIndex", "GetSlidePart Method: parameter slideIndex is out of range");
    }

    PresentationPart presentationPart = presentationDocument.PresentationPart;

    // Verify that the presentation part and presentation exist.
    if (presentationPart != null && presentationPart.Presentation != null)
    {
        Presentation presentation = presentationPart.Presentation;

        if (presentation.SlideIdList != null)
        {
            // Get the collection of slide IDs from the slide ID list.
            var slideIds = presentation.SlideIdList.ChildElements;

            if (slideIndex < slideIds.Count)
            {
               // Get the relationship ID of the slide.
               string slidePartRelationshipId = (slideIds[slideIndex] as SlideId).RelationshipId;

                // Get the specified slide part from the relationship ID.
                SlidePart slidePart = (SlidePart)presentationPart.GetPartById(slidePartRelationshipId);

                 return slidePart;
             }
         }
     }

     // No slide found
     return null;
}

Затем вам нужно найти объект Picture, который будет содержать искомое изображение, основываясь на имени файла изображения:

Picture imageToRemove = slidePart.Slide.Descendants<Picture>().SingleOrDefault(picture => picture.NonVisualPictureProperties.OuterXml.Contains(imageFileName));
0 голосов
/ 10 января 2014

Простейший способ получения изображений из форматов Openxml:

Используйте любую библиотеку zip-архива для извлечения изображений из медиа-папки файла pptx.Это будет содержать изображения в документе.Точно так же вы можете вручную заменить расширение .pptx на .zip и распаковать его, чтобы получить изображения из папки мультимедиа.

Надеюсь, это поможет.

...