我正在使用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
-
将表保存在一起("in one piece") . 一旦我找出相对于页面底部对齐的问题,这将非常有用:Keep table in one piece 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高度不能解决最终问题 . 如果没有足够的空间,那么在样板之前添加的内容应该将样板推到下一页,而这种情况并没有发生 .
1 回答
更新:在我自己尝试之后(我遇到了同样的问题),在底部元素之前添加一个不可见的元素和你想要的高度 . 如果隐形元素不适合,看起来由于底部元素而发生分页 . 奇迹般有效 . (提示我为两个元素添加了边框以进行测试,因此我能够确保布局正确)