Я использую 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: http://forum.pdfsharp.net/viewtopic.php?p=753#p753
- Кажется, отвечает на тот же вопрос, но не предоставляет информацию о том, как абсолютно позиционировать TextFrame: http://forum.pdfsharp.com/viewtopic.php?f=2&t=587
- Сведение таблицы вместе на странице ("в одно целое"). Это будет полезно, когда я выясню проблему с выравниванием относительно нижней части страницы: Сохраняйте таблицу в целости и сохранности MigraDoc / PDFsharp
Обновление: обратите внимание, что добавление высоты к 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 не решает окончательной проблемы. Контент, добавленный перед шаблоном, должен подтолкнуть шаблон к следующей странице, если для него недостаточно места, а этого не происходит.