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 に答える