Поделиться через


Работа с образцами слайдов

В этом разделе рассматривается класс Open XML SDK для Office SlideMaster и его связь со схемой PresentationML формата файла Open XML.

Образцы слайдов в PresentationML

Спецификация ISO/IEC 29500 описывает элемент Open XML PresentationML <sldMaster/> , используемый для представления макетов слайдов в документе PresentationML следующим образом.

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

Элемент <sldMaster/> является корневым элементом части PresentationML Slide Master. Дополнительные сведения об общей структуре частей и элементов документа PresentationML см. в разделе Структура документа PresentationML.

В следующей таблице перечислены дочерние элементы элемента, <sldMaster/> используемые при работе с образцами слайдов, и соответствующие им классы пакета SDK Open XML.

Элемент PresentationML Класс пакета SDK Open XML
<clrMap/> ColorMap
<cSld/> CommonSlideData
<extLst/> ExtensionListWithModification
<hf/> HeaderFooter
<sldLayoutIdLst/> SlideLayoutIdList
<timing/> Timing
<transition/> Transition
<txStyles/> TextStyles

В следующей таблице из спецификации ISO/IEC 29500 (Возможно, на английском языке) представлено описание атрибутов элемента <sldMaster/>.

Атрибуты Описание
preserve (сохранять образец слайда) Указывает, удаляется ли соответствующий макет слайда при удалении всех слайдов с данным макетом. Если этот атрибут не указан, то создаваемое приложение должно принимать значение false . Это означает, что макет слайда будет удален, если с ним не связан ни один слайд в презентации.
Возможные значения для этого атрибута определяются типом данных схемы Boolean XML W3C.

Класс SlideMaster пакета SDK Open XML

Класс Open XML SDKSlideMaster представляет элемент, определенный <sldMaster/> в схеме формата файлов Open XML для документов PresentationML. Используйте класс для SlideMaster управления отдельными <sldMaster/> элементами в документе PresentationML.

Классы, представляющие дочерние <sldMaster/> элементы элемента и поэтому обычно связанные с классом SlideMaster , показаны в следующем списке.

Класс ColorMapOverride

Класс ColorMapOverride соответствует элементу <clrMapOvr/> . Этот элемент представлен <clrMapOvr/> в следующей информации из спецификации ISO/IEC 29500:

Этот элемент предоставляет механизм, с помощью которого можно переопределить цветовые схемы, перечисленные в элементе <ClrMap/> . Если дочерний <masterClrMapping/> элемент присутствует, используется цветовая схема, определенная master. Если дочерний <overrideClrMapping/> элемент присутствует, он определяет новую цветовую схему, относясь к родительскому слайду заметок, слайду презентации или макету слайда.

Класс CommonSlideData

Класс CommonSlideData соответствует элементу <cSld/> . Этот элемент представлен <cSld/> в следующей информации из спецификации ISO/IEC 29500:

Этот элемент задает контейнер для сведений о слайде, которые применимы ко всем типам слайдов. Все слайды имеют общий набор свойств, не зависящих от типа слайда; описание этих свойств для любого конкретного слайда хранится в контейнере слайда <cSld/> . Сведения о слайде для конкретного типа слайда, определенного родительским элементом, хранятся в другом месте.

Фактические данные в <cSld/> описывают только конкретный родительский слайд; это только тип хранимой информации, который является общим для всех слайдов.

Класс ExtensionListWithModification

Класс ExtensionListWithModification соответствует элементу <extLst/>. Этот элемент представлен <extLst/> в следующей информации из спецификации ISO/IEC 29500:

Этот элемент задает список расширений с возможностью изменения, в котором определяются все будущие расширения типа <ext/> элемента. Список расширений вместе с соответствующими будущими расширениями используется для расширения возможностей хранения инфраструктуры PresentationML. Это обеспечивает встроенную возможность хранения новых типов данных в инфраструктуре.

Примечание.

Использование этого элемента extLst позволяет создаваемому приложению сохранить, было ли изменено это свойство расширения.

Класс HeaderFooter

Класс HeaderFooter соответствует элементу <hf/> . Этот элемент представлен <hf/> в следующей информации из спецификации ISO/IEC 29500:

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

Класс SlideLayoutIdList

Класс SlideLayoutIdList соответствует элементу <sldLayoutIdLst/> . Этот элемент представлен <sldLayoutIdLst/> в следующей информации из спецификации ISO/IEC 29500:

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

Класс Timing

Класс Timing соответствует элементу <timing/> . Этот элемент представлен <timing/> в следующей информации из спецификации ISO/IEC 29500:

В этом элементе задаются данные хронометража для обработки анимации и событий с привязкой по времени внутри соответствующего слайда. Эти сведения отслеживаются с помощью узлов времени в элементе <timing/> . Дополнительные сведения о характеристиках таких узлов времени и способах их определения можно найти в разделе "Анимация" инфраструктуры PresentationML.

Класс Transition

Класс Transition соответствует элементу <transition/> . Этот элемент представлен <transition/> в следующей информации из спецификации ISO/IEC 29500:

В этом элементе задается тип перехода, который должен использоваться для перехода к текущему слайду от предыдущего. То есть данные о переходе хранятся на слайде, который появляется после завершения перехода.

Класс TextStyles

Класс TextStyles соответствует элементу <txStyles/> . Этот элемент представлен <txStyles/> в следующей информации из спецификации ISO/IEC 29500:

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

Рассмотрим случай, когда мы хотели бы указать текст заголовка для master слайда.

<p:txStyles>  
    <p:titleStyle>
        <a:lvl1pPr algn="ctr" rtl="0" latinLnBrk="0">  
            <a:spcBef>  
                <a:spcPct val="0"/>  
            </a:spcBef>  
            <a:buNone/>  
            <a:defRPr sz="4400" kern="1200">  
                <a:solidFill>
                    <a:schemeClr val="tx1"/>  
                </a:solidFill>  
                <a:latin typeface="+mj-lt"/>  
                <a:ea typeface="+mj-ea"/>  
                <a:cs typeface="+mj-cs"/>  
            </a:defRPr>  
        </a:lvl1pPr>  
    </p:titleStyle>  
</p:txStyles>

В предыдущем примере текст заголовка задается в соответствии с приведенным выше форматированием для всех связанных слайдов в презентации.

Работа с классом SlideMaster

Как показано в следующем примере кода пакета SDK для Open XML, каждый экземпляр SlideMaster класса связан с экземпляром SlideMasterPart класса , который представляет слайд master часть, которая является одной из обязательных частей пакета файла презентации PresentationML. Каждый SlideMaster экземпляр класса также должен быть связан с экземплярами SlideLayout классов и Slide , которые, в свою очередь, связаны с аналогичными именоваемыми обязательными частями представления, представленными классами SlideLayoutPart и SlidePart .

Таким SlideMaster образом, класс, представляющий <sldMaster/> элемент, также связан с рядом других классов, представляющих дочерние элементы <sldMaster/> элемента . Среди этих классов, как показано в следующем примере кода, есть CommonSlideData класс, ColorMap класс, ShapeTree класс и Shape класс .

Пример кода Open XML SDK

Следующий метод из статьи Практическое руководство. Создание документа презентации путем предоставления имени файла добавляет новую часть slidemaster в существующую презентацию и создает экземпляр класса Open XML SDK SlideMaster в новой части слайда master. Конструктор SlideMaster класса создает экземпляры CommonSlideData класса и ColorMapклассов , SlideLayoutIdListи TextStyles . Конструктор CommonSlideData класса создает экземпляр ShapeTree класса, конструктор которого, в свою очередь, создает дополнительные экземпляры класса: экземпляр NonVisualGroupShapeProperties класса, экземпляр GroupShapeProperties класса и экземпляр Shape класса и т. д.

Пространство имен, представленное буквой P в коде, является пространством имен.

static SlideMasterPart CreateSlideMasterPart(SlideLayoutPart slideLayoutPart1)
{
    SlideMasterPart slideMasterPart1 = slideLayoutPart1.AddNewPart<SlideMasterPart>("rId1");
    SlideMaster slideMaster = new SlideMaster(
    new CommonSlideData(new ShapeTree(
      new P.NonVisualGroupShapeProperties(
      new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
      new P.NonVisualGroupShapeDrawingProperties(),
      new ApplicationNonVisualDrawingProperties()),
      new GroupShapeProperties(new TransformGroup()),
      new P.Shape(
      new P.NonVisualShapeProperties(
        new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title Placeholder 1" },
        new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
        new ApplicationNonVisualDrawingProperties(new PlaceholderShape() { Type = PlaceholderValues.Title })),
      new P.ShapeProperties(),
      new P.TextBody(
        new BodyProperties(),
        new ListStyle(),
        new Paragraph())))),
    new P.ColorMap() { Background1 = D.ColorSchemeIndexValues.Light1, Text1 = D.ColorSchemeIndexValues.Dark1, Background2 = D.ColorSchemeIndexValues.Light2, Text2 = D.ColorSchemeIndexValues.Dark2, Accent1 = D.ColorSchemeIndexValues.Accent1, Accent2 = D.ColorSchemeIndexValues.Accent2, Accent3 = D.ColorSchemeIndexValues.Accent3, Accent4 = D.ColorSchemeIndexValues.Accent4, Accent5 = D.ColorSchemeIndexValues.Accent5, Accent6 = D.ColorSchemeIndexValues.Accent6, Hyperlink = D.ColorSchemeIndexValues.Hyperlink, FollowedHyperlink = D.ColorSchemeIndexValues.FollowedHyperlink },
    new SlideLayoutIdList(new SlideLayoutId() { Id = (UInt32Value)2147483649U, RelationshipId = "rId1" }),
    new TextStyles(new TitleStyle(), new BodyStyle(), new OtherStyle()));
    slideMasterPart1.SlideMaster = slideMaster;

    return slideMasterPart1;
}