使用Xceed DocX生成Docx时,页眉添加图片失败求助
解决Xceed DocX页眉图片不显示的问题
我之前也碰到过一模一样的坑!你现在的代码已经成功把图片嵌入到文档资源里了,但直接把Image对象加到页眉的Images集合并不会让它显示出来——DocX要求页眉里的内容必须放在段落(Paragraph)中才能被正确渲染。
问题根源
document.AddImage()只是把图片资源导入到文档的资源池里,但没有在页眉的可视区域内放置它。页眉的Images集合仅用于管理嵌入的图片资源,不是用来直接显示内容的,必须通过Picture对象把图片放到段落中,再将段落添加到页眉的内容流里。
修正后的代码
把你原来的document.Headers.First.Images.Add(image);这一行替换成下面的代码:
// 将导入的图片转换成可插入文档的Picture对象 Xceed.Document.NET.Picture logoPicture = image.CreatePicture(); // 给首页页眉创建一个新段落 var headerParagraph = document.Headers.First.InsertParagraph(); // 将图片添加到页眉段落中 headerParagraph.AppendPicture(logoPicture);
完整的修正后代码片段:
SaveFileDialog saveFileDialog = new SaveFileDialog { Filter = "Documento Word (*.docx)|*.docx", FileName = "Documento " + obj_eObra.ProcesoDeSeleccion + ".docx", DefaultExt = ".docx" }; if (saveFileDialog.ShowDialog() == true) { DocX document = DocX.Create(saveFileDialog.FileName); Stream Logo = new MemoryStream(obj_eEmpresa.Logo); Xceed.Document.NET.Image image = document.AddImage(Logo); document.AddHeaders(); document.AddFooters(); // 强制首页使用不同的页眉页脚 document.DifferentFirstPage = true; // 强制奇偶页使用不同的页眉页脚 document.DifferentOddAndEvenPages = true; // --- 修正的部分开始 --- // 将图片转为可插入的Picture实例 Xceed.Document.NET.Picture logoPicture = image.CreatePicture(); // 在首页页眉插入段落并添加图片 var headerParagraph = document.Headers.First.InsertParagraph(); headerParagraph.AppendPicture(logoPicture); // 可选:调整图片大小 // logoPicture.Width = 120; // logoPicture.Height = 60; // 可选:设置段落对齐方式 // headerParagraph.Alignment = Alignment.Right; // --- 修正的部分结束 --- // 插入正文段落 var p = document.InsertParagraph(); // 追加格式化文本 p.Append("This is a simple formatted red bold paragraph") .Font(new Font("Arial")) .FontSize(25) .Color(System.Drawing.Color.Red) .Bold() .Append(" containing a blue italic text.").Font(new Font("Times New Roman")).Color(System.Drawing.Color.Blue).Italic() .SpacingAfter(40); document.Save(); }
额外提示
如果需要调整图片的尺寸、对齐方式,直接修改logoPicture的属性或者页眉段落的属性即可,比如设置图片宽高、段落居右对齐等。
这样修改后,生成的Word文档首页页眉就能正常显示你的图片了!
内容的提问来源于stack exchange,提问作者Gianfranco Díaz




