我有对 PowerPoint 文件进行切片和切块的 Open Office XML 代码。
由于 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;
Wherebyte[] data
代表一个新的 PowerPoint PPTX,然后我可以将其保存回数据库。
这段代码工作得很好,因为在这个例子中我已经在使用字节数组了。当我必须处理PresentationDocument
对象时会出现问题。在我们的程序中已经对这些对象进行了大量处理,当前从这些对象获取字节数组的方法是这样做:
presentationDocument.SaveAs(fileName);
byte[] array = File.ReadAllBytes(fileName);
这不是我想要的。
不幸的是,似乎没有更好的方法从PresentationDocument
. 有谁知道如何在内存中做到这一点,也许是一个MemoryStream
对象?
注意:我读过OfficeTalk: Working with In-Memory Open XML Documents,但它似乎假设您已经有一个正确文档格式的字节数组。