2011-05-11 61 views
0

這是我的第一篇文章.... 我在我的任務中有一個問題... ..我能夠獲得流文檔上的文本文件,但現在我必須劃分正確的內容在運行時分頁,即如果內容是巨大的,他們會在運行時讓頁面數量減少。PageBreak流程文檔在運行時

請幫助... .. 蔭附加的初始代碼:

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」現在是一個流文件,需要breaked到頁面在運行時。 在此先感謝。

+0

請閱讀[格式幫助](http://stackoverflow.com/editing-help)並在發佈屠殺代碼之前查看預覽。 – 2011-05-11 11:41:07

+0

對不起,我會照顧我的下一篇文章的格式,但現在即時在gr8需要你的幫助....請幫助解決這個問題。 – Rishabh 2011-05-11 12:18:34

+0

現在Iam打算用一種方式註釋一個流程文檔內容,只有其他文本(如第1,第3,第5 ......)變成有色,而其他文本保持原樣。請在這方面提供任何幫助..... – Rishabh 2011-05-16 13:24:10

回答

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

看起來您已經創建了第二個帳戶,這可能會讓您感到困惑 - 回答您自己的問題完全可以接受,但我相信系統會讓您等一會兒才能接受它);但是,如果某人的回答有幫助你到最後的解決方案,通過點擊問題左側的向上箭頭,給他們一個Upvote是禮貌的。乾杯。 – 2011-05-17 11:29:27

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 }); 
    } 
} 
+0

多一個幫助H.B. ,我可以在運行時使用上面的代碼提取每行顯示的數據嗎? – Rishabh 2011-05-12 06:08:30

+0

我不太明白你的意思,如果你對文檔有所瞭解,你幾乎可以在運行時做任何事情,你只需進入層次結構並找到包含文本的元素,通常是'運行'。 – 2011-05-12 06:26:12

+0

你能不能提供一種類似於代碼示例的方式,其中使用了閱讀器/查看器的任何屬性....實際上,我想要遍及閱讀器/查看器上顯示的每一行文本,因爲我必須引起換行符在包含在文本中的特殊字符'\ f'之後。這隻能做,如果我創建一個檢查每一行數據,我會遇到'\ f'我將使用BreakPageBefore屬性。 – Rishabh 2011-05-12 06:40:59