Is it possible in WPF to retrieve the contents of each document by page number?

I am using DocumentPaginator to split FlowDocument text into pages. Is it possible to get the contents of each page by page number after ComputePageCount ()? If not, how can I do it another way?

code:

var flowDocument = this.Document; flowDocument.MaxPageHeight = this.MaxContentHeight; DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator; paginator.ComputePageCount(); 
+1
source share
2 answers

Yes it is possible.

Here is an example:

MainWindow.xaml

 <Window x:Class="WpfApplication.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <DockPanel> <TextBlock x:Name="outputTextBlock" DockPanel.Dock="Bottom"/> <FlowDocumentPageViewer> <FlowDocument x:Name="flowDocument" Loaded="OnFlowDocumentLoaded"> <Paragraph>First page</Paragraph> <Paragraph BreakPageBefore="True">Second page</Paragraph> <Paragraph BreakPageBefore="True">Third page</Paragraph> </FlowDocument> </FlowDocumentPageViewer> </DockPanel> </Window> 

MainWindow.xaml.cs

 using System.Text; using System.Windows; using System.Windows.Documents; namespace WpfApplication { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void OnFlowDocumentLoaded(object sender, RoutedEventArgs e) { var paginator = (DynamicDocumentPaginator)((IDocumentPaginatorSource)this.flowDocument).DocumentPaginator; var text = new StringBuilder(); for (int pageNumber = 0; ; ++pageNumber) using(var page = paginator.GetPage(pageNumber)) using (var nextPage = paginator.GetPage(pageNumber + 1)) { if (page == DocumentPage.Missing) break; var startPosition = (TextPointer)paginator.GetPagePosition(page); var endPosition = nextPage == DocumentPage.Missing ? this.flowDocument.ContentEnd : (TextPointer)paginator.GetPagePosition(nextPage); var range = new TextRange(startPosition, endPosition); text.AppendFormat("Page {0}:", pageNumber + 1).AppendLine(); text.AppendLine(range.Text); } this.outputTextBlock.Text = text.ToString(); } } } 
+2
source

You can use the GetPage function of the DocumentPaginator object. It takes the page number as a parameter.

See http://msdn.microsoft.com/en-us/library/system.windows.documents.documentpaginator.getpage(v=vs.110).aspx

0
source

Source: https://habr.com/ru/post/1443326/


All Articles