MigraDoc:对齐页脚上方页面底部的文本或表格

时间:2017-05-02 19:21:00

标签: c# pdf-generation pdfsharp 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);
    }

文本从页脚上方(此屏幕截图中的蓝线)开始,然后在页脚上运行:

enter image description here

一旦我得到一段文字对齐,我想我可以使用一列一行而不是一行,然后将所有内容放在那里。

更新:这是显示我的目标的屏幕截图(使用分页符和SpaceBefore伪造):

enter image description here

更新:这里有一些相关的文章并没有让我到达我想去的地方:

更新:请注意,向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 个答案:

答案 0 :(得分:0)

更新:在我自己尝试之后(我遇到了同样的问题),在底部元素之前添加一个不可见的元素和你想要的高度。如果隐形元素不适合,看起来由于底部元素而发生分页。 奇迹般有效。 (提示我为两个元素添加了边框以进行测试,因此我能够确保布局正确)