Разбивка на страницы с использованием DocumentPaginator из FlowDocument, который содержит StackPanel

Я хочу создавать постраничные документы из FlowDocument объект, который содержит StackPanel элемент. Я пытался с помощью DocumentPaginator,

До сих пор я пробовал этот код ниже, но мне не повезло, то есть генерируется только одна усеченная страница, а ее содержимое разрезается пополам по вертикали.

// stackPanel contains elements that their total heights 
// make the page should break into several pages.
StackPanel stackPanel = ...;

BlockUIContainer blockUiContainer = new BlockUIContainer(stackPanel);
FlowDocument flowDoc = new FlowDocument(blockUiContainer);
flowDoc.PageHeight = InchToPoint(paperSizeA4.Height); // paperSizeA4.Height: integer value
flowDoc.PageWidth = flowDoc.ColumnWidth = InchToPoint(paperSizeA4.Width); // paperSizeA4.Width: integer value
flowDoc.PagePadding = new Thickness(40);

DocumentPaginator docPaginator = ((IDocumentPaginatorSource)flowDoc).DocumentPaginator;
docPaginator.ComputePageCount();


Когда я печатаю документ в PDF, это результат, как я уже говорил, только одна страница, а ее содержимое разрезается пополам по вертикали (документ на этом изображении уменьшен на 50%):

Итоговый документ


Я что-то упускаю, чтобы сделать нумерацию страниц? Или я реализовал это неправильно?

1 ответ

BlockUIContainer не может занимать несколько страниц. Я предлагаю вынуть StackPanel и использовать BlockUIContainer для каждого элемента в списке.

Другие вопросы по тегам