我正在尝试在由标准字母生成应用程序创建的Word文档中插入签名图像。我使用的代码改编自网络上的各种示例(见下文)。应用程序插入图像,其占用的文档中的空间是正确的,但不显示图像本身。
我用.png和.jpg图像试过它,但都没有工作;它似乎不是图像本身的问题。
我使用OpenXml SDK工具检查了该文档,该工具显示图像已正确嵌入并编码为Base64数据字符串。
SDK工具确定的问题是,与手动插入图像(并且正确显示)的文档相比,文档中的pic:pic
元素使用错误的命名空间进行渲染({ {1}})它和所有子控件都呈现为a:pic
(见下面的屏幕截图)。
任何人都可以告诉我导致错误名称空间/元素的原因,以及如何解决问题?
OpenXmlUnknownElement
答案 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;
}
}
干杯, 尼克