2014-02-03 2 views
0

Я хочу напечатать на документе printPocument NextPageusing на C#. Используемый мной код продолжает увеличивать количество страниц до бесконечного цикла.Как напечатать на следующей странице в C#

enter image description here

код, я использую это следующим образом:

PaperSize pze = new PaperSize("Custom Paper size", 800, 150); 

public void Print() 
{ 
    printDocument1.DefaultPageSettings.PaperSize = pze; 
    printDocument1.Print(); 
} 
int YHeight = 0; 
private void printDocument1_PrintPage(object sender,  System.Drawing.Printing.PrintPageEventArgs e) 
{ 
     panel1_Paint(sender, new PaintEventArgs(e.Graphics, this.ClientRectangle)); 
     int heightOfPage = 150; 
     float pageHeight = e.MarginBounds.Height; 
     while (heightOfPage + 100 < pageHeight && YHeight < this.SaveBeforePrint.Count) 
     { 

      YHeight += 1; 
      heightOfPage += 20; 
     } 

     if (YHeight < this.SaveBeforePrint.Count) 
     { 
      e.HasMorePages = true; 
      return; 
     } 
     else 
     { 
      e.HasMorePages = false; 
     } 
} 
+1

Просьба уточнить ваш вопрос, название вопроса говорит следующая строка и первая строка вашего поста говорит печать на следующей странице. Что на самом деле вы хотите достичь и что происходит прямо сейчас? –

+0

Вы должны рассмотреть возможность использования более отличительных имен между 'pageHeight' и' heightOfPage'. Вероятно, проблема заключается в том, что 'YHeight' в какой-то момент больше не увеличивается, но все еще ниже, чем' this.SaveBeforePrint.Count'. –

+0

Извините, что хочу напечатать на следующей странице. Отредактировано мое сообщение @JibranKhan –

ответ

0

Привет изменить метод PrintPage, как показано ниже ..

здесь countInRow является счетчиком штрих-кода в строке на каждый страница для отображения ..

int countInRow = 3; // number of barcode in a row on every page. 

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{   
    panel1_Paint(sender, new PaintEventArgs(e.Graphics, this.ClientRectangle)); 

    int locCount = SaveBeforePrint.Count; 
    for (int i = 0; i < countInRow && i < locCount; i++) 
    { 
     SaveBeforePrint.RemoveAt(0);  //remove the top element always 
    } 
    e.HasMorePages = (SaveBeforePrint.Count > 0); 
} 

Вы должны сделать o пе больше изменений в «panel1_Paint» метода также, изменить для условия цикла

private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    . 
    . 
    . 
    for (int serial = 0; serial < SaveBeforePrint.Count && serial < countInRow; serial++) 
    { 
    // you code goes here.. 
    } 
    . 
    . 
    . 
} 
Смежные вопросы