Вставка изображения в Word файл с помощью OpenXml C#

Всем привет! Я студент университета, и у меня возникла идея создать бота, который будет генерировать объяснительные записки в формате Word. Кроме основного текста в файле Word должна быть подпись самого студента. Однако у меня возникли проблемы: фотография не вставляется корректно в файл.

Вот, как должен выглядеть Word-файл (параметр разметки: обтекание текстом - перед текстом) введите сюда описание изображения и вот, как он выглядит у меня (параметр разметки: В тексте) введите сюда описание изображения Пожалуйста, помогите с кодом, и желательно объясните, как вы решаете эту проблему.

мой код

public static async Task Save(string filePath, string studentName, string date, string cause, string image)
{
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
    {
        MainDocumentPart mainPart = doc.MainDocumentPart;
        Body body = mainPart.Document.Body;

        string[] content1 = {
        "Завідувачці кафедрою",
        "Вікторії Жебці",
        "Студента групи ТЦР-23",
        $"{studentName}",
        "\n"
    };
        string[] content2 = { "Пояснювальна записка", "\n" };
        string[] content3 = { $"Доводжу до Вашого відома, що причина моєї відсутності {date}, {cause}. Обіцяю всі матеріали отримати і самостійно опрацювати." };
        string[] content4 = { $"Дата {date}                                                                             Підпис" };

        // Добавляем каждый элемент content в новый параграф с указанием стиля
        foreach (string line in content1)
        {
            AddContentToDocument(body, line, JustificationValues.Right, "Times New Roman", 14);
        }
        foreach (string line in content2)
        {
            AddContentToDocument(body, line, JustificationValues.Center, "Times New Roman", 14);
        }
        foreach (string line in content3)
        {
            AddContentToDocument(body, line, JustificationValues.Both, "Times New Roman", 14);
        }

        // Вставляем изображение в новый параграф
        Paragraph imageParagraph = AddContentToDocument(body, content4[0], JustificationValues.Both, "Times New Roman", 14);
        InsertImageAtBeginningOfParagraph(doc, image, imageParagraph);

        doc.Save();
    }
}

static Paragraph AddContentToDocument(Body body, string text, JustificationValues justification, string fontName, int fontSize)
{
    Paragraph paragraph = new Paragraph();

    // Устанавливаем выравнивание параграфа
    ParagraphProperties paragraphProperties = new ParagraphProperties();
    Justification justificationElement = new Justification() { Val = justification };
    paragraphProperties.Append(justificationElement);

    // Добавляем стиль шрифта
    RunProperties runProperties = new RunProperties();
    RunFonts runFonts = new RunFonts() { Ascii = fontName, HighAnsi = fontName };
    FontSize fontSizeElement = new FontSize() { Val = (fontSize * 2).ToString() }; // Размер указывается в двухкратном значении
    runProperties.Append(runFonts, fontSizeElement);

    // Добавляем текст в параграф
    Run run = new Run(runProperties, new Text(text));
    paragraph.Append(paragraphProperties, run);

    // Добавляем параграф в тело документа
    body.Append(paragraph);

    return paragraph;
}
static void InsertImageAtBeginningOfParagraph(WordprocessingDocument doc, string imagePath, Paragraph paragraph)
{
    MainDocumentPart mainPart = doc.MainDocumentPart;

    ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

    using (FileStream stream = new FileStream(imagePath, FileMode.Open))
    {
        imagePart.FeedData(stream);
    }

    AddImageToParagraph(doc, mainPart.GetIdOfPart(imagePart), paragraph);
}

static void AddImageToParagraph(WordprocessingDocument wordDoc, string relationshipId, Paragraph paragraph)
{
    var element =
        new Drawing(
            new DW.Inline(
                new DW.Extent() { Cx = 990000L, Cy = 792000L },
                new DW.EffectExtent()
                {
                    LeftEdge = 0L,
                    TopEdge = 0L,
                    RightEdge = 0L,
                    BottomEdge = 0L
                },
                new DW.DocProperties()
                {
                    Id = (UInt32Value)1U,
                    Name = "Picture 1"
                },
                new DW.NonVisualGraphicFrameDrawingProperties(
                    new A.GraphicFrameLocks() { NoChangeAspect = true }),
                new A.Graphic(
                    new A.GraphicData(
                        new PIC.Picture(
                            new PIC.NonVisualPictureProperties(
                                new PIC.NonVisualDrawingProperties()
                                {
                                    Id = (UInt32Value)0U,
                                    Name = "New Bitmap Image.jpg"
                                },
                                new PIC.NonVisualPictureDrawingProperties()),
                            new PIC.BlipFill(
                                new A.Blip(
                                    new A.BlipExtensionList(
                                        new A.BlipExtension()
                                        {
                                            Uri =
                                               "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                        })
                                )
                                {
                                    Embed = relationshipId,
                                    CompressionState =
                                    A.BlipCompressionValues.Print
                                },
                               new A.Stretch(
                               new A.FillRectangle())),
                                new PIC.ShapeProperties(
new A.Transform2D(
    new A.Offset() { X = 0L, Y = 0L },
    new A.Extents() { Cx = 990000L, Cy = 792000L }),
new A.PresetGeometry(
    new A.AdjustValueList()
)
{ Preset = null }))
                        )
                    { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                )
            {
                DistanceFromTop = (UInt32Value)0U,
                DistanceFromBottom = (UInt32Value)0U,
                DistanceFromLeft = (UInt32Value)0U,
                DistanceFromRight = (UInt32Value)0U,
                EditId = "50D07946"
            });

    paragraph.Append(new Run(element));
}

Ответы (0 шт):