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、 :