2011-12-25 116 views
-2

假設我們聲明如下,計劃中的行:打印清單到文件

List<Dictionary<string, string>> list = new List<Dictionary<string, string>>(); 

,所以我們希望這個列表中的每個成員打印成文件,並在單獨的頁面,但都在一個文件中,如MyDoc.xps。我怎麼能做到我的目的?

編輯:我的困難是,如何在打印過程中創建新的頁面?

對不起,如果它與其他問題重複,我無法得到我的答案在網站線程。 :|該工程

+0

請閱讀**編輯**部分。 – 2011-12-25 13:26:01

+6

請解釋一下你曾經嘗試過什麼。 – Oded 2011-12-25 13:26:23

+0

你在Winforms或WPF中做這個嗎?這是關於.XPS文件的具體內容嗎? – Adam 2011-12-25 13:29:22

回答

3

的一種方法如下:

  1. 榜上無名全球類成員
  2. 使用PrintDocumentSystem.Drawing.Printing下,並使用其PrintPage事件來設置一個個的頁面。

示例代碼:

private List<Dictionary<string, string>> myList = new List<Dictionary<string, string>>(); 
private int pageIndex = 0; 
private void PrintButton_Click(object sender, EventArgs e) 
{ 
    PrintDocument document = new PrintDocument(); 
    document.PrintPage += new PrintPageEventHandler(document_PrintPage); 
    document.Print(); 
} 

void document_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    if (pageIndex >= myList.Count) 
    { 
     e.HasMorePages = false; 
     return; 
    } 

    Dictionary<string, string> curData = myList[pageIndex]; 
    List<string> lines = new List<string>(); 
    lines.Add("Items count: " + curData.Count); 
    curData.Keys.ToList().ForEach(key => 
    { 
     lines.Add(string.Format("Key: {0}, Value: {1}", key, curData[key])); 
    }); 
    e.Graphics.DrawString(string.Join("\n", lines), this.Font, SystemBrushes.WindowText, 0, 0); 
    pageIndex++; 
    e.HasMorePages = pageIndex < myList.Count; 
} 

在打印每一頁時,document_PrintPage方法將被調用。只要您不會將e.HasMorePages設置爲false,它將繼續打印新頁面。

編輯:強制創建.xps文件剛剛創建打印文檔時添加這兩條線:

document.PrinterSettings.PrintToFile = true; 
document.PrinterSettings.PrintFileName = "myfile.xps"; 
+0

非常感謝:)這是我的問題的答案:) – 2011-12-25 14:25:23

+1

歡呼@Hsesein它是基於我看到你的問題時得到和回想的舊代碼。 – 2011-12-25 20:42:44