将Dictionary <string,string =“”>列表打印到文件</string,>

时间:2011-12-25 13:18:23

标签: c# winforms

假设我们在程序中声明了以下行:

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

所以我们要将此列表的每个成员打印到一个文件和单独的页面中,但是所有文档都在MyDoc.xps之内。我怎样才能实现目标?

编辑:我的难点在于如何在打印过程中创建新页面?

很抱歉,如果它与其他问题重复,我无法在网站线程中得到我的答案。 :|

1 个答案:

答案 0 :(得分:3)

一种有效的方法如下:

  1. 使列表成为全局类成员
  2. 使用PrintDocument下的System.Drawing.Printing类,并使用其PrintPage事件逐个设置页面。
  3. 示例代码:

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