插入的图像未显示在OpenXml中创建的Word文档

时间:2017-07-11 09:37:11

标签: image ms-word c#-3.0 openxml

我正在尝试在由标准字母生成应用程序创建的Word文档中插入签名图像。我使用的代码改编自网络上的各种示例(见下文)。应用程序插入图像,其占用的文档中的空间是正确的,但不显示图像本身。

我用.png和.jpg图像试过它,但都没有工作;它似乎不是图像本身的问题。

我使用OpenXml SDK工具检查了该文档,该工具显示图像已正确嵌入并编码为Base64数据字符串。

SDK工具确定的问题是,与手动插入图像(并且正确显示)的文档相比,文档中的pic:pic元素使用错误的命名空间进行渲染({ {1}})它和所有子控件都呈现为a:pic(见下面的屏幕截图)。

任何人都可以告诉我导致错误名称空间/元素的原因,以及如何解决问题?

OpenXmlUnknownElement

OpenXml SDK Tool view of document

1 个答案:

答案 0 :(得分:0)

这个问题让我紧张了几个小时,最后我找到了原因。那是因为Drawing元素的Id需要唯一,不能像这样固定ID

new DW.DocProperties() { Id = 1U, Name = "Picture 1" }

就我而言,我有这个功能来设置替代文本并更新 Id:

    private static HashSet<uint> _drawingElementIds = new HashSet<uint>();
    public static void SetPictureAltText(OpenXmlElement imageContainer, string altText)
    {
        var docPro = imageContainer.Descendants<DocProperties>().FirstOrDefault();
        if (docPro != null)
        {                
            //Make sure new image has unique ID, otherwise some images won't display
            var newId = (uint)new Random().Next(10, 10000);
            while (_drawingElementIds.Contains(newId))
            {
                newId = (uint)new Random().Next(10, 10000);
            }
            _drawingElementIds.Add(newId);

            docPro.Id = new UInt32Value(newId);
            docPro.Description = altText;
        }            
    }

干杯, 尼克