如何在不打开另一个窗口的情况下将PowerPoint演示文稿嵌入到WPF应用程序中?

目前我在C#中有一个WPF应用程序,但我发现找到任何有用的方法将PowerPoint演示文稿嵌入到我的窗口中是非常困难的。

我在这里找到了一个解决方案: 将Powerpoint节目嵌入到C#应用程序中

此解决方案产生了在另一个窗口中运行PowerPoint的问题,但只是在WPF应用程序中显示其UI。 这意味着当WPF窗口被聚焦时,PowerPoint演示文稿没有,并且停止播放。 当窗口关闭时,还存在PowerPoint崩溃的问题。

我找到的另一个解决方案是: http : //www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP

解决方案很受欢迎,但我发现它很难处理。 我不知道任何Win32编程,或者C ++,所以我发现它很难修改。 我设法让它停止显示PowerPoint的第二个副本(原始项目中的预期function),但我还没有找到一种方法来自动打开PowerPoint演示文稿。

所以我需要的是一种自动和在后台干净地打开PowerPoint演示文稿的方法(我不希望在任何时候显示PowerPoint UI),并允许它自动运行(而不是响应输入)应用程序正在运行。 如果我能将它保存在C#和WPF中,并且不必处理Win32和C ++,那将是非常好的。

这可能吗? 在这一点上,我真的后悔这个项目只是因为PowerPoint集成的麻烦。

您可以即时将演示文稿转换为video格式:

// not tested as I don't have the Office 2010, but should work private string GetVideoFromPpt(string filename) { var app = new PowerPoint.Application(); var presentation = app.Presentations.Open(filename, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse); var wmvfile = Guid.NewGuid().ToString() + ".wmv"; var fullpath = Path.GetTempPath() + filename; try { presentation.CreateVideo(wmvfile); presentation.SaveCopyAs(fullpath, PowerPoint.PpSaveAsFileType.ppSaveAsWMV, MsoTriState.msoCTrue); } catch (COMException ex) { wmvfile = null; } finally { app.Quit(); } return wmvfile; } 

然后你会用MediaElement播放它:

  public void PlayPresentation(string filename) { var wmvfile = GetVideoFromPpt(filename); player.Source = new Uri(wmvfile); player.Play(); } 

当你完成video播放时,不要忘记File.Delete(wmvfile)

通过命令行使用/ s标志启动演示文稿将播放幻灯片,而不启动闪屏。

 powerpnt.exe /sc:\path\to\your\presentation.pptx 

我会尝试与您提到的一些WPF嵌入式解决方案一起使用,或者看看这种方法 。

我对WPF知之甚少,所以希望有人可以提供一个包含所有这些内容的更好答案。

我真的不喜欢它,我不确定这适用于你的情况。 你需要有权访问演示文稿,这是肯定的。 然而,它相当容易和轻量级。

我的基本想法是以某种方式将powerpoint演示文稿嵌入到html中,并使用webbrowser控件来显示它。 似乎有很多方法可以做到这一点。

我决定尝试将演示文稿直接保存为html,结果certificate是可能的(至少对于PP2010而言),尽管布局可能更好。 另一种方法(例如谷歌文档)可能会产生更好的效果。 我从这个链接中取得了以下内容。

  • 在PowerPoint 2010中,打开要导出为HTML的演示文稿
  • 按Alt + F11。
  • 按Ctrl + G.
  • 在立即窗格中,键入以下,然后按Enter: ActivePresentation.SaveAs ":\users\\desktop\.htm", ppSaveAsHTML, msoFalse

    注意要使用单个文件网页(* .mht; * .mhtml)文件格式进行保存,请使用mht替换文件名末尾的htm,并将ppSaveAsHTML替换为ppSaveAsWebArchive

如果你用htm导出它,你会得到很多额外的文件,因为它只是一个文件,所以更适合我。 我很确定如果你需要对你的解决方案进行通用的话,也可以在代码中自动执行这一步骤。

要在webbrowser控件中显示html文件是一件容易的事情,为了方便我将其上传到我的Dropbox并设置了源代码(如果你想直接查看它,我会在那里放几天) 。

至于立即开始幻灯片放映,我将不得不再研究一下。

  

在此处输入图像描述

有一个名为DocumentViewer的WPF控件。

  1. 首先应将pptx转换为.xps文件格式。
  2. 然后将它绑定到Document属性。

以下是将Office文档(包括pptx )转换为C sharp中的XPS的链接。

XAML

   

绑定到控件的Document属性(请注意, ConvertPptxDocToXPSDoc是将pptx转换为xps的方法)

  myDocumentViewer.Document = this.ConvertPptxDocToXPSDoc(this.FileName, this.newXPSDocumentName).GetFixedDocumentSequence();