我知道如何显示页码以及如何在页脚中对齐它们。但是我的问题是我的页脚包含一些自定义文本,这些文本应左对齐,页码应右对齐。
string footer = "My custom footer";
Paragraph footerParagraph = section.Footers.Primary.AddParagraph(footer);
footerParagraph.AddTab();
footerParagraph.AddPageField();
上面将为页面1生成“我的自定义页脚1”,我需要页面nmuber位于页面的最右端。我可以添加额外的空格或制表符,但认为必须有一种干净的方法来实现此目的。谢谢。
最佳答案
保持简单:使用制表位
最好的方法与大多数文字处理工具相同:将右对齐的制表位放在页面的右边缘。这很简单,但是我在任何地方都找不到“完整”的解决方案,因此这是您需要的:
// Grab the current section, and other settings
var section = documentWrapper.CurrentSection;
var footer = section.Footers.Primary;
var reportMeta = documentWrapper.AdminReport.ReportMeta;
// Format, then add the report date to the footer
var footerDate = string.Format("{0:MM/dd/yyyy}", reportMeta.ReportDate);
var footerP = footer.AddParagraph(footerDate);
// Add "Page X of Y" on the next tab stop.
footerP.AddTab();
footerP.AddText("Page ");
footerP.AddPageField();
footerP.AddText(" of ");
footerP.AddNumPagesField();
// The tab stop will need to be on the right edge of the page, just inside the margin
// We need to figure out where that is
var tabStopPosition =
documentWrapper.CurrentPageWidth
- section.PageSetup.LeftMargin
- section.PageSetup.RightMargin;
// Clear all existing tab stops, and add our calculated tab stop, on the right
footerP.Format.TabStops.ClearAll();
footerP.Format.TabStops.AddTabStop(tabStopPosition, TabAlignment.Right);
最难的部分是弄清楚制表符停止位置应该是什么。因为我很无聊并且非常喜欢封装,所以我根据页面宽度减去水平页面边距来动态计算制表符停止位置。但是,获取当前页面宽度并不像我想象的那么容易,因为我正在使用
PageFormat
设置页面尺寸。下一个挑战:动态获取页面宽度
首先,我真的很讨厌拥有紧密耦合的代码(想想:扇入和扇出),所以即使我此时知道页面宽度是多少,即使是硬编码,我仍然想要在一个地方硬编码它,然后在其他地方引用那个地方。
我保留了一个自定义的“ has-a” /包装类,以将这些内容封装到其中。这是我的代码中的
documentWrapper
。此外,我没有将任何PDFSharp / MigraDoc类型公开给我的应用程序的其余部分,因此我使用ReportMeta
作为通信设置的方法。现在获取一些代码。设置该部分时,我使用MigraDoc
PageFormat
定义当前部分的页面大小:// Create, and set the new section
var section = documentWrapper.CurrentDocument.AddSection();
documentWrapper.CurrentSection = section;
// Some basic setup
section.PageSetup.PageFormat = PageFormat.Letter; // Here's my little bit of hard-coding
Unit pageWidth, pageHeight;
PageSetup.GetPageSize(PageFormat.Letter, out pageWidth, out pageHeight);
var reportMeta = documentWrapper.AdminReport.ReportMeta;
if (reportMeta.PageOrientation == AdminReportMeta.ORIENT_LANDSCAPE)
{
section.PageSetup.Orientation = Orientation.Landscape;
documentWrapper.CurrentPageWidth = pageHeight;
}
else
{
section.PageSetup.Orientation = Orientation.Portrait;
documentWrapper.CurrentPageWidth = pageWidth;
}
在这里真正重要的是,我要存储
CurrentPageWidth
,这在设置我们的制表位时非常重要。 CurrentPageWidth
属性只是MigraDoc Unit
类型。我可以通过将MigraDoc的PageSetup.GetPageSize
与我选择的PageFormat
一起使用来确定这是什么。关于c# - 在MigraDoc中将页码对齐到右上角,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29246146/