如何从PresentationDocument对象获取字节数组或流

问题描述

我有Open Office XML代码,可对PowerPoint文件进行切片和切块。

由于Open XML SDK的性质,该代码大部分都在文件系统上的文件中读取和写入。目标是完全消除这些临时文件,并用字节数组和/或内存中的流替换它们。

其中一些代码将来自不同幻灯片源的PowerPoint合并在一起。此代码的示例如下。想象一个包含PowerPoint演示文稿的数据库。 PmlDocument是Open XML Power Tools中的类:

foreach (var item in database)
{
    var openXmlDocument = new OpenXmlPowerToolsDocument(item.data);
    var document = new PmlDocument(openXmlDocument);
    sources.Add(new SlideSource(document,false));
}

PmlDocument newDocument = PresentationBuilder.BuildPresentation(sources);
byte[] data = newDocument.DocumentByteArray;

byte[] data代表一个新的PowerPoint PPTX,然后我可以将其保存回数据库。

此代码工作得很好,因为在此示例中我已经在使用字节数组。当我必须处理PresentationDocument对象时,就会出现问题。在我们的程序中,使用这些对象已经进行了大量处理,而从此类对象获取字节数组的当前方法是执行以下操作:

presentationDocument.SaveAs(fileName);
byte[] array = File.ReadAllBytes(fileName);

这不是我想要的。

不幸的是,似乎没有更好的方法从PresentationDocument中提取字节。有没有人知道如何在内存中执行此操作,也许是通过MemoryStream对象?

注意:我已经读过OfficeTalk: Working with In-Memory Open XML Documents,但它似乎假设您已经具有正确文档格式的字节数组。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)