我有一个flowdocument
,其中重复了自定义DocumentPaginator
生成的页眉/页脚。问题是第一页需要不同的标题大小,换句话说,第一页需要不同的PagePadding
。
多次重复描述页眉/页脚的DocumentPaginator
(例如here或here),但是从未描述过不同大小的页眉(非常相似的question,但没有答案) 。
我的代码段:
public class ReportPaginator : DocumentPaginator
{
private DocumentPaginator _flowDocumentpaginator;
private readonly FlowDocument _flowDocument;
public ReportPaginator(FlowDocument document)
{
_flowDocumentpaginator = ((IDocumentPaginatorSource)document).DocumentPaginator;
_flowDocument = document;
}
public override DocumentPage GetPage(int pageNumber)
{
DocumentPage page = _flowDocumentpaginator.GetPage(pageNumber);
ContainerVisual newVisual = new ContainerVisual();
DrawingVisual header = new DrawingVisual();
if (pageNumber == 0)
{
//smaller header
[...]
}
else
{
//normal header
[...]
}
newVisual.Children.Add(header);
if (pageNumber == 0)
{
//set different margins for the first page
_flowDocument.PagePadding = new Thickness(0.7 * 96,93.2,0.7 * 96,74);
_flowDocumentpaginator = ((IDocumentPaginatorSource)_flowDocument).DocumentPaginator;
page = _flowDocumentpaginator.GetPage(pageNumber);
}
else if (pageNumber == 1)
{
//set "normal" margins for other pages
_flowDocument.PagePadding = new Thickness(0.7 * 96,180,74);
_flowDocumentpaginator = ((IDocumentPaginatorSource)_flowDocument).DocumentPaginator;
page = _flowDocumentpaginator.GetPage(pageNumber);
}
newVisual.Children.Add(page.Visual);
DrawingVisual footer = new DrawingVisual();
[...]
newVisual.Children.Add(footer);
return new DocumentPage(newVisual,page.Size,page.BleedBox,page.ContentBox);
}
}
此代码产生的页面大小正确(第一个页面比其他页面大),但分页被打断:第一页底部的几行在第二页的顶部重复,因为更改后重新计算了分页PagePadding
。