Как переместить абзац из одной презентации в другую (Open XML SDK)

Как переместить абзац из одной презентации в другую (Open XML SDK)

В этом разделе описывается процесс использования классов в Open XML SDK 2.5 для Office, чтобы переместить абзац из одной презентации в другую с помощью программных средств.

Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.

Получение объекта PresentationDocument

В Open XML SDK класс PresentationDocument представляет пакет документов презентации. Для работы с документом презентации сначала необходимо создать экземпляр класса PresentationDocument, а затем использовать этот экземпляр. Для создания экземпляра класса из документа следует применить метод Open(String, Boolean), который использует путь к файлу и логическое значение (Boolean) в качестве второго параметра, чтобы указать, является ли документ редактируемым. Чтобы открыть документ для чтения и записи, присвойте данному параметру значение true согласно инструкциям в следующей выписке using. В этом коде параметр file это — строка, представляющая собой путь к файлу, откуда требуется открыть документ.

Рекомендуется использовать оператор using вместо традиционной последовательности .Open, .Save, .Close. Это позволяет обеспечить автоматический вызов метода Dispose (внутреннего метода, используемого пакетом SDK Open XML для очистки ресурсов) при достижении закрывающей скобки. Блок, следующий за оператором using, создает область для объекта, создаваемого или именуемого в операторе using, в данном случае — doc.

Стандартная структура документа презентации

Стандартная структура документа 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.

Структура текстовой части фигуры

В следующем фрагменте спецификации ISO/IEC 29500 представлена структура данного элемента.

Этот элемент определяет существование текста в соответствующей фигуре. Весь видимый текст и свойства видимого текста содержатся в этом элементе. В нем может быть несколько абзацев, а в них — несколько пробегов текста.

© ISO/IEC29500: 2008.

В следующей таблице представлены дочерние элементы текстовой части фигуры и описание каждого из них.

Дочерний элемент Описание bodyPr Свойства тела сообщения lstStyle Стили текстового списка p Текстовые абзацы

Следующий фрагмент схемы XML определяет содержимое этого элемента:

Механизм работы примера кода

Код в этом разделе состоит из двух методов, MoveParagraphToPresentation и GetFirstSlide. Первый метод принимает два строковых параметра: один представляет исходный файл, который содержит перемещаемый абзац; второй представляет конечный файл, в который абзац перемещается. Этот метод открывает оба файла презентаций и вызывает метод GetFirstSlide для получения первого слайда в каждом файле. Затем метод получает первую фигуру TextBody в каждом слайде и первый абзац в исходной фигуре. Выполняется клонирование исходного абзаца, при этом копируется не только исходный объект Paragraph, но и все его содержимое, включая текст. Затем метод вставляет клонированный абзац в конечный файл и удаляет исходный абзац из исходного файла, заменяя его на абзац заполнителя. Затем измененные слайды сохраняются в обеих презентациях.

Метод GetFirstSlide принимает переданный объект PresentationDocument, получает часть презентации и затем получает идентификатор первого слайда из списка слайдов. Затем метод получает идентификатор связи слайда, получает часть слайда из идентификатора связи и возвращает часть слайда вызывающему методу.

Пример кода

Переместить абзац из одной презентации в другую можно с помощью данного примера кода. В программе можно использовать следующий метод MoveParagraphToPresentation для перемещения первого абзаца из файла презентации «Myppt4.pptx» в файл презентации «Myppt12.pptx».

После запуска программы просмотрите содержимое исходного и конечного файла и найдите перемещенный абзац.

📎📎📎📎📎📎📎📎📎📎