У меня есть flowdocument
с повторяющимся верхним / нижним колонтитулом, который создается с помощью пользовательского DocumentPaginator
. Проблема в том, что мне нужен другой размер заголовка для первой страницы или, другими словами, мне нужен другой PagePadding
для первой страницы. DocumentPaginator
с повторяющимся верхним / нижним колонтитулом было описано много раз (например, здесь или здесь ), но никогда (?) Для заголовков разного размера (очень похоже вопрос без ответа). Мой фрагмент кода:
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, 0.7 * 96, 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
.