You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenXML替换Word图片占位符时所有占位符均被替换问题

问题根源

所有占位符共享同一个关联图片资源的rId,你现有代码直接修改该rId指向的图片资源内容,自然所有引用这个rId的占位符都会同步变更。

修复方案

不要修改原有图片资源的内容,给匹配到的目标占位符单独创建新的图片资源,再将目标占位符的Blip关联指向新的资源唯一id,仅修改当前匹配到的占位符的关联关系,其他占位符不受影响。

修正后代码

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;

public static void ReplacePlaceHolderWithPicture(this WordprocessingDocument doc, string nameOfImage, string imgFilePath)
{
    var drawings = doc.MainDocumentPart.Document.Descendants<Drawing>().ToList();

    foreach (var drawing in drawings)
    {
        var dpr = drawing.Descendants<DocProperties>().FirstOrDefault();
        if (dpr != null && dpr.Name == nameOfImage)
        {
            foreach (var blip in drawing.Descendants<A.Blip>())
            {
                // 创建新的独立图片Part
                ImagePart newImagePart = doc.MainDocumentPart.AddImagePart(GetImagePartType(imgFilePath));
                using (var stream = new FileStream(imgFilePath, FileMode.Open, FileAccess.Read))
                {
                    newImagePart.FeedData(stream);
                }
                // 获得新图片Part的唯一rId
                string newRid = doc.MainDocumentPart.GetIdOfPart(newImagePart);
                // 替换当前占位符的关联rId,不修改原有资源
                blip.Embed = newRid;
            }
        }
    }
}

// 辅助方法:根据图片后缀获取对应ImagePartType
private static ImagePartType GetImagePartType(string imgFilePath)
{
    string ext = Path.GetExtension(imgFilePath).ToLower();
    return ext switch
    {
        ".png" => ImagePartType.Png,
        ".jpg" or ".jpeg" => ImagePartType.Jpeg,
        ".gif" => ImagePartType.Gif,
        ".bmp" => ImagePartType.Bmp,
        _ => throw new NotSupportedException($"不支持的图片格式:{ext}")
    };
}

验证说明

修改完成后可重新用OpenXML SDK Productivity Tool查看文档结构,匹配到的目标占位符的<a:blip>标签r:embed属性会变为新生成的唯一id,其余未匹配的占位符仍使用原有id,不会被同步修改。

内容的提问来源于stack exchange,提问作者stickfigure4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:03