Word 插件试图同时显示 XML 和文本,但如果文本有图像,doc 文件是否已损坏?

Word addin trying to show both XML and text but if the text have image the doc File corrupted?

我构建了带有两个复选框的 word 插件,用于在文本视图和 XML 视图之间切换。 在 XML 查看中我限制了编辑。当用户 return 返回 TEXT 查看时,我删除了编辑限制。 代码:

  private void ShowDocBodyXML_Click(object sender, RibbonControlEventArgs e)
    {
        var doc = Globals.DLPAddIn.Application.ActiveDocument;
        doc.Save();
        string fileName = doc.FullName;
        doc.Close();
        using (WordprocessingDocument document = WordprocessingDocument.Open(fileName, true))
        {
            MainDocumentPart mainPart = document.MainDocumentPart;
            Body body = mainPart.Document.Body;
            string text = body.InnerXml;
            body.RemoveAllChildren();
            DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
            Run run = para.AppendChild(new Run());
            run.AppendChild(new Text(text));
        }
        Globals.DLPAddIn.Application.Documents.Open(fileName);
        doc = Globals.DLPAddIn.Application.ActiveDocument;
        object missing = System.Reflection.Missing.Value;
        doc.Protect(Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyReading,
        missing, missing, missing, missing);
        doc.Save();
    }
    private void ShowDocBodyText_Click(object sender, RibbonControlEventArgs e)
    {
        var doc = Globals.DLPAddIn.Application.ActiveDocument;
        object missing = System.Reflection.Missing.Value;
        if (doc.ProtectionType != WdProtectionType.wdNoProtection)
            doc.Unprotect(missing);
        doc.Save();
        string fileName = doc.FullName;
        doc.Close();
        using (WordprocessingDocument document = WordprocessingDocument.Open(fileName, true))
        { 
            MainDocumentPart mainPart = document.MainDocumentPart;
            Body body = mainPart.Document.Body;
            string text = body.InnerText;
            body.RemoveAllChildren();
            body.InnerXml = text;
        }
        Globals.DLPAddIn.Application.Documents.Open(fileName);
    }

代码运行没有任何问题,但是如果用户尝试 return 返回到 TEXT 查看代码时 Word 文档有图像,则代码抛出异常 (文件已损坏) 在这段代码中:

Globals.DLPAddIn.Application.Documents.Open(fileName);

我想当我限制编辑时它会删除图像文件。 如果是这样我该如何解决呢

当文档中有图像或其他资源时,您当前的方法不起作用,因为您在创建仅包含 MainDocumentPart 的 XML 的 Word 文档时删除了所有图像。

一个解决方案是以所谓的 Flat OPC 格式显示 OpenXML。此格式在单个 XML 文档中描述了整个 OpenXML (zip) 包(没有 OpenXML 包的层次结构)。

获取 Flat OPC 格式的 XML 的最简单方法是使用 Document.WordOpenXML 属性:

var doc = Globals.DLPAddIn.Application.ActiveDocument;
var xml = doc.WordOpenXML;

var newDoc = Globals.DLPAddIn.Application.Documents.Add();
newDoc.Range.Text = xml