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
我构建了带有两个复选框的 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