MigraDoc: Выровняйте текст или таблицу по нижнему краю страницы над нижним колонтитулом

Я использую MigraDoc для создания PDF. Я хочу выровнять некоторый контент по нижней части последней страницы. Это стандартная информация об отказе от ответственности, которую моя компания всегда включает в документы такого типа. Цель состоит в том, чтобы полностью сохранить содержимое и всегда отображать его чуть выше нижнего колонтитула на последней странице. Если на последней странице фактического контента недостаточно места, чтобы сохранить его вместе, должен быть разрыв страницы, и шаблонный контент будет находиться на странице сам по себе.

Я хотел бы сделать это без измерения высоты содержимого.

У меня сложилось впечатление, что я могу использовать TextFrame, чтобы каким-то образом помочь в этом, но я не могу найти по нему никакой документации. Вопросы и примеры, которые я нашел в Интернете, относятся к возможности «абсолютно позиционировать» TextFrame, но ни один из примеров, похоже, не делает этого точно.

В качестве отправной точки я пытаюсь расположить абзац текста так, как я описал на пустой странице. Вот мой последний эксперимент:

    static void AddBoilerPlate(Section section) {
        var sectionWidth = PdfSharp.PageSizeConverter.ToSize(PageSize.Letter).Width - section.Document.DefaultPageSetup.LeftMargin.Point -
            section.Document.DefaultPageSetup.RightMargin.Point;

        section.AddPageBreak();
        var frame = section.AddTextFrame();
        frame.RelativeVertical = RelativeVertical.Page;
        frame.Width = sectionWidth;
        frame.Top = ShapePosition.Bottom;
        frame.AddParagraph(DisclaimerText);
    }

Текст начинается прямо над нижним колонтитулом (синяя линия на этом снимке экрана), а затем проходит по нижнему колонтитулу:

введите здесь описание изображения

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

Обновление: вот скриншот, показывающий мою цель (подделка с использованием разрыва страницы и SpaceBefore):

введите здесь описание изображения

Обновление: вот несколько связанных статей, которые не совсем понимают меня, куда я пытаюсь пойти:

Обновление: обратите внимание, что добавление высоты к TextFrame заставляет текст выравниваться так, как мне нужно. Это не идеально, потому что я бы не хотел жестко закодировать высоту. Но это дает желаемый эффект:

    static void AddBoilerPlate(Section section) {
        var sectionWidth = PdfSharp.PageSizeConverter.ToSize(PageSize.Letter).Width - section.Document.DefaultPageSetup.LeftMargin.Point -
            section.Document.DefaultPageSetup.RightMargin.Point;

        section.AddPageBreak();
        var frame = section.AddTextFrame();
        frame.RelativeVertical = RelativeVertical.Page;
        **frame.Height = new Unit(75, UnitType.Millimeter);**
        frame.Width = sectionWidth;
        frame.Top = ShapePosition.Bottom;
        frame.AddParagraph(DisclaimerText);
    }

Обновление: обратите внимание, однако, что установка высоты TextFrame не решает окончательной проблемы. Контент, добавленный перед шаблоном, должен подтолкнуть шаблон к следующей странице, если для него недостаточно места, а этого не происходит.


person David Cater    schedule 02.05.2017    source источник


Ответы (1)


Обновление: после того, как я попробовал это сам (у меня была такая же проблема), добавьте невидимый элемент с высотой, которую вы хотите иметь, непосредственно перед нижним элементом. Если невидимый элемент не помещается, будет казаться, что разрыв страницы произошел из-за нижнего элемента. Работает как шарм. (совет: я добавил границу к обоим элементам для тестирования, чтобы убедиться, что макет правильный)

person George    schedule 23.02.2018
comment
Предложения должны быть добавлены в качестве комментария. - person Sunil; 23.02.2018