如何将ppt文件保存到WPF数据库并检索它们进行编辑?

时间:2017-07-17 13:12:22

标签: c# database

有什么方法可以将.ppt / .pptx文件保存到数据库,然后能够检索它以便我可以在应用程序内编辑它吗?

我知道我可以为.doc / .docx文件执行此操作 - 以rtf格式存储它们并将它们加载到带有粗体,斜体,下划线和字体控件的'green'中,但有这样的东西吗?对于powerpoint文件?

到目前为止,我发现的最接近我想要实现的解决方案涉及converting the ppt files to a video format,但这只能让我查看powerpoint,而不是编辑它;以及使用RichTextBox控件并使用WebBrowser在幻灯片之间导航,但这又不允许任​​何编辑。

有没有解决方案?

1 个答案:

答案 0 :(得分: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();
    }
}