我正在使用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高度并不能解决最终问题。如果没有足够的空间,那么在样板之前添加的内容应该将样板推到下一页,并且没有发生。
答案 0 :(得分:0)
更新:在我自己尝试之后(我遇到了同样的问题),在底部元素之前添加一个不可见的元素和你想要的高度。如果隐形元素不适合,看起来由于底部元素而发生分页。 奇迹般有效。 (提示我为两个元素添加了边框以进行测试,因此我能够确保布局正确)