使用演示文稿幻灯片
本主题讨论 Open XML SDK for Office 幻灯片 类及其与 Open XML 文件格式 PresentationML 架构的关系。 有关构成 PresentationML 文档的部件和元素的整体结构的详细信息,请参阅 PresentationML 文档的结构**。
PresentationML 中的演示文稿幻灯片
ISO/IEC 29500 规范描述了 Open XML PresentationML <sld> 元素,该元素用于表示 PresentationML 文档中的演示文稿幻灯片,如下所示:
此元素在幻灯片列表中指定幻灯片。 幻灯片列表用于指定幻灯片的顺序。
示例:请考虑对幻灯片进行排序的以下自定义放映。
<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>
在上面的示例中,指定的演示幻灯片的顺序为先是幻灯片 4,然后是 3、2,最后是 5。
© ISO/IEC29500: 2008.
<sld> 元素是 PresentationML 幻灯片部件的根元素。 有关构成 PresentationML 文档的部件和元素的整体结构的详细信息,请参阅 PresentationML 文档的结构。
下表列出了使用演示文稿幻灯片时使用的 sld> 元素的<子元素以及与之对应的 Open XML SDK 类。
PresentationML 元素 | Open XML SDK 类 |
---|---|
<clrMapOvr> | ColorMapOverride |
<Csld> | CommonSlideData |
<extLst> | ExtensionListWithModification |
<时间> | Timing |
<过渡> | Transition |
Open XML SDK 幻灯片类
Open XML SDKSlide 类表示 <在 PresentationML 文档的 Open XML 文件格式架构中定义的 sld> 元素。 使用 Slide 对象可操作 PresentationML 文档中的各个 <sld> 元素。
通常与 Slide 类相关联的类在以下各节中说明。
ColorMapOverride 类
ColorMapOverride 类对应于 <clrMapOvr> 元素。 ISO/IEC 29500 规范中的以下信息介绍了 <clrMapOvr> 元素:
此元素提供一种机制,用于替代 ClrMap> 元素中列出的<配色方案。 <如果存在 masterClrMapping> 子元素,则使用主控形状定义的配色方案。 <如果 overrideClrMapping> 子元素存在,它将定义特定于父备注幻灯片、演示文稿幻灯片或幻灯片版式的新配色方案。
© ISO/IEC29500: 2008.
CommonSlideData 类
CommonSlideData 类对应于 <cSld> 元素。 ISO/IEC 29500 规范中的以下信息介绍了 <cSld> 元素:
此元素指定与所有幻灯片类型相关的幻灯片信息类型的容器。 所有幻灯片共享一组独立于幻灯片类型的通用属性;任何特定幻灯片的这些属性的说明存储在幻灯片的 <cSld> 容器中。 由父元素指明的特定于幻灯片类型的幻灯片数据存储在其他位置。
cSld> 中<的实际数据仅描述特定的父幻灯片;它只是存储在所有幻灯片中通用的信息类型。
© ISO/IEC29500: 2008.
ExtensionListWithModification 类
ExtensionListWithModification 类对应于 <extLst>元素。 ISO/IEC 29500 规范中的以下信息介绍了 <extLst> 元素:
此元素指定具有修改能力的扩展列表,在该列表中定义元素类型 <ext> 的所有未来扩展。 扩展列表以及相应的未来扩展用于扩展 PresentationML 框架的存储功能。 这允许在框架中本机存储各种新类型的数据。
[注意:使用此 extLst 元素,生成应用程序可以存储有关此扩展属性是否已修改的相关信息。 注释结束]
© ISO/IEC29500: 2008.
Timing 类
Timing 类对应于<计时>元素。 ISO/IEC 29500 规范中的以下信息介绍了<计时>元素:
此元素指定用于处理对应幻灯片中的所有动画和定时事件的计时信息。 此信息通过计时>元素中的<时间节点进行跟踪。 有关这些时间节点及其定义方式的详细信息,请参阅 PresentationML 框架中的"动画"部分。
© ISO/IEC29500: 2008.
Transition 类
Transition 类对应于<转换>元素。 ISO/IEC 29500 规范中的以下信息介绍了<转换>元素:
此元素指定应该用于从前一幻灯片切换到当前幻灯片的幻灯片切换类型。 也就是说,切换信息存储在切换完成后显示的幻灯片中。
© ISO/IEC29500: 2008.
处理幻灯片类
如下面的 Open XML SDK 代码示例所示, Slide 类的每个实例都与 SlidePart 类的一个实例相关联,该实例表示幻灯片部件,这是 PresentationML 演示文稿文件包的必需部分之一。 Slide 类的每个实例还必须与 SlideLayout 和 SlideMaster 类的实例相关联,这些实例又与由 SlideLayoutPart 和 SlideMasterPart 类表示的类似名称必需的演示文稿部件相关联。
因此,代表 sld> 元素的 <Slide 类也与一系列表示 sld> 元素子<元素的其他类相关联。 如以下代码示例所示,这些类包括 CommonSlideData 类、 ColorMapOverride 类、 ShapeTree 类和 Shape 类。
Open XML SDK 代码示例
如何:通过提供文件名创建演示文稿文档一文中的以下方法将新的幻灯片部件添加到现有演示文稿,并在新幻灯片部件中创建 Open XML SDK Slide 类的实例。 Slide 类构造函数创建 CommonSlideData 和 ColorMapOverride 类的实例。 CommonSlideData 类构造函数创建 ShapeTree 类的实例,其构造函数反过来又创建其他类实例:NonVisualGroupShapeProperties 类、GroupShapeProperties 类和 Shape 类的实例。
所有这些类实例和类实例(表示 sld> 元素的<子元素)都需要创建表示新幻灯片所需的最小 XML 元素数。
代码中由字母 P 表示的命名空间是 DocumentFormat.OpenXml.Presentation 命名空间。
private static SlidePart CreateSlidePart(PresentationPart presentationPart)
{
SlidePart slidePart1 = presentationPart.AddNewPart<SlidePart>("rId2");
slidePart1.Slide = new Slide(
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 1" },
new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
new P.ShapeProperties(),
new P.TextBody(
new BodyProperties(),
new ListStyle(),
new Paragraph(new EndParagraphRunProperties() { Language = "en-US" }))))),
new ColorMapOverride(new MasterColorMapping()));
return slidePart1;
}
若要向形状树并因此向幻灯片中添加其他形状,请通过向 ShapeTree 构造函数传递包含以下代码的其他参数来实例化第二个 Shape 对象。
new P.Shape(
new P.NonVisualShapeProperties(
new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
new P.ShapeProperties(),
new P.TextBody(
new BodyProperties(),
new ListStyle(),
new Paragraph(new EndParagraphRunProperties() { Language = "en-US" })))
生成的 PresentationML
当运行方法中的 Open XML SDK 代码时,会将以下 XML 代码写入代码中引用的 PresentationML 文档文件。
<?xml version="1.0" encoding="utf-8" ?>
<p:sld xmlns:p="https://schemas.openxmlformats.org/presentationml/2006/main">
<p:cSld>
<p:spTree>
<p:nvGrpSpPr>
<p:cNvPr id="1" name="" />
<p:cNvGrpSpPr />
<p:nvPr />
</p:nvGrpSpPr>
<p:grpSpPr>
<a:xfrm xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:grpSpPr>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title 1" />
<p:cNvSpPr>
<a:spLocks noGrp="1" xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:cNvSpPr>
<p:nvPr>
<p:ph />
</p:nvPr>
</p:nvSpPr>
<p:spPr />
<p:txBody>
<a:bodyPr xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
<a:lstStyle xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
<a:p xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main">
<a:endParaRPr lang="en-US" />
</a:p>
</p:txBody>
</p:sp>
</p:spTree>
</p:cSld>
<p:clrMapOvr>
<a:masterClrMapping xmlns:a="https://schemas.openxmlformats.org/drawingml/2006/main" />
</p:clrMapOvr>
</p:sld>