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

标签 c# database

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

我知道我可以对 .doc/.docx 文件执行此操作 - 以 rtf 格式存储它们并将它们加载到具有粗体、斜体、下划线和字体控件的 RichTextBox 中,但是是否存在像这样的 Powerpoint 文件?

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

有什么解决办法吗?

最佳答案

您可以使用 OLE(对象链接和嵌入)将 PowerPoint 托管为 WPF 中的 ActiveX 控件。不幸的是,WPF 不直接支持 OLE,但 WinForms 支持。您必须使用 WindowsFormsHost 来放置一个 WinForms 控件,它会在您的 WPF 应用程序中嵌入 OLE。

这一切开始变得非常复杂,非常快,但它是可能的。有一篇关于如何操作的 Microsoft 文章 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();
    }
}

关于c# - 如何将 ppt 文件保存到 WPF 数据库并检索它们进行编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45145263/

相关文章:

C#:为什么 ShowDialog().ToString() 不返回预期的字符串?

sql - MongoDB 在 v4 之前不符合 ACID 的真正含义是什么?

django - 如何按计算属性的总和对 Django 模型进行排序?

sql - 是否可以在 Sql server 级别创建全局存储过程

c# - 绑定(bind)到静态类属性和 StringFormat

c# - 在捕获输入记录时,如何正确使用 ViewModel 构建与 View 的双向绑定(bind)?

C#引用变量使用说明

sql - 使用 sp_send_dbmail 将电子邮件发送给从数据库查询的多个收件人的存储过程

java - 如何级联删除@OneToOne?

c# - 加载 EntityFramework 4.3.1 时出错