OpenXML: Добавить изображение в первый заголовок страницы (без добавления изображения в следующие заголовки!) - PullRequest
0 голосов
/ 12 октября 2018

Я борюсь со многими днями, пытаясь решить эту проблему, но я не могу понять это.Я надеюсь, что вы можете мне помочь.

Как вы видите, я пытаюсь добавить изображение, ширина которого всегда больше высоты изображения (все они "* .png").Моя цель состоит в том, чтобы добавить это изображение в верхнем левом углу страницы пропорционально, поэтому, если изображение слишком велико, код изменит его до нужного размера.

Но моя проблема в том,что я не могу понять, как добавить свое изображение в шапку.Изменение размера изображения было бы другой проблемой для меня.

Если возможно, могу ли я добавить новое изображение в текущий заголовок?Если нет, тогда добавление полностью нового заголовка страницы будет для меня нормой.

Что я использую?

В Visual Studio я использую DocumentFormat какэто:

using DocumentFormat.OpenXml;

У меня также есть несколько шаблонов (* .dotx), где я на самом деле получаю эти шаблоны, и на этих шаблонах я хотел бы добавить эти изображения для создания моего документа.

Что я попробовал?

Я уже видел этот пост здесь:

Вставьте картинку в заголовок документа Word с 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)?

Я надеюсь, что вы можете помочь мне с этой проблемой.

...