【问题标题】:Add a footer on Migradoc last page在 Migradoc 最后一页添加页脚
【发布时间】:2018-12-30 19:37:49
【问题描述】:

我需要在 MigraDoc 上添加页脚。 以下代码为所有页面添加页脚。

页面有一个需要出现在每个页面上的标题。

 Document document = new Document();
 PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false);
 Section HeaderSection = document.AddSection();
 HeaderSection.PageSetup.DifferentFirstPageHeaderFooter = false;

 MigraDoc.DocumentObjectModel.Shapes.Image image = HeaderSection.Headers.Primary.AddImage("../images/logo.jpg");
 image.Height = new Unit(65);
 image.Width = new Unit(150);
 image.LockAspectRatio = false;
 image.RelativeVertical = RelativeVertical.Line;
 image.RelativeHorizontal = RelativeHorizontal.Margin;

 Paragraph ParaHead1 = HeaderSection.AddParagraph();
 Parahead1.AddFormattedText("..dfg");
 Table table = HeaderSection.Footers.Primary.AddTable();
 table.Borders.Width = 0;

 Column column = table.AddColumn();
 column.Width =Unit.FromPoint(300);
 column.Format.Alignment = ParagraphAlignment.Left;
 Column column1 = table.AddColumn();
 column1.Width = Unit.FromPoint(200);
 column1.Format.Alignment = ParagraphAlignment.Left;
 Row row = table.AddRow();

 Cell cell = row.Cells[0];
 cell.AddParagraph("Regards,");
 cell = row.Cells[1];
 Paragraph para1 = cell.AddParagraph();
 para1.AddFormattedText("Support Team");

我需要页脚表只出现在最后一页。

我不想添加将最后一段作为表格添加为页脚,因为这会导致页脚仅出现在文本中。

页面上的内容是动态的。

【问题讨论】:

  • 我不确定最后一段是什么意思...

标签: pdfsharp migradoc


【解决方案1】:

您不能仅将 MigraDoc 页脚用于最后一页的页脚。

要达到这种效果,您必须将文本添加到主体 - 或稍后使用 PDFsharp 绘制页脚。

您可以使用TextFrame 将页脚置于固定位置,但您必须注意TextFrame 不会与其他主体内容重叠。

回答评论中的问题:

  • 要将“页脚”直接放在内容下方,只需以您喜欢的任何形式(表格、段落……)将其添加到正文中
  • 要将页脚置于绝对位置(例如,使用TextFrame):我建议在正文文本中添加一个空的虚拟段落(如果需要),以确保页脚不与正文重叠;虚拟段落的高度将是与文档主体区域重叠的页脚高度

【讨论】:

  • 谢谢你的回复,但是我怎么知道最后一个内容的位置以便在之后添加页脚。
  • @user1339913 当您按预期使用 MigraDoc 时,您不必知道位置。我更新了我的答案。
  • 因为页面内容是动态的。在某些情况下,页脚打印在顶部。我需要知道最后一页上文本的高度或位置,或者 MigraDoc 如何计算何时分页是字符还是行高。然后我可以添加一个虚拟 para 并根据最后一页的内容调整它的高度。
  • @user1339913 PDF 渲染器在准备 PDF 文件时添加分页符。 RTF 渲染器根本不添加分页符。如果上一页已满,那么“页脚”将单独出现在最后一页上——你无法避免这种情况,对吗?恐怕我还是不明白你的期望。
【解决方案2】:

我使用的方法是在 Section 内的 PageSetup 中添加一个标志。 该标志告诉引擎用 LastPageHeader 和 LastPageFooter 关键字指定的页眉和页脚替换最后一页页眉和页脚。

这是支持最后一页页眉和页脚的部分示例(它使用特殊的 Migradoc/xml 语法,但也支持原始 mddl):

<Section>
      <Attributes>
          <PageSetup PageHeight="29.7cm" PageWidth="21cm" Orientation="Portrait" DifferentLastPageHeaderFooter="true"/>
      </Attributes>
      <LastPageHeader>
      ....
      </LastPageHeader>
      <LastPageFooter>
      ....
      </LastPageFooter>
  </Section>

支持此功能的分支可在此处获得:https://github.com/emazv72/MigraDoc
请注意,LastPageHeader 和 LastPageFooter 仅适用于 PDF,不适用于 RTF。

【讨论】:

  • 这个解决方案在渲染到 RTF 时是否也有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多