簡體   English   中英

c#openxml設置自運行功率點演示

[英]c# openxml set up self running power point presentation

我正在開發一個演示應用程序(Asp.net MVC),我希望在現有的Power Point上應用自運行和過渡時間動畫。 我在下面寫了代碼,

using (var templateFile = System.IO.File.Open(Server.MapPath("~/OurCompanyTeam.pptx"), FileMode.Open, FileAccess.Read))
{
    using (var stream = new MemoryStream())
    {
        templateFile.CopyTo(stream); 
        using (var presentationDocument = PresentationDocument.Open(stream, true)) 
        {
            var presentationPart = presentationDocument.PresentationPart;                            
            var presentation = presentationPart.Presentation;
            var slideList = new List<SlidePart>();                            

            foreach (SlideId slideID in presentation.SlideIdList)
            {
                var slide = (SlidePart)presentationPart.GetPartById(slideID.RelationshipId);
                Transition trns = new Transition();
                trns.Duration =  "2.5";
                trns.Speed = TransitionSpeedValues.Fast;
                slide.Slide.Transition = trns;
                slideList.Add(slide);
            }
            presentationPart.Presentation.Save();
        }
        byte[] buffer = stream.ToArray();
        MemoryStream ms = new MemoryStream(buffer);                        
        FileStream file = new FileStream(Server.MapPath("~/output.pptx"), FileMode.Create, FileAccess.Write);
        ms.WriteTo(file);
        file.Close();
    }
}

我怎樣才能改進這段代碼來設置自運行演示文稿?

此答案中的代碼將使任何演示文稿( .pptx )成為自運行的幻燈片放映( .ppsx )。 它執行以下項目:

  1. 將演示文稿置於自助服務終端模式
  2. 為每張幻燈片將AdvanceAfterTime屬性設置為2秒
  3. 將文檔類型更改為幻燈片放映
  4. .pptx內容保存到新的.ppsx文件中。

您可以使用以下代碼替換上面的代碼。 添加_sourceFile字符串局部變量以保存文件的完整路徑。 以上項目的評論中的注釋:

using (var templateFile = System.IO.File.Open(Server.MapPath("~/OurCompanyTeam.pptx"), FileMode.Open, FileAccess.Read))
{
    using (var stream = new MemoryStream())
            {
                templateFile.CopyTo(stream);
                using (var presentationDocument = PresentationDocument.Open(stream, true))
                {
                    var presentationPart = presentationDocument.PresentationPart;
                    var presentation = presentationPart.Presentation;
                    var slideList = new List<SlidePart>();

                    foreach (SlideId slideID in presentation.SlideIdList)
                    {
                        var slidePart = (SlidePart)presentationPart.GetPartById(slideID.RelationshipId);

                        AlternateContent alternateContent1 = slidePart.Slide.GetFirstChild<AlternateContent>();

                        if (alternateContent1 != null)
                        {
                            slidePart.Slide.RemoveAllChildren<AlternateContent>();
                        }

                            var trns1 = new Transition();
                            trns1.Duration = "2000";
                            trns1.AdvanceOnClick = false;
                            trns1.AdvanceAfterTime = "2000"; //ITEM #2
                            trns1.Speed = TransitionSpeedValues.Slow;

                            var alternateContent = new AlternateContent();
                            alternateContent.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");

                            AlternateContentChoice alternateContentChoice = new AlternateContentChoice() { Requires = "p14" };
                            alternateContentChoice.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main");

                            alternateContentChoice.Append(trns1);
                            alternateContent.Append(alternateContentChoice);
                            slidePart.Slide.Append(alternateContent);
                    }

                    var presentationPropertiesPart = presentationPart.PresentationPropertiesPart;
                    var presentationProperties = presentationPropertiesPart.PresentationProperties;
                    presentationProperties.RemoveAllChildren<ShowProperties>();

                    presentationProperties.Append(NewShowProperties());

                    presentationDocument.ChangeDocumentType(PresentationDocumentType.Slideshow);  //ITEM #3

                }
                byte[] buffer = stream.ToArray();
                MemoryStream ms = new MemoryStream(buffer);
                FileStream file = new FileStream(System.IO.Path.GetDirectoryName(_sourceFile) + "/NewSlideShow.ppsx",
                    FileMode.Create, FileAccess.Write);  //ITEM #4
                ms.WriteTo(file);
                file.Close();
            }   
}

然后在類的底部添加此方法:

    private ShowProperties NewShowProperties()
    {
        var showProperties = new ShowProperties { Loop = true, ShowNarration = true };
        showProperties.Append(new KioskSlideMode());  //ITEM #1
        showProperties.Append(new SlideAll());
        showProperties.Append(new PresenterSlideMode());
        return showProperties;
    }

我已經測試了這個,以便在新創建的PowerPoint 2013和2016演示文稿上工作。 雙擊.ppsx文件,它將啟動自運行演示文稿。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM