1

我正在尝试通过虚拟 PDF 打印机驱动程序(FoxitPDF Writer、doPDF、NovaPDF 等)打印一些页面。

它很少打印。大多数时候页面是空白的。当我尝试从 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);
        }
4

1 回答 1

2

代码看起来没问题。但是,缺少 BeginPrint 事件处理程序。需要将 _listItemCount 变量设置回零。没有它,只有第一个打印输出可以工作,任何后续的打印尝试都只会产生一个空页面,因为 _listItemCount 已经超过 _studentsList.Count

于 2010-12-05T15:02:08.267 回答