假设我们声明如下,计划中的行:打印清单到文件
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
,所以我们希望这个列表中的每个成员打印成文件,并在单独的页面,但都在一个文件中,如MyDoc.xps
。我怎么能做到我的目的?
编辑:我的困难是,如何在打印过程中创建新的页面?
对不起,如果它与其他问题重复,我无法得到我的答案在网站线程。 :|该工程
假设我们声明如下,计划中的行:打印清单到文件
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
,所以我们希望这个列表中的每个成员打印成文件,并在单独的页面,但都在一个文件中,如MyDoc.xps
。我怎么能做到我的目的?
编辑:我的困难是,如何在打印过程中创建新的页面?
对不起,如果它与其他问题重复,我无法得到我的答案在网站线程。 :|该工程
的一种方法如下:
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";
非常感谢:)这是我的问题的答案:) – 2011-12-25 14:25:23
欢呼@Hsesein它是基于我看到你的问题时得到和回想的旧代码。 – 2011-12-25 20:42:44
请阅读**编辑**部分。 – 2011-12-25 13:26:01
请解释一下你曾经尝试过什么。 – Oded 2011-12-25 13:26:23
你在Winforms或WPF中做这个吗?这是关于.XPS文件的具体内容吗? – Adam 2011-12-25 13:29:22