2010-12-05 36 views
1

J'essaie d'imprimer certaines pages via les pilotes d'imprimante Virtual PDF (FoxitPDF Writer, doPDF, NovaPDF, etc.)..net 2.0 Problème PrintDocument

Imprime rarement. La plupart du temps, les pages sont vides. Ce n'est pas le cas lorsque j'essaie d'imprimer un document depuis MS Word.

Pourquoi? Que dois-je rechercher pour résoudre le problème?

Ceci est mon code:

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

Répondre

2

Le code semble correct. Toutefois, le gestionnaire d'événements BeginPrint est manquant. Il est nécessaire de remettre la variable _listItemCount à zéro. Sans cela, seule la première impression fonctionnera, toute tentative ultérieure d'impression ne produira qu'une page vide puisque _listItemCount est déjà incrémenté au-delà de _studentsList.Count