【发布时间】:2014-05-15 08:27:15
【问题描述】:
我们有一个系统可以在 Word 文档中存储一些自定义模板数据。有时,更新此数据会导致 Word 抱怨文档已损坏。发生这种情况时,如果我解压缩 docx 文件并将其内容与以前的版本进行比较,唯一的区别似乎是 customXML\item.xml 文件中的预期变化。如果我使用 7zip 重新压缩内容,它似乎可以正常工作(Word 不再抱怨文档已损坏)。
(简化的)代码:
void CreateOrReplaceCustomXml(string filename, MyCustomData data)
{
using (var doc = WordProcessingDocument.Open(filename, true))
{
var part = GetCustomXmlParts(doc).SingleOrDefault();
if (part == null)
{
part = doc.MainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
}
var serializer = new DataContractSerializer(typeof(MyCustomData));
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, data);
stream.Seek(0, SeekOrigin.Begin);
part.FeedData(stream);
}
}
}
IEnumerable<CustomXmlPart> GetCustomXmlParts(WordProcessingDocument doc)
{
return doc.MainDocumentPart.CustomXmlParts
.Where(part =>
{
using (var stream = doc.Package.GePart(c.Uri).GetStream())
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd().Contains("Some.Namespace");
}
});
}
有什么建议吗?
【问题讨论】:
-
是否可以发布复制样本?
标签: c# zip openxml docx openxml-sdk