Разбивка на страницы с использованием 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 для каждого элемента в списке.