zoukankan      html  css  js  c++  java
  • 使用 Aspose.Slide 获取PPT中的所有幻灯片的标题

    本文使用的是第三方类库 Aspose.Slide,如果你使用的是OpenXml可以看下面的链接,原理是相同的,这个文章里也有对Xml标签的详细解释。

    如何:获取演示文稿中的所有幻灯片的标题

    原理:

      原理说白了很简单,明白了原理大家都写得出来。

      简单说,一个PPT里有多个幻灯片,一个幻灯片里有多个Shape, Shape会有一个Plcaeholder,Placeholder的Type属性来决定是否是标题。

      Aspose的对像 IPresentation->Slide->Shape->PlaceHolder

    代码:

    判断Shape是一个Title,采用了扩展方法的方式:

        public static class ShapeExtension
        {
            public static bool IsTitleShape(this IShape p_shape)
            {
                if (p_shape == null)
                {
                    return false;
                }
    
                var placeholder = p_shape.Placeholder;
                if (placeholder != null)
                {
                    switch (placeholder.Type)
                    {
                        // Any title shape.
                        case PlaceholderType.Title:
                        // A centered title.
                        case PlaceholderType.CenteredTitle:
                            return true;
    
                        default:
                            return false;
                    }
                }
    
                return false;
            }
        }
    View Code

    我们定义一个SlideTitle来存放

        public class SlideTitle
        {
            public int PageNum { get; set; }
    
            public int TitleCount { get; set; }
    
            public string[] Titles { get; set; }
        }
    View Code

    再扩展IPresentation对象,增加一个GetTitles的方法

        public static class PresentationExtension
        {
            public static IEnumerable<SlideTitle> GetTitles(this IPresentation p_presentation)
            {
                var presentation = p_presentation;
                if (presentation != null)
                {
                    foreach (var slide in presentation.Slides)
                    {
                        List<string> titles = new List<string>();
    
                        foreach (var shape in slide.Shapes)
                        {
                            if (!shape.IsTitleShape())
                            {
                                continue;
                            }
    
                            var autoShape = shape as AutoShape;
                            if (autoShape == null)
                            {
                                continue;
                            }
    
                            titles.Add(autoShape.TextFrame.Text);
                        }
    
                        var title = new SlideTitle()
                        {
                            PageNum = slide.SlideNumber,
                            TitleCount = titles.Count,
                            Titles = titles.ToArray()
                        };
    
                        yield return title;
                    }
                }
            }
        }

    总结:

      这东西本身,很简单的东西,主要就是判断哪个属性。幸好查到了微软的那篇文章。

    本文原创

    转载请注明出处:http://www.cnblogs.com/gaoshang212/p/4440807.html

  • 相关阅读:
    哎,这两天的心情,真是太差了
    昨天跌停价冲进去,今天继续跌停
    好几天没有干正事了,是否已经堕落了?
    继续通宵加班
    Map集合的遍历方式
    List,Set,Map,propertes注入方式
    java异常捕获以及处理
    List、Set、Map、数组互转
    Java并发编程:深入剖析ThreadLocal
    Exceotion与RuntimeException的区别
  • 原文地址:https://www.cnblogs.com/gaoshang212/p/4440807.html
Copyright © 2011-2022 走看看