2012-02-18 157 views
3

雖然在網上有一些教程,但我仍然爲什麼不能正確打印多個頁面而失去意義。我究竟做錯了什麼?如何從WinForms打印多個頁面?

public static void printTest() 
{ 
    PrintDialog printDialog1 = new PrintDialog(); 
    PrintDocument printDocument1 = new PrintDocument(); 

    printDialog1.Document = printDocument1; 
    printDocument1.PrintPage += 
     new PrintPageEventHandler(printDocument1_PrintPage); 

    DialogResult result = printDialog1.ShowDialog(); 
    if (result == DialogResult.OK) 
    { 
     printDocument1.Print(); 
    }  
} 

static void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    Graphics graphic = e.Graphics; 
    SolidBrush brush = new SolidBrush(Color.Black); 

    Font font = new Font("Courier New", 12); 

    e.PageSettings.PaperSize = new PaperSize("A4", 850, 1100); 

    float pageWidth = e.PageSettings.PrintableArea.Width; 
    float pageHeight = e.PageSettings.PrintableArea.Height; 

    float fontHeight = font.GetHeight(); 
    int startX = 40; 
    int startY = 30; 
    int offsetY = 40; 

    for (int i = 0; i < 100; i++) 
    {    
     graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY); 
     offsetY += (int)fontHeight; 

     if (offsetY >= pageHeight) 
     { 
      e.HasMorePages = true; 
      offsetY = 0; 
     } 
     else { 
      e.HasMorePages = false; 
     } 
    } 
} 

你可以找到這個代碼的打印結果這裏的一個例子:Printed Document

回答

8

你永遠不會從環形折返。將其更改爲:

if (offsetY >= pageHeight) 
{ 
    e.HasMorePages = true; 
    offsetY = 0; 
    return; // you need to return, then it will go into this function again 
} 
else { 
    e.HasMorePages = false; 
} 

此外,您需要更改循環在第2頁,而不是再次重新開始我= 0,對當前數字開始。

+0

是的,這是有效的。 一個問題:每當HasMorePages觸發標誌時,整個函數PrintPage將從開始再次運行? – SubjectX 2012-02-18 15:28:06

+1

e.HasMorePages在函數返回後進行評估(不是在設置時)。如果它是真的,它再次調用該函數。如果它是假的,它不會停止打印。 – thoean 2012-02-18 15:56:58

+0

我現在已經擴展了我的程序,但我又被卡住了,可能是因爲同樣的原因。我應該問這裏還是開新的問題? – SubjectX 2012-02-19 13:24:50