由于要解决这个问题很多天,我一直在努力,但我无法弄清楚。我希望你能帮助我。
如您所见,我正在尝试添加图像宽度始终大于图像高度的图像(所有图像均为“ * .png”)。我的目标是,按比例在页面的左上角添加此图像,因此,如果图像太大,则代码会将其调整为适当的大小。
但是我的问题是,我无法弄清楚如何在标题中添加图像。图像大小调整对我来说将是另一个问题。
如果可以,我可以在当前标题中添加新图像吗?如果没有,那么对我来说添加一个完整的新页面标题是可以的。
我在用什么?
在Visual Studio中,我像这样使用DocumentFormat
:
using DocumentFormat.OpenXml;
我也有一些模板(* .dotx),实际上是从那里获取这些模板的,在这些模板上,我想添加这些图像来创建我的文档。
我尝试了什么?
我已经在这里看过这篇文章:
Insert picture to header of Word document with OpenXML
...实际上我的代码或多或少地基于该代码。
private static void addHeaderToDocument(WordprocessingDocument wordDocument, MainDocumentPart mainDocumentPart, string relativeLogoFile)
{
var newHeaderPart = mainDocumentPart.AddNewPart<HeaderPart>();
var imagePart = headerPart.AddImagePart(ImagePartType.Png, "rId999");
var imagePartID = headerPart.GetIdOfPart(imagePart);
GetImageFromFile(imagePart, relativeLogoFile);
var rId = mainDocumentPart.GetIdOfPart(headerPart);
var headerRef = new HeaderReference { Id = rId };
var sectionProps = wordDocument.MainDocumentPart.Document.Body.Elements<SectionProperties>().LastOrDefault();
if (sectionProps == null)
{
sectionProps = new SectionProperties();
wordDocument.MainDocumentPart.Document.Body.Append(sectionProps);
}
sectionProps.RemoveAllChildren<HeaderReference>();
sectionProps.Append(headerRef);
headerPart.Header = GeneratePicHeader(imagePartID);
headerPart.Header.Save();
}
private static ImagePart GetImageFromFile(ImagePart imagePart, string relativeLogoFile)
{
using (FileStream stream = new FileStream(HttpContext.Current.Server.MapPath("~/" + relativeLogoFile), FileMode.Open))
{
imagePart.FeedData(stream);
}
return imagePart;
}
运行此代码时会发生什么?
实际上,运行此代码确实将图像添加到了标题中,但没有将图像添加到第一页中,而是将图像添加到了第二页中,这确实使我感到困惑!
您对此有何想法和建议?难道我做错了什么?还是我的.dotx文件出现错误?
做到这一点的最佳方法是什么?我是否应该先删除标题,然后在标题中添加图像(在右上角,我已经有一个图像位于* .dotx文件中)?
希望您能帮助我解决这个问题。