运行时流页文档中的分页符

时间:2011-05-11 10:03:22

标签: wpf flowdocument

这是我的第一篇文章.... 我的任务中有一个问题...... ..能够在流文档上获取文本文件,但现在我必须在运行时将内容划分为正确的分页符,即如果内容很大,那么它们也会在页面的数量上自行调整运行时。

请帮助......  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”现在是一个流文档,需要在AT RUNTIME页面中分解。 在此先感谢。

2 个答案:

答案 0 :(得分:2)

我不确定您为什么要自定义分页符,如果您在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 });
    }
}

答案 1 :(得分:0)

非常感谢您的建议。我已按照以下方式使用您的代码并实现了我想要的目标。

        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;
    }