Как удалить слайд из презентации (пакет Open XML SDK)
В этом разделе показано, как использовать пакет Open XML SDK 2.5 для Office для удаления слайда из презентации программными средствами. Также показано каким образом можно удалить все ссылки на слайд из произвольных показов, которые могут существовать. Чтобы удалить определенный слайд в файле презентации необходимо знать в самом начале число слайдов в презентации. Поэтому код, приведенный в данном практическом руководстве, состоит из двух частей. Первый подсчитывает число слайдов, а второй удаляет слайд с указанным индексом.
Для удаления слайда из более сложных презентаций, например содержащих параметры режима структуры, могут потребоваться дополнительные действия.
Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.
Получение объекта Presentation
Класс пакета Open XML SDK PresentationDocument представляет пакет документов презентации. Для работы с документом презентации сначала создайте экземпляр класса PresentationDocument, а затем работайте с этим экземпляром. Чтобы создать экземпляр класса на основе документа, вызывается один из методов Open(). В этом разделе код использует метод PresentationDocument.Open (String, Boolean), который принимает путь к файлу в качестве первого параметра, чтобы указать файл, чтобы открыть и логическое значение, в качестве второго параметра для указания, можно ли редактировать документ. Установите для этого второго параметра значение false, чтобы открыть файл, доступный только для чтения, или значение true, чтобы открыть файл, доступный для чтения и записи. В этом разделе код открывает файл дважды, один раз, чтобы подсчитать число слайдов и один раз, чтобы удалить определенный слайд. После определения числа слайдов в презентации, лучше всего откройте файл, доступный только для чтения, для защиты от случайного записи файла. Следующий оператор using откроется в файле, доступном только для чтения. В этом коде, параметр presentationFile — это строка, представляющая путь к файлу, из которого требуется открыть документ.
Для удаления слайда из файла презентации откройте его с доступом для чтения и записи, как показано в следующем операторе using.
Рекомендуется использовать оператор using вместо традиционной последовательности .Open, .Save, .Close. Это позволяет убедиться в том, что метод Dispose (внутренний метод, используемый пакетом Open XML SDK для очистки ресурсов) автоматически вызывается при обнаружении закрывающей скобки. Блок после оператора using создает область для объекта, создаваемого или именуемого в операторе using , в данном случае — presentationDocument.
Стандартная структура документа презентации
Стандартная структура документа PresentationML состоит из основной части, в которой содержится определение презентации. В следующем фрагменте спецификации ISO/IEC 29500 представлена общая форма пакета PresentationML.
Основная часть пакета PresentationML начинается с корневого элемента презентации. Этот элемент содержит презентацию, которая в свою очередь ссылается на список слайдов**, списокобразцов слайдов, список образцов заметок, а также списокобразцов раздаточных материалов. Список слайдов ссылается на все слайды в презентации; список образцов слайдов ссылается на все образцы слайдов, используемые в презентации; образец заметок содержит сведения о форматировании страниц заметок; и образец раздаточных материалов описывает, как выглядят раздаточные материалы.
Раздаточные материалы представляют набор распечатанных слайдов, которые можно раздать в аудитории для последующего использования.
Наряду с текстом и изображениями, каждый слайд может содержать комментарии и заметки, а также макет, входить в одну или несколько настраиваемых презентаций. (Комментарий представляет собой заметку, которая адресована сотруднику, ответственному за обслуживание набора слайдов. Заметка представляет собой напоминание или отрывок текста, предназначенные для докладчика или аудитории).
Документ PresentationML также может содержать следующие элементы: анимацию, аудио, видео и переходы между слайдами.
Документ PresentationML не хранится как единое целое. Элементы с определенной группировкой функций хранятся в различных частях. Например, все комментарии документа хранятся в части комментариев, а каждый слайд представляет собой отдельную часть.
© ISO/IEC29500: 2008.
Следующий сегмент кода XML описывает презентацию, содержащую два слайда с идентификаторами 267 и 256.
С помощью Open XML SDK 2.5 можно создать структуру и содержимое документа с использованием строго типизированных классов, соответствующих элементам PresentationML. Эти классы можно найти в пространстве имен DocumentFormat.OpenXml.Presentation В приведенных ниже табличных списках перечислены имена классов, соответствующих элементам sld, sldLayout, sldMaster и notesMaster.
Элемент PresentationML Класс пакета Open XML SDK 2.5 Описание sld Слайд Слайд презентации. Это корневой элемент SlidePart. sldLayout SlideLayout Разметка слайда. Это — корневой элемент SlideLayoutPart. sldMaster SlideMaster Образец слайда. Это корневой элемент SlideMasterPart. notesMaster NotesMaster Образец заметок (или handoutMaster). Это корневой элемент части NotesMasterPart.
Подсчет количества слайдов
Пример кода содержит две перегрузки метода CountSlides. В первом перегруженном методе используется параметр типа string, во втором — параметр PresentationDocument. В первом методе CountSlides код открывает документ презентации в инструкции using. Затем объект PresentationDocument передается второму методу CountSlides, который возвращает целое число, представляющее количество слайдов в презентации.
Во втором методе CountSlides выполняется проверка того, что переданный объект PresentationDocument не имеет значение null, и если он не имеет значение null, то выполняется получение объекта PresentationPart из объекта PresentationDocument. Используя SlideParts, код получает объект slideCount и возвращает его.
Удаление определенного слайда
В коде для удаления слайда используются две перегрузки метода DeleteSlide. Первый перегруженный метод DeleteSlide принимает два параметра: строку, представляющую имя и путь файла, а также целое число, представляющее текущее значение индекса слайда, который нужно удалить. Он открывает файл презентации с доступом для чтения и записи, получает объект PresentationDocument и затем передает его и целое число следующему перегруженному методу DeleteSlide, который удаляет слайд.
В первом разделе второго перегруженного метода DeleteSlide используется метод CountSlides для получения числа слайдов в презентации. Затем он получает список идентификаторов слайдов в презентации, находит указанный слайд в списке слайдов и удаляет его.
В следующем разделе второго перегруженного метода DeleteSlide удаляются все ссылки на удаленный слайд из раздела презентации. Для этого выполняется итерация по списку пользовательских презентаций и по списку слайдов в каждой пользовательской презентации. Затем объявляется связанный список записей списка слайдов и создается его экземпляр, после чего с помощью идентификатора связи удаленного слайда находятся ссылки на этот слайд. Эти ссылки добавляются в список записей слайдов, а затем каждая ссылка удаляется из списков слайдов соответствующих пользовательских презентаций.
В конце код сохраняет измененную презентацию и удаляет часть удаленного слайда.
Пример кода
Ниже приведен полный пример кода для двух перегруженных методовCountSlides и DeleteSlide. Для использования кода можно использовать следующий вызов в качестве примера для удаления слайду по индексу 2 в файле презентации «Myppt6.pptx.»
Можно также вызвать его следующим образом для определения числа слайдов в презентации.