protected override void OnPrintPage(PrintPageEventArgs e) //Runs when the page starts printing { base.OnPrintPage(e); FeedbackData currentData = data[count]; int printHeight = DefaultPageSettings.PaperSize.Height - DefaultPageSettings.Margins.Top - DefaultPageSettings.Margins.Bottom; int printWidth = DefaultPageSettings.PaperSize.Width - DefaultPageSettings.Margins.Left - DefaultPageSettings.Margins.Right; int leftMargin = DefaultPageSettings.Margins.Left; int topMargin = DefaultPageSettings.Margins.Top; PointF cursor = new PointF(leftMargin, topMargin); //in essence where I am currently editing PointF cornerRectangle; SizeF measuredSize; //Used to store the results from measurements of string size SizeF totalSize; //Used to store the size of the entire line, used to calculate spacing string textToDraw; SizeF bulletSize = e.Graphics.MeasureString(config.bulletString, fonts.topics); //The size of the bullet point being used, used to determine spacings, #region Printing the faculty name textToDraw = currentData.facultyName; measuredSize = e.Graphics.MeasureString(textToDraw, fonts.title, printWidth); cursor.X = (DefaultPageSettings.PaperSize.Width - measuredSize.Width) / 2; e.Graphics.DrawString(textToDraw, fonts.title, config.brush, new RectangleF(cursor, measuredSize)); cursor.Y += measuredSize.Height + config.padding; cursor.X = leftMargin; #endregion #region Printing the topic name textToDraw = "Topic: " + currentData.topicName; measuredSize = e.Graphics.MeasureString(textToDraw, fonts.title, printWidth); cursor.X = (DefaultPageSettings.PaperSize.Width - measuredSize.Width) / 2; e.Graphics.DrawString(textToDraw, fonts.title, config.brush, cursor); cursor.Y += measuredSize.Height + config.padding; cursor.X = leftMargin; #endregion #region Printing the feedback details textToDraw = currentData.teacherName + " - " + currentData.topicNote + " / " + currentData.date.ToString(@"dd\/MM\/yyyy"); measuredSize = e.Graphics.MeasureString(textToDraw, fonts.title, printWidth); cursor.X = (DefaultPageSettings.PaperSize.Width - measuredSize.Width) / 2; e.Graphics.DrawString(textToDraw, fonts.title, config.brush, cursor); cursor.Y += measuredSize.Height + config.padding; cursor.X = leftMargin; #endregion #region Printing the name line totalSize = e.Graphics.MeasureString("Name: ", fonts.dataDescriptor); e.Graphics.DrawString("Name: ", fonts.dataDescriptor, config.brush, cursor); cursor.X += totalSize.Width; totalSize.Height = measuredSize.Height; totalSize = e.Graphics.MeasureString(currentData.studentName, fonts.data); e.Graphics.DrawString(currentData.studentName, fonts.data, config.brush, cursor); totalSize.Height = Math.Max(totalSize.Height, measuredSize.Height); cursor.X = leftMargin; cursor.Y += totalSize.Height + config.padding; #endregion #region Printing the grades line measuredSize = e.Graphics.MeasureString("Target grade: ", fonts.dataDescriptor); e.Graphics.DrawString("Target grade: ", fonts.dataDescriptor, config.brush, cursor); cursor.X += measuredSize.Width; e.Graphics.DrawString(currentData.targetGrade, fonts.dataDescriptor, config.brush, cursor); cursor.X = DefaultPageSettings.PaperSize.Width / 2; measuredSize = e.Graphics.MeasureString("Acheived grade: ", fonts.dataDescriptor); e.Graphics.DrawString("Acheived grade: ", fonts.dataDescriptor, config.brush, cursor); cursor.X += measuredSize.Width; e.Graphics.DrawString(currentData.acheivedGrade, fonts.data, config.brush, cursor); cursor.X = leftMargin; cursor.Y += Math.Max(fonts.data.Height, fonts.dataDescriptor.Height) + config.padding; #endregion #region Printing the effort line measuredSize = e.Graphics.MeasureString("Effort: ", fonts.dataDescriptor); e.Graphics.DrawString("Effort: ", fonts.dataDescriptor, config.brush, cursor); cursor.X += measuredSize.Width; e.Graphics.DrawString(currentData.effortGrade, fonts.data, config.brush, cursor); cursor.X = leftMargin; cursor.Y += Math.Max(fonts.data.Height, fonts.dataDescriptor.Height) + config.padding; #endregion #region Printing the topics covered e.Graphics.DrawString("During this topic you have covered: ", fonts.dataDescriptor, config.brush, cursor); cursor.Y += fonts.dataDescriptor.Height + config.padding; foreach (string topic in currentData.topicsCovered) { e.Graphics.DrawString(config.bulletString, fonts.topics, config.brush, cursor); cursor.X += bulletSize.Width; measuredSize = e.Graphics.MeasureString(topic, fonts.topics, (int)(printWidth - bulletSize.Width)); e.Graphics.DrawString(topic, fonts.topics, config.brush, new Rectangle(Point.Round(cursor), new Size((int)(printWidth - bulletSize.Width), DefaultPageSettings.PaperSize.Height))); cursor.Y += measuredSize.Height; cursor.X = leftMargin; } cursor.Y += config.padding; #endregion #region Printing the WWWs cornerRectangle = cursor; cursor.Y += config.tablePadding; cursor.X += config.tablePadding; e.Graphics.DrawString("Feedback and strengths (WWW):", fonts.dataDescriptor, config.brush, cursor); cursor.Y += fonts.dataDescriptor.Height; measuredSize = e.Graphics.MeasureString(currentData.feedbackWWWs, fonts.feedback, printWidth - 2 * config.tablePadding); e.Graphics.DrawString(currentData.feedbackWWWs, fonts.feedback, config.brush, new RectangleF(cursor, measuredSize)); cursor.Y += measuredSize.Height + config.tablePadding; e.Graphics.DrawRectangle(new Pen(config.brush, config.tableWidth), new Rectangle(Point.Round(cornerRectangle), new Size(printWidth, (int)(cursor.Y - cornerRectangle.Y)))); cursor.Y += config.padding; cursor.X = leftMargin; #endregion #region Printing the TIFs cornerRectangle = cursor; cursor.Y += config.tablePadding; cursor.X += config.tablePadding; e.Graphics.DrawString("To improve further (TIF):", fonts.dataDescriptor, config.brush, cursor); cursor.Y += fonts.dataDescriptor.Height; measuredSize = e.Graphics.MeasureString(currentData.feedbackTIFs, fonts.feedback, printWidth - 2 * config.tablePadding); e.Graphics.DrawString(currentData.feedbackTIFs, fonts.feedback, config.brush, new RectangleF(cursor, measuredSize)); cursor.Y += measuredSize.Height + config.tablePadding; e.Graphics.DrawRectangle(new Pen(config.brush, config.tableWidth), new Rectangle(Point.Round(cornerRectangle), new Size(printWidth, (int)(cursor.Y - cornerRectangle.Y)))); cursor.Y += config.padding; cursor.X = leftMargin; #endregion #region Printing the MRI Box measuredSize = new SizeF(printWidth, Math.Min(DefaultPageSettings.PaperSize.Height - DefaultPageSettings.Margins.Bottom - cursor.Y, config.maximumMRIHeight)); if (DefaultPageSettings.PaperSize.Height - DefaultPageSettings.Margins.Bottom - cursor.Y > config.minimumMRIHeight) { e.Graphics.DrawString("My Response Is (MRI):", fonts.dataDescriptor, config.brush, PointF.Add(cursor, new Size(config.tablePadding, config.tablePadding))); e.Graphics.DrawRectangle(new Pen(config.brush, config.tableWidth), new Rectangle(Point.Round(cursor), Size.Round(measuredSize))); } #endregion if (count < (data.Length - 1)) { e.HasMorePages = true; } else { e.HasMorePages = false; } count++; }
public FeedbackPrinterDocument(FeedbackData data) : base() { populateStructs(); this.data = new FeedbackData[] { data }; }