Очистка PrintDocument - PullRequest
       3

Очистка PrintDocument

1 голос
/ 14 февраля 2011

У меня есть метод, который делает печать нескольких документов (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, и они добавляются автоматически). Если вы можете исправить мой метод или предложить другой для достижения моей цели, я был бы очень признателен. Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 февраля 2011

Почему бы просто не создать новый печатный документ перед каждой печатью?

Так что в PrintIt

static public void PrintIt(string inputString){    
    Document = new PrintDocument();
    Document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
    Document.Print();
}

Вы, вероятно, слишком усложняете это.

2 голосов
/ 14 февраля 2011

Эта строка кода

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);
}

Хорошо, последнее, что я могу предложить, это очистить графику внутри лямбда-страницы.

Document.PrintPage += (sender, e) => { e.Graphics.Clear(Color.White); Document_PrintText(e, inputString);
0 голосов
/ 14 февраля 2011

вы должны изменить «PrintPageEventArgs e» на «PrintEventArgs e» в вашем методе Document_Clear, см. Здесь: http://msdn.microsoft.com/en-us/library/system.drawing.printing.printeventhandler.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...