Перечисление слайдов PowerPoint по порядку

Я пытаюсь проанализировать существующую PowerPoint 2010 .pptx файл с использованием OpenXML SDK 2.0.

Чего я пытаюсь добиться, так это

  • Перечислите слайды по порядку (как они появляются в PPTX)
  • извлечение всех текстовых битов из каждого слайда

Я начал и получил так далеко - я могу перечислить SlideParts от PresentationPart - но я не могу найти способ сделать это упорядоченным перечислением - слайды возвращаются в произвольном порядке...

Любой прием, чтобы получить эти слайды в порядке, определенном в файле PPTX?

using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
   // Get the presentation part of the document.
   PresentationPart presentationPart = doc.PresentationPart;

   foreach (var slide in presentationPart.SlideParts)
   {
        ...
   }
}

Я надеялся найти что-то вроде SlideID или же Sequence число или что-то - некоторый элемент или свойство, которое я мог бы использовать в выражении Linq, как

.OrderBy(s => s.SlideID)

на этой коллекции слайд-частей.

2 ответа

Решение

Это немного сложнее, чем я ожидал - и документы иногда немного отрывочны....

В основном мне пришлось перечислить SlideIdList на PresentationPart и сделать немного XML-фу, чтобы получить от этого SlideId к фактическому слайду в презентации OpenXML.

Что-то вроде:

using (PresentationDocument doc = PresentationDocument.Open(fileName, false))
{
    // Get the presentation part of the document.
    PresentationPart presentationPart = doc.PresentationPart;

    // get the SlideIdList
    var items = presentationPart.Presentation.SlideIdList;

    // enumerate over that list
    foreach (SlideId item in items)
    {
        // get the "Part" by its "RelationshipId"
        var part = presentationPart.GetPartById(item.RelationshipId);

        // this part is really a "SlidePart" and from there, we can get at the actual "Slide"
        var slide = (part as SlidePart).Slide;

        // do more stuff with your slides here!
    }
}

Самым близким, что я нашел, был этот фрагмент:

[ИСО / МЭК 29500-1, 1-е издание]

sld (слайд презентации)

Этот элемент определяет слайд в списке слайдов. Список слайдов используется для указания порядка слайдов.

[Пример: рассмотрим следующее пользовательское шоу с упорядочением слайдов.

<p:custShowLst>
  <p:custShow name="Custom Show 1" id="0">
    <p:sldLst>
      <p:sld r:id="rId4"/>
      <p:sld r:id="rId3"/>
      <p:sld r:id="rId2"/>
      <p:sld r:id="rId5"/>
    </p:sldLst>
  </p:custShow>
</p:custShowLst>In the above example the order specified to present the slides is slide 4, then 3, 2 and finally 5. end example]

В документации MSDN для slide учебный класс

Кажется, что слайды имеют r:id формы rId## где ## - номер слайда. Может быть, этого достаточно, чтобы вы снова пошли?

Другие вопросы по тегам