2011-12-25 120 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