dotnet OpenXML 的 Slide Master 和 Slide Layout 是什么

2023-11-03 04:40

本文主要是介绍dotnet OpenXML 的 Slide Master 和 Slide Layout 是什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来告诉大家在解析 PPT 文档的时候,元素继承以及占位符需要用到的 Slide Master 和 Slide Layout 是什么

在做 Office 解析的时候,小伙伴需要特别的去学习一下 Office 哦,不然有很多概念将会难以理解。而 Office 有多强?光属性定义加上注释的 C# 代码文件就有 15M 这么多

基本上所有市面上的解析 Office 的软件都只是实现很少的一部分功能…… 包括 WPS 在内

不愿透露姓名的小伙伴说: 其实并不是其他软件都实现了“ooxml 或 03 的二进制格式”很少的功能。实际上各家老牌办公文档厂商都有自己的办公文档协议,包括 WPS 也曾经出过自己的协议。对比其中公开的协议,微软对办公文档的定义其实对开放性是非常不友好的,对微软自家是非常友好的

回到主题,咱今天来聊聊 OpenXML 的 PPTX 文件的 Slide Master 和 Slide Layout 是什么。在开始之前期望小伙伴了解 PPT 的模版和占位符的作用,是真的需要小伙伴去学一下的哦。按照程序员的自学速度预计 10 分钟左右就能了解啦

来,先打开最新版本的 PPT 2013 新建一份空白的文档(最新版 2013 哈)实际上使用 2003 以上版本就可以

点击视图的模版

此时你就可以看到第一个大页面就是 Slide Master 页面,后续的每个页面就是 Slide Layout 页面。在 PPT文件中,可以创建多个母版 Slide Master 页面,每一个母版创建多个布局 Slide Layout 页面

在制作PPT时,依赖于不同的布局进行创建,不但减少了重复的工作量,也大大减少了PPT文件的体积

在渲染时,软件会依次在三个层级渲染母版,布局,页面中的元素。最终呈现的是三个层级叠加的显示

这里的 Slide Layout 的顺序和页面顺序对应,也就是一个页面对应一个 Slide Layout 页面,而所有页面都对应相同的一个 Slide Master 页面

所有页面的占位符和样式都会优先从页面对应的 Slide Layout 里面获取,如果获取不到就从 Slide Master 获取

在 PPTX 文件里面的存放如下

│  [Content_Types].xml
│
├─DocProps
│      App.xml
│      Core.xml
│      Thumbnail.jpeg
│
├─Ppt
│  │  Presentation.xml
│  │  PresProps.xml
│  │  TableStyles.xml
│  │  ViewProps.xml
│  │
│  ├─HandoutMasters
│  │  │  HandoutMaster1.xml
│  │  │
│  │  └─_rels
│  │          HandoutMaster1.xml.rels
│  │
│  ├─SlideLayouts
│  │  │  SlideLayout1.xml
│  │  │  SlideLayout2.xml
│  │  │
│  │  └─_rels
│  │          slideLayout1.xml.rels
│  │          slideLayout2.xml.rels
│  │
│  ├─SlideMasters
│  │  │  SlideMaster1.xml
│  │  │
│  │  └─_rels
│  │          SlideMaster1.xml.rels
│  │
│  ├─Slides
│  │  │  Slide1.xml
│  │  │
│  │  └─_rels
│  │          Slide1.xml.rels
│  │
│  ├─Theme
│  │      Theme1.xml
│  │      Theme2.xml
│  │
│  └─_rels
│          Presentation.xml.rels
│
└─_rels.rels

上面代码需要关注的是 SlideLayouts 和 SlideMasters 的文件

在代码里面可以通过页面获取页面使用的 SlideLayout 和 SlideMaster 使用 OpenXML SDK 不需要自己去处理这部分复杂的逻辑

            using (var presentationDocument =PresentationDocument.Open("test.pptx", false)){var presentationPart = presentationDocument.PresentationPart;foreach (var slidePart in presentationPart.SlideParts){var slide = slidePart.Slide;var slideLayoutPart = slidePart.SlideLayoutPart;var slideMasterPart = slideLayoutPart.SlideMasterPart;}}

获取元素可以使用下面方法

                foreach (var slidePart in presentationPart.SlideParts){var slide = slidePart.Slide;var slideLayoutPart = slidePart.SlideLayoutPart;var slideMasterPart = slideLayoutPart.SlideMasterPart;var textSlideLayout = slideLayoutPart.SlideLayout.Descendants<DocumentFormat.OpenXml.Drawing.Text>().First();Console.WriteLine(textSlideLayout);var textSlideMaster = slideMasterPart.SlideMaster.Descendants<DocumentFormat.OpenXml.Drawing.Text>().First();Console.WriteLine(textSlideMaster);}

也就是通过 presentationPart.SlideParts 可以获取所有页面,通过页面的 slidePart.SlideLayoutPart 可以获取对应的 Slide Layout 是哪个,不需要自己去写判断逻辑

通过 slideLayoutPart.SlideMasterPart 可以获取 Slide Master 是哪个,也不需要自己去写判断逻辑

如果依然不懂的话,请下载我放在 github 的代码,然后打开 test.pptx 文件,同时运行代码,看看输出的内容和对应的 PPT 界面显示的文本。另外推荐 dotnetCampus.OfficeDocumentZipper 工具,这个工具可以更好的协助小伙伴测试文档

2020-3-10-PPT文档解析之母版 - huangtengxiao

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

这篇关于dotnet OpenXML 的 Slide Master 和 Slide Layout 是什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/335657

相关文章

java线程深度解析(四)——并发模型(Master-Worker)

http://blog.csdn.net/daybreak1209/article/details/51372929 二、Master-worker ——分而治之      Master-worker常用的并行模式之一,核心思想是由两个进程协作工作,master负责接收和分配任务,worker负责处理任务,并把处理结果返回给Master进程,由Master进行汇总,返回给客

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

Dungeon Master -uva

一个简答的三维BFS遍历,我从中领悟到了惨痛的教训,关于栈的溢出!!! 不多说了。。郁闷 #include<stdio.h>#include<string.h>#include<stdlib.h>#define MAX_SIZE 50 + 10int Dung[MAX_SIZE][MAX_SIZE][MAX_SIZE];int time[MAX_SIZE][MAX_SIZE][M

Vulkan描述符、描述符Pool、Layout概念

1、DescriptorSetLayout为了组织和管理着色器资源(如缓冲区、纹理、采样器等),多个相同类型的Descriptor放在一个Layout中以优化GPU对资源的访问   //DescriptorSetLayout定义了哪些描述符Descriptor类型(Buffers、Textures、Samplers)可以包含在其中 VkDescriptorSetLayoutBinding

How to apply streaming in azure openai dotnet web application?

题意:"如何在 Azure OpenAI 的 .NET Web 应用程序中应用流式处理?" 问题背景: I want to create a web api backend that stream openai completion responses. "我想创建一个 Web API 后端,用于流式传输 OpenAI 的完成响应。" How can I apply the f

【POJ】3169 Layout 【HDU】3592 World Exhibition 差分约束

传送门:  【POJ】3169 Layout、【HDU】3592 World Exhibition 题目分析:我会说我只是凭直觉写的吗。。。。。。。 如果有B-A>=C形式的,则建边(B,A,-C)。 如果有B-A<=C形式的,则建边(A,B,C)。 对所有的点X,建边(X,X-1,0)。 最后跑一遍最短路。如果存在负环输出-1,如果点N不可达输出-2,否则输出点N的值(最短路径长

Scala界面Panel、Layout初探

示例代码: package com.dt.scala.guiimport scala.swing.SimpleSwingApplicationimport scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientationimport scal

idea向git上推送被拒绝 push to master was rejected

当你在尝试将代码推送到远程仓库(如 GitHub、GitLab 或 Bitbucket)的 origin/master 分支时遇到“Pushrejected: Push to origin/master was rejected”这样的错误,这意味着远程仓库对你的推送请求进行了一些限制或者你的本地仓库与远程仓库的状态不一致。 1. 远程分支保护 许多仓库(尤其是主分支,如 master

B站视频自动驾驶master(1)

apollo Planning规划模块大详解,学会应对所有疑难场景_哔哩哔哩_bilibili