OpenXML:在第一页标题上添加图像(而不在下一个标题上添加图像!)

时间:2018-10-12 16:03:54

标签: c# openxml

由于要解决这个问题很多天,我一直在努力,但我无法弄清楚。我希望你能帮助我。

如您所见,我正在尝试添加图像宽度始终大于图像高度的图像(所有图像均为“ * .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文件中)?

希望您能帮助我解决这个问题。

0 个答案:

没有答案