【发布时间】:2018-11-16 22:51:41
【问题描述】:
我们有条件页脚,INCLUDETEXT 基于客户端:
IF $CLIENT = "CLIENT1" "{INCLUDETEXT "CLIENT1HEADER.DOCX"}" ""
根据我们的文档,IF/ELSE 的数量可能会有所不同,这些都可以正常工作以将正确的文件合并到正确的位置。
但是,其中一些文档可能包含客户特定的图像/品牌,也需要从 INCLUDETEXT 文件中复制。
下面是调用的方法,用于替换从源文档复制到目标文档的IEnumerable<Run> 中存在的任何Picture 元素。
图像复制得很好,但它似乎没有更新我的Picture 中的 RID 或将记录添加到 .XML.Rels 文件中。 (我什至尝试添加ForEach 以添加到所有页眉和页脚,看看这是否有什么不同。
private void InsertImagesFromOldDocToNewDoc(WordprocessingDocument source, WordprocessingDocument target, IEnumerable<Picture> pics)
{
IEnumerable<Picture> imageElements = source.MainDocumentPart.Document.Descendants<Run>().Where(x => x.Descendants<Picture>().FirstOrDefault() != null).Select(x => x.Descendants<Picture>().FirstOrDefault());
foreach (Picture pic in pics) //the new pics
{
Picture oldPic = imageElements.Where(x => x.Equals(pic)).FirstOrDefault();
if (oldPic != null)
{
string imageId = "";
ImageData shape = oldPic.Descendants<ImageData>().FirstOrDefault();
ImagePart p = source.MainDocumentPart.GetPartById(shape.RelationshipId) as ImagePart;
ImagePart newPart = target.MainDocumentPart.AddPart<ImagePart>(p);
newPart.FeedData(p.GetStream());
shape.RelId = target.MainDocumentPart.GetIdOfPart(newPart);
string relPart = target.MainDocumentPart.CreateRelationshipToPart(newPart);
}
}
}
以前有人遇到过这个问题吗?
OpenXML SDK 文档似乎“有点”稀疏...
【问题讨论】:
-
你解决过这个问题吗?
标签: c# openxml openxml-sdk mailmerge