PageBreak в потоковых документах во время выполнения - PullRequest
0 голосов
/ 11 мая 2011

это мой первый пост .... У меня есть проблема в моей задаче… я могу получить текстовый файл в потоковом документе, но теперь я должен разделить содержимое на правильные разрывы страниц во время выполнения, то есть, если содержимое огромно, они получат себя по количеству страниц, которые тоже при во время выполнения.

Пожалуйста, помогите ... Iam Прикрепив исходный код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TextOnFlowDoc
{
    /// <summary>
    /// Interaction logic for Page1.xaml
    /// </summary>
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
            Paragraph paragraph = new Paragraph();

            paragraph.Inlines.Add(System.IO.File.ReadAllText(@"C:\Lis.txt"));
            paragraph.FontFamily = new FontFamily("CourierNew");

            FlowDocument document = new FlowDocument(paragraph);
            // FlowDocumentReader rdr = new FlowDocumentReader();
            FlowDocScl.Document = document;
        }
    }
}

Теперь этот «FlowDocScl» теперь является потоковым документом, и его нужно разбить на страницы В РАБОТЕ. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Я не уверен, почему вам нужны пользовательские разрывы страниц, если вы отображаете его в FlowDocumentPageViewer, например, вы получаете автоматические разрывы, если содержимое слишком велико для зрителя.

Если вам нужно вставить разрывы по требованию, вам нужно разделить документ на Blocks, у них есть свойство с именем BreakPageBefore, которое при значении true вставляет разрыв страницы перед этим блоком, очевидно.

Что-то вроде этого (не проверено):

private void BreakAndAddText(string text)
{
    var pages = text.Split(new string[] { "\\f" }, StringSplitOptions.None);
    foreach (var page in pages)
    {
        document.Blocks.Add(new Paragraph(new Run(page)) { BreakPageBefore = true });
    }
}
0 голосов
/ 16 мая 2011

Большое спасибо за ваш совет. Я использовал ваш код следующим образом и добился того, чего хотел.

        var pages = ts.Split(new string[] { "\f" }, StringSplitOptions.None);

        for (int i = 0; i < pages.Length; i++)
        {
            if (i != pages.Length - 1)
            {
                cmbPageNbr.Items.Add(i + 1);
            }
        }

        if (cmbPageNbr.Items.Count > 0)
        {
            cmbPageNbr.SelectedIndex = 0;
        }
        LoadPageWiseData(cmbPageNbr.SelectedIndex);
    }

    private void LoadPageWiseData(int pageNbr)
    {
        var pages = ts.Split(new string[] { "\f" }, StringSplitOptions.None);
        FlowDocument document = new FlowDocument();
        document.Blocks.Add(new Paragraph(new Run(pages[pageNbr])) { BreakPageBefore = true });
        document.FontFamily = new System.Windows.Media.FontFamily("Courier New");
        document.FontSize = 12;
        docViewer.Document = document;
    }
...