C# 清除打印文档
我有一个方法可以打印多个文档。除了第一次打印完成后,第二次打印包括其顶部的第一次打印之外,它工作得非常好。就像第二张照片上有两层一样。第三个印刷品,包括第一个和第二个印刷品,就好像每个印刷品都在一个透明层上一样。基本上,我希望能够做到的是在每次打印时清除文档的内容C# 清除打印文档,c#,printing,C#,Printing,我有一个方法可以打印多个文档。除了第一次打印完成后,第二次打印包括其顶部的第一次打印之外,它工作得非常好。就像第二张照片上有两层一样。第三个印刷品,包括第一个和第二个印刷品,就好像每个印刷品都在一个透明层上一样。基本上,我希望能够做到的是在每次打印时清除文档的内容 static private PrintDocument Document = new PrintDocument(); static public void PrintIts(IEnumerable<string> i
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);
}
我尝试这样做时遇到的错误是:
“文档\u清除”没有过载
匹配代理
“System.Drawing.Printing.PrintEventHandler”
我对编写自己的事件方法非常陌生,通常我都是在winForm开发中编写的,这些方法是自动添加的。如果你能纠正我的方法,或者建议一种不同的方法来实现我的目标,我将非常感激。谢谢 您必须在文档清除方法中将PrintPageEventArgs e更改为PrintEventArgs e,请参见此处:您必须在文档清除方法中将PrintPageEventArgs e更改为PrintEventArgs e,请参见此处:为什么不在每次打印之前创建一个新的打印文档 所以在PrintIt中
您可能把这件事复杂化了。为什么不在每次打印之前创建一个新的打印文档呢 所以在PrintIt中 你可能把这件事复杂化了。这行代码
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);
这行代码
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);
我以前没有使用过PrintDocument,所以不确定这是否正确,但您是否尝试过将对象设置为局部对象而不是全局对象。所以每次调用PrintIt时都要创建一个新的PrintIt,这会使事情变得更复杂。我不想谈这个问题,但我宁愿继续我的问题。抱歉,我不想共享我的所有代码,谢谢。我以前没有使用PrintDocument,因此不确定这是否正确,但您是否尝试过将对象设置为本地而不是全局。所以每次调用PrintIt时都要创建一个新的PrintIt,这会使事情变得更复杂。我不想谈这个问题,但我宁愿继续我的问题。抱歉,我不想共享我的所有代码,谢谢。我收到了此错误:“PrintEventArgs”不包含“Graphics”的定义我收到了此错误:“PrintEventArgs”不包含“Graphics”的定义我收到的“PrintEventArgs”不包含“Graphics”的定义。我是否需要添加一个引用或其他东西来实现这一点?然后我将使用msarchet建议的示例。只需在每次打印时实例化一个新的PrintDocument。如果必须使用EndPrint事件,只需在EndPrint事件处理程序Document=new PrintDocument中使用此行;我不能透露我的代码,但这样做实际上会使事情更加复杂。如果我能弄清楚如何澄清,那就更好了。谢谢。好的,我建议最后一件事是清除打印页lambda中的图形。Document.PrintPage+=发件人,e=>{e.Graphics.ClearColor.White;Document_PrintTexte,inputString;。这当然是假设每个页面都有自己的图形实例,也就是说,您不会清除其他页面的图形。我不太确定PrintDocs如何在regardCraigt中工作,这非常好,谢谢。我会将其添加到您的解决方案中,以便其他人可以更轻松地找到它y、 :我得到的“PrintEventArgs”不包含“Graphics”的定义。我是否需要添加引用或其他内容来实现此操作?然后我将使用msarchet建议的示例。只需在每次打印时实例化一个新的PrintDocument。如果必须使用EndPrint事件,只需在EndPrint事件处理程序文档中使用此行即可=新建PrintDocument;我无法显示我的代码,但这样做实际上会使事情变得更复杂。如果我能找出如何清除内容,那将是更好的选择。谢谢。好的,我最后建议的是清除printpage lambda.Document.printpage+=发件人,e=>{e.Graphics.ClearColor.White;Document_PrintTexte,inputString;。这当然是假设每个页面都有自己的图形实例,也就是说,您不会清除其他页面的图形。我不太确定PrintDocs如何在regardCraigt中工作,这非常好,谢谢。我会将其添加到您的解决方案中,以便其他人可以更轻松地找到它y、 :