Word 在使用 openxml 拆分文档后.docx在 xxx 中发现了不可读的内容



>我有一个完整的.docx,其中包括两个数学问题,docx嵌入了一些图片和MathType方程(oleobject(,我根据这个拆分了文档,得到两个文件(第一个.docx,第二个.docx(,第一个.docx工作正常,第二个.docx但是,当我尝试打开它时会弹出一个警告对话框:

"Word found unreadable content in second.docx. Do you want to recover the contents of this document? If you trust the source of this document, click Yes."

点击"是"后,可以打开文档,内容也正确,我想知道第二个.docx有什么问题?我已经用"打开xml sdk 2.5生产力工具"检查过它,但没有发现任何原因。非常感谢任何帮助。谢谢。

这三个文件已上传到此处。

显示一些代码:

byte[] templateBytes = System.IO.File.ReadAllBytes(TEMPLATE_YANG_FILE);
using (MemoryStream templateStream = new MemoryStream())
{
templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
string guidStr = Guid.NewGuid().ToString();
using (WordprocessingDocument document = WordprocessingDocument.Open(templateStream, true))
{
document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = document.MainDocumentPart;
mainPart.Document = new Document();
Body bd = new Body();
foreach (DocumentFormat.OpenXml.Wordprocessing.Paragraph clonedParagrph in lst)
{
bd.AppendChild<DocumentFormat.OpenXml.Wordprocessing.Paragraph>(clonedParagrph);
clonedParagrph.Descendants<Blip>().ToList().ForEach(blip =>
{
var newRelation = document.CopyImage(blip.Embed, this.wordDocument);
blip.Embed = newRelation;
});
clonedParagrph.Descendants<DocumentFormat.OpenXml.Vml.ImageData>().ToList().ForEach(imageData =>
{
var newRelation = document.CopyImage(imageData.RelationshipId, this.wordDocument);
imageData.RelationshipId = newRelation;
});
}
mainPart.Document.Body = bd;
mainPart.Document.Save();
}
string subDocFile = System.IO.Path.Combine(this.outDir, guidStr + ".docx");
this.subWordFileLst.Add(subDocFile);
File.WriteAllBytes(subDocFile, templateStream.ToArray());
}

lst 包含从原始文档克隆的段落,使用:

(DocumentFormat.OpenXml.Wordprocessing.Paragraph)p.Clone();

使用生产力工具,发现oleobjectx.bin没有复制,所以我在复制Blip和ImageData之后添加了以下代码:

clonedParagrph.Descendants<OleObject>().ToList().ForEach(ole =>
{
var newRelation = document.CopyOleObject(ole.Id, this.wordDocument);
ole.Id = newRelation;
});

解决了问题。

相关内容

  • 没有找到相关文章

最新更新