OpenXML PowerPoint文件无法在IOS 7设备上打开

时间:2014-01-19 21:19:32

标签: c# ios powerpoint openxml openxml-sdk

this question类似,我在iPad上打开OpenXML 2.5文档时遇到了问题。经过一些试验和错误后,我找到了这个xml标签:

  

<覆盖PartName =“/ ppt / presentation.xml”ContentType =“application / vnd.openxmlformats-officedocument.presentationml.presentation.main + xml”/>

需要出现在.pptx文件根目录中的"[Content_Types].xml"文件中(实际上只是一个zip存档)。然后可以在PC上的PowerPoint(在2010版本上测试)和IOS 7上打开文件。

1 个答案:

答案 0 :(得分:0)

这是我用来实际添加必要的xml元素的代码。欢迎施工反馈!在创建演示文稿后调用此方法。

    public MemoryStream ApplyOpenXmlFix(MemoryStream input)
    {
        XNamespace contentTypesNamespace = "http://schemas.openxmlformats.org/package/2006/content-types";
        string filename = "[Content_Types].xml";

        input.Seek(0, SeekOrigin.Begin);

        ZipFile zipArchive = ZipFile.Read(input);
        ZipEntry file = zipArchive.Entries.Where(e => e.FileName == filename).Single();

        var xmlDocument = XDocument.Load(file.OpenReader());
        var newElement = new XElement(
             contentTypesNamespace + "Override",
            new XAttribute("PartName", "/ppt/presentation.xml"),
            new XAttribute("ContentType", "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"));

        xmlDocument.Root.Add(newElement);

        MemoryStream updatedDocument = new MemoryStream();
        xmlDocument.Save(updatedDocument, SaveOptions.DisableFormatting);
        updatedDocument.Seek(0, SeekOrigin.Begin);
        zipArchive.UpdateEntry(filename, updatedDocument);

        MemoryStream output = new MemoryStream();
        zipArchive.Save(output);
        return output;
    }