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;

amespace 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
     }
 }
posted on 2011-03-02 18:05  arong.NET  阅读(2048)  评论(1编辑  收藏  举报