假设我们在程序中声明了以下行:
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
所以我们要将此列表的每个成员打印到一个文件和单独的页面中,但是所有文档都在MyDoc.xps
之内。我怎样才能实现目标?
编辑:我的难点在于如何在打印过程中创建新页面?
很抱歉,如果它与其他问题重复,我无法在网站线程中得到我的答案。 :|
答案 0 :(得分:3)
一种有效的方法如下:
PrintDocument
下的System.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";