2013-03-31 11 views
8

Derzeit habe ich eine WPF-Anwendung in C#, aber ich finde es unglaublich schwierig, nützliche Möglichkeiten zum Einbetten einer PowerPoint-Präsentation in mein Fenster zu finden.Wie kann ich eine PowerPoint-Präsentation in eine WPF-Anwendung einbetten, ohne ein weiteres Fenster zu öffnen?

Eine Lösung fand ich hier: Embedding a Powerpoint show into a C# application

Diese Lösung das Problem, Powerpoint läuft in einem anderen Fenster erstellt, aber die Benutzeroberfläche nur in der WPF-Anwendung angezeigt werden soll. Dies bedeutete, dass, wenn das WPF-Fenster fokussiert war, die PowerPoint-Präsentation nicht und nicht mehr abgespielt wurde. Es gab auch das Problem, dass PowerPoint beim Schließen des Fensters abstürzte.

Eine andere Lösung war ich hier gefunden: http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP

Die Lösung populär war, aber ich fand es schwierig, mit zu arbeiten. Ich kenne keine Win32-Programmierung, oder C++, also fand ich es extrem schwierig zu modifizieren. Ich habe es geschafft, dass es keine zweite Kopie von PowerPoint mehr anzeigt (eine beabsichtigte Funktion im ursprünglichen Projekt), aber ich habe noch keine Möglichkeit gefunden, die PowerPoint-Präsentation automatisch zu öffnen.

Also was ich brauche, ist eine Möglichkeit, die PowerPoint-Präsentation automatisch und im Hintergrund sauber zu öffnen (ich möchte nicht, dass die PowerPoint-Benutzeroberfläche zu irgendeinem Zeitpunkt angezeigt wird), und es automatisch ausführen lassen (und nicht reagieren eingeben) während die Anwendung läuft. Es wäre wunderbar, wenn ich es in C# und WPF behalten könnte und nicht mit Win32 und C++ umgehen müsste.

Ist das möglich? An dieser Stelle bedauere ich dieses Projekt wirklich wegen der PowerPoint-Integration Kopfschmerzen.

+1

Noch eine andere Art und Weise wird die Umwandlung Ihrer Präsentation Format, wie ein Video, das mit WPF MediaPlayer abgespielt werden kann. Dies könnte hilfreich sein: http://stackoverflow.com/questions/13311579/ – Joulukuusi

+0

Das ist eine gute Idee. Ich werde das untersuchen. –

+0

@Joulukuusi Ihre Lösung war diejenige, die am besten für uns funktioniert hat. Bitte erstellen Sie eine Antwort, damit ich Ihnen das Kopfgeld geben kann. –

Antwort

9

Sie Ihre Präsentation on-the-fly zu einem Video-Format konvertieren können:

// 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; 
} 

Und dann würden Sie es mit MediaElement spielen:

<MediaElement Name="player" LoadedBehavior="Manual" UnloadedBehavior="Stop" /> 

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

Vergiss nicht File.Delete(wmvfile), wenn du fertig bist mit dem Spielen Video!

+1

Solange Sie keine Benutzerinteraktion für Ihre Präsentation benötigen, ist dies eine ziemlich anständige Lösung. –

2

Wenn Sie die Präsentation über die Befehlszeile mit dem Flag/s starten, wird die Diashow abgespielt, ohne dass der Begrüßungsbildschirm gestartet wird.

powerpnt.exe /s c:\path\to\your\presentation.pptx 

Ich würde versuchen, dass im Konzert mit einigen der WPF einbetten Lösungen haben Sie erwähnt oder einen Blick auf this approach nehmen.

Ich weiß wenig über WPF, also hoffentlich kann jemand eine bessere Antwort zur Verfügung stellen, die alle diese Stücke enthält.

1

Ich mag es nicht wirklich, und ich bin mir nicht sicher, dass dies für Ihre Situation gilt. Sie müssten Zugriff auf die Präsentation haben, so viel ist sicher. Es ist eher einfach und leicht.

Meine Grundidee war irgendwie die Powerpoint-Präsentation in HTML einzubetten und einfach das Webbrowser-Steuerelement zu verwenden, um es anzuzeigen. Es scheint eine number of ways zu geben, das zu tun.

Ich entschied mich zu versuchen, die Präsentation direkt als HTML zu speichern, was sich als möglich herausstellte (zumindest für PP2010), obwohl das Layout schöner sein könnte. Ein anderer Ansatz (z. B. die Google-Dokumente) könnte etwas Schöneres hervorbringen. Ich nahm das folgende von dieser link.

  • In Powerpoint 2010, öffnen Sie die Präsentation, die Sie
  • Drücken Sie Alt + F11, um HTML exportieren möchten.
  • Drücken Sie Strg + G.
  • im Direktfenster Folgendes ein, und drücken Sie die Eingabetaste: ActivePresentation.SaveAs "<Drive>:\users\<username>\desktop\<filename>.htm", ppSaveAsHTML, msoFalse

    Hinweis unter Verwendung der Webseite in einer Datei zu speichern (* .mht, * .mhtml) Dateiformat ersetzen htm am Ende des Dateinamens mit mht, und ersetzen Sie ppSaveAsHTML durch ppSaveAsWebArchive.

Wenn Sie es in htm exportieren, erhalten Sie eine Menge von zusätzlichen Dateien, in MHT ist es nur eine einzige Datei, so dass besser geeignet ich. Ich bin mir ziemlich sicher, dass es auch möglich wäre, diesen Schritt im Code zu automatisieren, wenn Sie mit Ihrer Lösung generisch arbeiten müssen.

Um die HTML-Datei in einem Webbrowser-Steuerelement anzuzeigen, ist der einfache Teil, ich habe es in meine Dropbox für die Bequemlichkeit hochgeladen und nur die Quelle (ich werde es für ein paar Tage dort oben lassen, wenn Sie schauen wollen daran direkt).

Um die Diashow sofort zu starten, muss ich etwas genauer hinschauen.

<WebBrowser x:Name="webbrowser" Source="https://dl.dropbox.com/u/27614341/test.mht"/> 

enter image description here

+0

Wie kann ich beim Anzeigen einer PowerPoint-Präsentation in einem Webbrowser auf Informationen wie die Anzahl der Folien zugreifen? –

+0

Oh, vergiss es. Ich erkenne nun, dass der Teil "Slide 1 of 3" während der Konvertierung in HTML hinzugefügt wird. –

1

Es gibt ein WPF-Steuerelement namens DocumentViewer.

  1. Zuerst sollte das pptx in das .xps-Dateiformat konvertiert werden.
  2. Dann binden Sie es an die Document Eigenschaft des DocumentViewer.

Here ist der Link scharfen Office-Dokumente (einschließlich pptx) XPS in C zu konvertieren.

XAML

<DocumentViewer Name="myDocumentViewer" Margin="0,0,0,59"> 

</DocumentViewer> 

binden an die Document Eigenschaft der Steuerung (Beachten Sie, dass ConvertPptxDocToXPSDoc das Verfahren pptx zu xps konvertieren) zu einem anderen

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

Dies wird nicht funktionieren, wenn die Präsentation Sounds hat, aber ansonsten ist es eine gute Idee. – Joulukuusi

+0

Schauen Sie sich die folgenden Posts an? [post1] (http://stackoverflow.com/q/11432875/873979) [post2] (http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP) – Haritha