private void tlvAnaliza_PrintPage(object sender, PrintPageEventArgs e) { #region -------------------------- Print variables definitions ----------------------- PH.G = e.Graphics; PrintDocument Doc = (PrintDocument)sender; float x = IsPreview ? UserSession.User.Settings.LeftMargin : UserSession.User.Settings.LeftMargin - e.PageSettings.PrintableArea.Left; float y = IsPreview ? UserSession.User.Settings.TopMargin : UserSession.User.Settings.TopMargin - e.PageSettings.PrintableArea.Top; Font TextFont = UserSession.User.Settings.TextFont; Font SubHeaderFont = UserSession.User.Settings.SubHeaderFont; Font HeaderFont = UserSession.User.Settings.HeaderFont; float LineHeight = TextFont.GetHeight(e.Graphics); float SubHeaderLineHeight = SubHeaderFont.GetHeight(e.Graphics); float HeaderLineHeight = HeaderFont.GetHeight(e.Graphics); int PrintWidth = e.MarginBounds.Width; int PrintHeight = e.MarginBounds.Bottom; #endregion PageNumber += 1; #region --------------------------- Document header and footer ----------------------- PH.DrawHeader(x, y, PrintWidth); PH.DrawFooter(x, PrintHeight, PrintWidth); PH.DrawPageNumber("- " + PageNumber.ToString() + " -", x, PrintHeight, PrintWidth, PageNumberLocation.Footer); #endregion #region ------------------------------ Report header ----------------------------------- if (PageNumber == 1) { y += LineHeight; PH.DrawText(ReportHeader[0], HeaderFont, x, y, PrintWidth, HeaderLineHeight, StringAlignment.Center, Brushes.Black, false); y += HeaderLineHeight * 2; } #endregion #region ------------------------------- Column Settings -------------------------- List <TableCell> Kolumna = new List <TableCell>(); foreach (OLVColumn Col in tlvStudent.Columns) { Kolumna.Add(new TableCell { Name = Col.AspectName, Label = Col.Text, Size = Col.Width - 20 }); } int FirstColWidth = PrintWidth - Kolumna.Where(K => K.Name != "Label").Sum(K => K.Size); if (FirstColWidth > 0) { Kolumna.Where(K => K.Name == "Label").First().Size = FirstColWidth; } #endregion #region ------------------------------- Table header -------------------------------- float MultiplyLine = 3; int ColOffset = 0; if (PageNumber == 1) { for (int i = 0; i < Kolumna.Count(); i++) { PH.DrawText(Kolumna[i].Label, new Font(TextFont, FontStyle.Bold), x + ColOffset, y, Kolumna[i].Size, LineHeight * MultiplyLine, StringAlignment.Center, Brushes.Black); ColOffset += Kolumna[i].Size; } y += LineHeight * MultiplyLine; } ColOffset = 0; for (int i = 0; i < Kolumna.Count(); i++) { PH.DrawText((i + 1).ToString(), new Font(TextFont, FontStyle.Bold | FontStyle.Italic), x + ColOffset, y, Kolumna[i].Size, LineHeight, StringAlignment.Center, Brushes.Black); ColOffset += Kolumna[i].Size; } y += LineHeight * 1.5F; #endregion #region ------------------------ Table body -------------------------------- int index = 0; int Indent = 0; bool Shade = false; Font PrintFont = null; var ListItems = tlvStudent.FilteredObjects.Cast <ScoreBranch>(); while (y + LineHeight * 2 < PrintHeight && Offset[0] < ListItems.Count()) { var ListItem = ListItems.ToArray()[Offset[0]]; y += LineHeight * 0.5f; PrintFont = new Font(TextFont, FontStyle.Bold); switch (ListItem.Level) { case 0: Indent = 0; MultiplyLine = 2; Shade = true; index = 0; break; case 1: Indent = 20; MultiplyLine = 2; Shade = false; index = 0; break; case 2: Indent = 40; MultiplyLine = 1; Shade = false; PrintFont = TextFont; if (index > 0) { y -= LineHeight * 0.5f; } index++; break; } PrintModelObjectData(ListItem, x, ref y, Kolumna, PrintFont, LineHeight * MultiplyLine, Indent, Shade); Offset[0]++; } if (Offset[0] < ListItems.Count()) { PrintNextPage(Doc, e); } #endregion }
private void prnDoc_PrintPage(object sender, PrintPageEventArgs e) { #region -------------------------- Print variables definitions ----------------------- PH.G = e.Graphics; PrintDocument Doc = (PrintDocument)sender; float x = IsPreview ? UserSession.User.Settings.LeftMargin : UserSession.User.Settings.LeftMargin - e.PageSettings.PrintableArea.Left; float y = IsPreview ? UserSession.User.Settings.TopMargin : UserSession.User.Settings.TopMargin - e.PageSettings.PrintableArea.Top; Font TextFont = UserSession.User.Settings.TextFont; Font SubHeaderFont = UserSession.User.Settings.SubHeaderFont; Font HeaderFont = UserSession.User.Settings.HeaderFont; float LineHeight = TextFont.GetHeight(e.Graphics); float SubHeaderLineHeight = SubHeaderFont.GetHeight(e.Graphics); float HeaderLineHeight = HeaderFont.GetHeight(e.Graphics); int PrintWidth = e.MarginBounds.Width; int PrintHeight = e.MarginBounds.Bottom; #endregion PageNumber += 1; #region --------------------------- Document header and footer ----------------------- PH.DrawHeader(x, y, PrintWidth); PH.DrawFooter(x, PrintHeight, PrintWidth); PH.DrawPageNumber("- " + PageNumber.ToString() + " -", x, PrintHeight, PrintWidth, PageNumberLocation.Footer); #endregion #region ------------------------------ Report header ----------------------------------- if (PageNumber == 1) { y += LineHeight; PH.DrawText(ReportHeader[0], HeaderFont, x, y, PrintWidth, HeaderLineHeight, StringAlignment.Center, Brushes.Black, false); y += HeaderLineHeight * 2; } #endregion #region ------------------------------- Column Settings -------------------------- List <TableCell> Kolumna = new List <TableCell>(); foreach (OLVColumn Col in olvStudent.Columns) { Kolumna.Add(new TableCell { Name = Col.AspectName, Label = Col.Text, Size = Col.Width }); } int SpaceWidth = PrintWidth - Kolumna.Sum(K => K.Size); int Space = SpaceWidth / Kolumna.Count; foreach (var col in Kolumna) { col.Size += Space; } #endregion #region ------------------------------- Table header -------------------------------- float MultiplyLine = 2; int ColOffset = 0; if (PageNumber == 1) { for (int i = 0; i < Kolumna.Count(); i++) { PH.DrawText(Kolumna[i].Label, new Font(TextFont, FontStyle.Bold), x + ColOffset, y, Kolumna[i].Size, LineHeight * MultiplyLine, StringAlignment.Center, Brushes.Black); ColOffset += Kolumna[i].Size; } y += LineHeight * MultiplyLine; } #endregion y += LineHeight; #region ------------------------ Table body -------------------------------- MultiplyLine = 2.2f; while (y + LineHeight * MultiplyLine < PrintHeight && Offset[0] < olvStudent.Groups.Count) { if (Offset[1] == 0) { PH.DrawText(olvStudent.Groups[Offset[0]].Header, SubHeaderFont, x, y, PrintWidth, SubHeaderLineHeight, 0, Brushes.Black, false); y += LineHeight * 1.2f; PH.DrawLine(x, y, x + PrintWidth, y); y += LineHeight * 0.5f; } MultiplyLine = 1; while (y + LineHeight * MultiplyLine < PrintHeight && Offset[1] < olvStudent.Groups[Offset[0]].Items.Count) { int colSize = 0; for (int i = 0; i < Kolumna.Count; i++) { PH.DrawText(olvStudent.Groups[Offset[0]].Items[Offset[1]].SubItems[i].Text, TextFont, x + colSize, y, Kolumna[i].Size, LineHeight * MultiplyLine, i == 1 ? StringAlignment.Center : StringAlignment.Near, Brushes.Black, false); colSize += Kolumna[i].Size; } y += LineHeight; Offset[1] += 1; } y += LineHeight; if (Offset[1] < olvStudent.Groups[Offset[0]].Items.Count) { PrintNextPage(Doc, e); return; } else { Offset[1] = 0; Offset[0] += 1; } } if (Offset[0] < olvStudent.Groups.Count) { PrintNextPage(Doc, e); } #endregion }