2017-07-17 30 views
1

有沒有什麼方法可以將.ppt/.pptx文件保存到數據庫中,然後能夠檢索它,以便在應用程序內編輯它?如何將ppt文件保存到WPF數據庫並檢索它們以進行編輯?

我知道我可以爲.doc/.docx文件執行此操作 - 將它們存儲爲rtf格式並使用粗體,斜體,下劃線和字體控件將它們加載到RichTextBox中,但是對於powerpoint文件?

到目前爲止,我發現的最接近的解決方案涉及到converting the ppt files to a video format,但這隻允許我查看幻燈片,而不是編輯幻燈片;以及使用WebBrowser控件和使用Navigate()在幻燈片之間導航,但是這又不允許任​​何編輯。

有沒有解決這個問題的方法?

+0

爲什麼一個數據庫,而不是文件系統? –

+0

你的實際問題是你如何編輯你實施的WPF應用程序中的PowerPoint文件?如果是這種情況,我認爲沒有辦法做到這一點。只有當你自己實現PowerPoint文件的解析器和表示層時 –

回答

3

您可以使用OLE(對象鏈接和嵌入)將PowerPoint作爲WPF中的ActiveX控件託管。不幸的是,WPF不直接支持OLE,而是WinForms。您將不得不使用WindowsFormsHost來放置一個WinForms控件,該控件將在您的WPF應用程序中執行OLE嵌入。

這一切都開始得到複雜,很快,但它可能。有一篇關於如何去做的微軟文章here。您可能想將PowerPoint而不是Windows Media Player包裝起來,但這個想法是一樣的。這將要求最終用戶安裝了Power Point,並且很可能與應用程序編譯的版本相同。

// Create the interop host control. 
System.Windows.Forms.Integration.WindowsFormsHost host = 
    new System.Windows.Forms.Integration.WindowsFormsHost(); 

// Create the ActiveX control. 
AxWMPLib.AxWindowsMediaPlayer axWmp = new AxWMPLib.AxWindowsMediaPlayer(); 

// Assign the ActiveX control as the host control's child. 
host.Child = axWmp; 

// Add the interop host control to the Grid 
// control's collection of child controls. 
this.grid1.Children.Add(host); 

將自己存儲在數據庫中將是一件容易的事。

here複製:

public static void databaseFilePut(string varFilePath) { 
    byte[] file; 
    using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) { 
     using (var reader = new BinaryReader(stream)) { 
      file = reader.ReadBytes((int) stream.Length);  
     }   
    } 
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) 
    using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) { 
     sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file; 
     sqlWrite.ExecuteNonQuery(); 
    } 
} 
相關問題