2010-12-05 83 views
1

我試圖通過虛擬PDF打印機驅動程序(FoxitPDF Writer,doPDF,NovaPDF等)打印一些頁面。.net 2.0 PrintDocument問題

很少印刷。大部分時間頁面都是空白的。當我嘗試從MS Word中打印文檔時,情況並非如此。

爲什麼?我應該尋找什麼來解決這個問題?

這是我的代碼:

void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
     { 
      if (_studentsList != null) 
      { 
       Graphics g = e.Graphics; 
       PointF point = new PointF(0, yStudentTopMargin); 

       int count = 2; 

       while (true) 
       { 
        if ((count == 0) || (_listItemCount > _studentsList.Count - 1)) 
        { 
         break; 
        } 

        StudentDrawer.DrawStudent(g, point, _studentsList[_listItemCount], xStudentBoxDistance, yStudentBoxDistance, xLineDistance, yLineDistance); 

        point.Y += (yStudentBoxDistance * 10); 

        count--; 
        _listItemCount++; 
       } 

       if (_listItemCount < _studentsList.Count) 
       { 
        e.HasMorePages = true; 
       } 
       else 
       { 
        e.HasMorePages = false; 
       } 
      } 
      else 
      { 
       return; 
      } 
     } 

public static void DrawStudent(Graphics g, PointF point, Student std, int xBoxDistance, int yBoxDistance, int xLineDistance, int yLineDistance) 
     { 
      SolidBrush brush = new SolidBrush(Color.Black); 
      Font boldFont = new Font("Times New Roman", yLineDistance * 2/3, FontStyle.Bold); 
      Font normalFont = new Font("Arial", yLineDistance * 2/3); 
      Pen pen = new Pen(brush); 

      const int fontSize = 10; 

      float x = point.X; 
      float y = point.Y; 

      float leftMargin = xBoxDistance;//175; 
      //const float rightMargin = 100; 
      float topMargin = yBoxDistance;//60; 
      //const float bottomMargin = 100; 

      StringDrawer.DrawRoll(g, "Roll No. :", std.RollNo.ToString(), fontSize + 2, x + leftMargin, y + topMargin , xLineDistance, yLineDistance); 
      StringDrawer.DrawHeading(g, "SUBJECT", "MARKS", "L. GRADE", "GP", fontSize, x + leftMargin, y + topMargin + (1 * yLineDistance), xLineDistance, yLineDistance); 
       ...... ... ... ... 
     ...... ... ... ... 
      StringDrawer.DrawSubject(g, "Total", std.Bangla1stPaper_Marks.ToString(), std.Bangla1stPaper_GradeLetter, std.Bangla1stPaper_GradePoint.ToString(), fontSize, x + leftMargin, y + topMargin + (15 * yLineDistance), xLineDistance, yLineDistance); 
     } 

public static void DrawHeading(Graphics g, string subject, string marks, string letterGrade, string gp, int fontSize, float x, float y, int xDistance, int yDistance) 
     { 
      SolidBrush brush = new SolidBrush(Color.Black); 
      Font boldFont = new Font("Times New Roman", fontSize, FontStyle.Bold); 
      Pen pen = new Pen(brush); 

      g.DrawRectangle(pen, x, y, xDistance, fontSize + 8); 
      g.DrawString(subject, boldFont, brush, x + (0 * xDistance * 1.2f), y); 

      g.DrawRectangle(pen, x + (1 * xDistance), y, xDistance, fontSize + 8); 
      g.DrawString(marks, boldFont, brush, x + (1 * xDistance * 1.3f), y); 

      g.DrawRectangle(pen, x + (2 * xDistance), y, xDistance, fontSize + 8); 
      g.DrawString(letterGrade, boldFont, brush, x + (2 * xDistance * 1.1f), y); 

      g.DrawRectangle(pen, x + (3 * xDistance), y, xDistance, fontSize + 8); 
      g.DrawString(gp, boldFont, brush, x + (3 * xDistance * 1.14f), y); 
     } 

回答

2

代碼看起來還好。但是,BeginPrint事件處理程序丟失。需要將_listItemCount變量設置回零。沒有它,只有第一個打印輸出將起作用,任何隨後的打印嘗試都只會產生一個空白頁面,因爲_listItemCount已經增加超出_studentsList.Count