Как: Открытие документа презентации с доступом только для чтения (Open XML SDK)
В этом разделе показано, как использовать классы в пакете Open XML SDK 2.5 для Office, чтобы открыть документ презентации программными средствами только для чтения.
Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.
Открытие файла с доступом только для чтения
Может возникнуть необходимость открыть презентацию для чтения ее слайдов, например для извлечения данных слайда, копирования слайда в библиотеку слайдов или создания списка заголовков слайдов. В подобных случаях необходимо защитить презентацию от изменений. Для этого можно открыть документ с доступом только для чтения. В этом разделе описывается несколько способов открытия презентации только для чтения программным путем.
Создание экземпляра класса PresentationDocument
В Open XML SDK класс PresentationDocument представляет пакет документов презентации. Для работы с документом презентации сначала создайте экземпляр класса PresentationDocument, а затем работайте с этим экземпляром. Создать экземпляр класса из документа можно с помощью одного из методов Open. Доступно несколько таких методов Open с разными подписями. В следующей таблице приведено подмножество перегрузок метода Open, которые можно использовать для открытия пакета.
Имя Описание Open(String, Boolean) Создание экземпляра класса PresentationDocument на основе указанного файла. Open(Stream, Boolean) Создание экземпляра класса PresentationDocument на основе потока ввода-вывода. Open(Package) Создание экземпляра класса PresentationDocument на основе указанного пакета.
В приведенной выше таблице два метода Open принимают в качестве второго параметра логическое значение, определяющее, можно ли изменять документ. Чтобы открыть документ в режиме доступа только для чтения, необходимо указать значение false для этого параметра.
К примеру, можно открыть файл презентации только для чтения и назначить его объекту PresentationDocument, как показано в следующей инструкции using. В этом коде параметр presentationFile — это строка, представляющая путь к файлу документа, который требуется открыть.
С помощью второго перегруженного метода Open из приведенной выше таблицы можно создать экземпляр класса PresentationDocument на основе потока ввода-вывода. Этот подход можно использовать в том случае, когда есть приложение Microsoft SharePoint Foundation 2010, которое использует поток ввода-вывода, и для работы с документом необходимо использовать Пакет SDK 2.5 Open XML. Следующий сегмент кода открывает документ на основе потока.
Представим, что есть приложение, использующее поддержку Open XML в пространстве имен System.IO.Packaging библиотеки классов .NET Framework, и нужно использовать SDK 2.5 Open XML для работы с пакетом в режиме доступа только для чтения. Open XML SDK 2.5 включает в себя перегрузку метода, которая принимает Package в качестве единственного параметра. Чтобы указать, следует ли открыть документ для редактирования, логического параметра нет. Перед созданием экземпляра класса PresentationDocument рекомендуется сначала открыть пакет только для чтения. Эту операцию выполняет следующий сегмент кода.
Стандартная структура документа презентации
Стандартная структура документа PresentationML состоит из нескольких частей, одной из которых является основная часть, содержащая определение презентации. В следующем фрагменте спецификации ISO/IEC 29500 представлена общая форма пакета PresentationML.
Основная часть пакета PresentationML начинается с корневого элемента презентации. Этот элемент содержит презентацию, которая, в свою очередь, ссылается на список слайдов, список образцов слайдов, список образцов заметок и список образцов раздаточных материалов. Список слайдов содержит ссылки на все слайды в презентации; список образцов слайдов содержит ссылки на все используемые в презентации образцы слайдов; образец заметок содержит сведения о форматировании страниц заметок; образец раздаточных материалов включает в себя описание внешнего вида раздаточных материалов.
Раздаточные материалы представляют набор распечатанных слайдов, которые можно раздать в аудитории для последующего использования.
Наряду с текстом и изображениями, каждый слайд может содержать комментарии, заметки и макет, а также может входить в одну или несколько настраиваемых презентаций. Комментарий является заметкой, предназначенной сотруднику, управляющему панелью слайдов презентации. Заметка — это напоминание или фрагмент текста, предназначенный для выступающего или аудитории.
Документ PresentationML также может содержать следующие элементы: анимацию, аудио, видео и переходы между слайдами.
Документ PresentationML не хранится как единое целое. Элементы с определенной группировкой функций хранятся в различных частях. Например, все комментарии документа хранятся в части комментариев, а каждый слайд представляет собой отдельную часть.
© ISO/IEC29500: 2008.
Следующий сегмент кода XML описывает презентацию, содержащую два слайда с идентификаторами 267 и 256. В свойстве ID указывается идентификатор слайда, значение которого уникально во всей презентации. Возможные значения этого атрибута находятся в диапазоне от 256 до 2147483647.
Как работает пример кода
В примере кода после открытия документа презентации в операторе using с доступом только для чтения создается экземпляр класса PresentationPart и открывается список слайдов. После этого извлекается идентификатор связи для первого слайда.
По этому идентификатору отношения relId извлекается часть слайда, а затем — внутренний текст слайда путем создания текстовой строки с помощью StringBuilder.
Внутренний текст слайда, представляющий собой параметр out метода GetSlideIdAndText, передается обратно основному методу для последующего отображения.
В данном примере выводится только текст в файле презентации. Нетекстовые элементы, например фигуры и изображения, не отображаются.
Пример кода
Следующий пример кода открывает файл презентации только для чтения и получает внутренний текст слайда по указанному индексу. Для вызова метода GetSlideIdAndText передайте полный путь к документу презентации. Также передайте методу выходной параметр sldText, которому будет присвоено значение в самом методе, после чего вы сможете отобразить его значение в основной программе. Например вызов метода GetSlideIdAndText получает внутренний текст второго слайда из файла презентации с именем «Myppt13.pptx».
Наиболее вероятным исключением в этой программе является исключение ArgumentOutOfRangeException. Оно может возникнуть, например, если в файле два слайда, а запрашивается текст слайда под номером 4. Таким образом, при вызове метода GetSlideIdAndText рекомендуется использовать блок try, как показано в приведенном ниже примере.