winfrom 操做PPT

///winfrom 操做PPT
 
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using OFFICECORE = Microsoft.Office.Core;
 using POWERPOINT = Microsoft.Office.Interop.PowerPoint;
 using System.Windows;
 using System.Collections;
 using System.Windows.Controls;
 namespace PPTDraw.PPTOperate
 {
     /// <summary>
     /// PPT文檔操做實現類.
     /// </summary>
     public class OperatePPT
     {
          #region=========基本的參數信息=======
          POWERPOINT.Application objApp = null;
          POWERPOINT.Presentation objPresSet = null;
          POWERPOINT.SlideShowWindows objSSWs;
          POWERPOINT.SlideShowTransition objSST;
          POWERPOINT.SlideShowSettings objSSS;
          POWERPOINT.SlideRange objSldRng;
          bool bAssistantOn;
          double pixperPoint = 0;
          double offsetx = 0;
          double offsety = 0;
          #endregion
          #region===========操做方法==============
         /// <summary>
          /// 打開PPT文檔並播放顯示。
          /// </summary>
          /// <param name="filePath">PPT文件路徑</param>
          public void PPTOpen(string filePath)
          {
              //防止連續打開多個PPT程序.
              if (this.objApp != null) { return; }
              try
              {
                  objApp = new POWERPOINT.Application();
                  //以非只讀方式打開,方便操做結束後保存.
                  objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
                  //Prevent Office Assistant from displaying alert messages:
                  bAssistantOn = objApp.Assistant.On;
                  objApp.Assistant.On = false;
                  objSSS = this.objPresSet.SlideShowSettings;
                  objSSS.Run();
              }
              catch (Exception ex)
              {
                  this.objApp.Quit();
              }
          }
          /// <summary>
          /// 自動播放PPT文檔.
          /// </summary>
          /// <param name="filePath">PPTy文件路徑.</param>
          /// <param name="playTime">翻頁的時間間隔.【以秒爲單位】</param>
          public void PPTAuto(string filePath, int playTime)
          {
              //防止連續打開多個PPT程序.
              if (this.objApp != null) { return; }
              objApp = new POWERPOINT.Application();
              objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
              // 自動播放的代碼(開始)
              int Slides = objPresSet.Slides.Count;
              int[] SlideIdx = new int[Slides];
              for (int i = 0; i < Slides; i++) { SlideIdx[i] = i + 1; };
              objSldRng = objPresSet.Slides.Range(SlideIdx);
              objSST = objSldRng.SlideShowTransition;
              //設置翻頁的時間.
              objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;
              objSST.AdvanceTime = playTime;
              //翻頁時的特效!
              objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectCircleOut;
              //Prevent Office Assistant from displaying alert messages:
              bAssistantOn = objApp.Assistant.On;
              objApp.Assistant.On = false;
              //Run the Slide show from slides 1 thru 3.
              objSSS = objPresSet.SlideShowSettings;
              objSSS.StartingSlide = 1;
              objSSS.EndingSlide = Slides;
              objSSS.Run();
              //Wait for the slide show to end.
              objSSWs = objApp.SlideShowWindows;
              while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(playTime * 100);
              this.objPresSet.Close();
              this.objApp.Quit();
          }
          /// <summary>
          /// PPT下一頁。
          /// </summary>
          public void NextSlide()
          {
              if (this.objApp != null)
                  this.objPresSet.SlideShowWindow.View.Next();
          }
          /// <summary>
          /// PPT上一頁。
         /// </summary>
         public void PreviousSlide()
         {
             if (this.objApp != null)
                 this.objPresSet.SlideShowWindow.View.Previous();
         }
         /// <summary>
         /// 對當前的PPT頁面進行圖片插入操做。
         /// </summary>
         /// <param name="alImage">圖片對象信息數組</param>
         /// <param name="offsetx">插入圖片距離左邊長度</param>
         /// <param name="pixperPoint">距離比例值</param>
         /// <returns>是否添加成功!</returns>
         public bool InsertToSlide(List<PPTOBJ> listObj)
         {
             bool InsertSlide = false;
             if (this.objPresSet != null)
             {
                 this.SlideParams();
                 int slipeint = objPresSet.SlideShowWindow.View.CurrentShowPosition;
                 foreach (PPTOBJ myobj in listObj)
                 {
                     objPresSet.Slides[slipeint].Shapes.AddPicture(
                          myobj.Path,           //圖片路徑
                          OFFICECORE.MsoTriState.msoFalse,
                          OFFICECORE.MsoTriState.msoTrue,
                          (float)((myobj.X - this.offsetx) / this.pixperPoint),       //插入圖片距離左邊長度
                          (float)(myobj.Y / this.pixperPoint),       //插入圖片距離頂部高度
                          (float)(myobj.Width / this.pixperPoint),   //插入圖片的寬度
                          (float)(myobj.Height / this.pixperPoint)   //插入圖片的高度
                       );
                 }
                 InsertSlide = true;
             }
             return InsertSlide;
         }
         /// <summary>
         /// 計算InkCanvas畫板上的偏移參數,與PPT上顯示圖片的參數。
         /// 用於PPT加載圖片時使用
         /// </summary>
         private void SlideParams()
         {
             double slideWidth = this.objPresSet.PageSetup.SlideWidth;
             double slideHeight = this.objPresSet.PageSetup.SlideHeight;
             double inkCanWidth = SystemParameters.PrimaryScreenWidth;//inkCan.ActualWidth;
             double inkCanHeight = SystemParameters.PrimaryScreenHeight;//inkCan.ActualHeight ;
             if ((slideWidth / slideHeight) > (inkCanWidth / inkCanHeight))
             {
                 this.pixperPoint = inkCanHeight / slideHeight;
                 this.offsetx = 0;
                 this.offsety = (inkCanHeight - slideHeight * this.pixperPoint) / 2;
             }
             else
             {
                 this.pixperPoint = inkCanHeight / slideHeight;
                 this.offsety = 0;
                 this.offsetx = (inkCanWidth - slideWidth * this.pixperPoint) / 2;
             }
         }
         /// <summary>
         /// 關閉PPT文檔。
         /// </summary>
         public void PPTClose()
         {
             //裝備PPT程序。
             if (this.objPresSet != null)
             {
                 //判斷是否退出程序,能夠不使用。
                 //objSSWs = objApp.SlideShowWindows;
                 //if (objSSWs.Count >= 1)
                 //{
                     if (MessageBox.Show("是否保存修改的筆跡!", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                         this.objPresSet.Save();
                 //}
                 //this.objPresSet.Close();
             }
             if (this.objApp != null)
                 this.objApp.Quit();
             GC.Collect();
         }
         #endregion
     }
 }
相關文章
相關標籤/搜索