我有一种方法可以打印多个文档(PrintIts)。它工作得很好,除非第一个打印完成后,第二个打印包括第一个打印在上面。就像第二印上有两层。第三次打印,包括第一次和第二次在其之上(仿佛每个打印是在一个透明的层)。基本上,我想要做的是清楚文档的内容与每一个打印。
static private PrintDocument Document = new PrintDocument();
static public void PrintIts(IEnumerable<string> inputStrings){
foreach(string inputString in inputStrings){
PrintIt(inputString);
}
}
static public void PrintIt(string inputString){
Document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
Document.Print();
}
static private void Document_PrintText(PrintPageEventArgs e, string inputString) {
e.Graphics.DrawString(inputString, new Font("Courier New", 12), Brushes.Black, 0, 0);
}我尝试通过以下操作来完成这一任务:
static public void PrintIt(string inputString){
Document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
Document.EndPrint += Document_Clear; //<- I added this extra line
Document.Print();
}
static private void Document_Clear(object sender, PrintPageEventArgs e){
e.Graphics.Clear(Color.White);
}当我尝试这样做时,我遇到的错误是:
没有重载“Document_Clear”匹配委托'System.Drawing.Printing.PrintEventHandler‘。
我对编写自己的事件方法非常陌生(我通常做winForm开发,这些方法是自动添加的)。如果你能纠正我的方法,或者建议一个不同的方法来完成我的目标,我会非常感激的。谢谢!
发布于 2011-02-14 16:48:46
这一行代码
static private void Document_Clear(object sender, PrintPageEventArgs e){
e.Graphics.Clear(Color.White);
}应改为
static private void Document_Clear(object sender, PrintEventArgs e){
e.Graphics.Clear(Color.White);
}好的,我最后建议的是清除打印页面lambda中的图形。
Document.PrintPage += (sender, e) => { e.Graphics.Clear(Color.White); Document_PrintText(e, inputString);发布于 2011-02-14 16:44:13
为什么不直接在每次打印之前创建一个新的打印文档?
所以在PrintIt
static public void PrintIt(string inputString){
Document = new PrintDocument();
Document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
Document.Print();
}你可能把事情复杂化了。
发布于 2011-02-14 16:43:32
您必须在您的PrintPageEventArgs方法中将"PrintEventArgs e“更改为”PrintEventArgs e“,请参阅此处:http://msdn.microsoft.com/en-us/library/system.drawing.printing.printeventhandler.aspx
https://stackoverflow.com/questions/4994686
复制相似问题