OddEvenRows.cs
- //
- // This code is part of Document Solutions for PDF demos.
- // Copyright (c) MESCIUS inc. All rights reserved.
- //
- using System;
- using System.IO;
- using System.Drawing;
- using System.Numerics;
- using GrapeCity.Documents.Pdf;
- using GrapeCity.Documents.Text;
- using GrapeCity.Documents.Common;
- using GrapeCity.Documents.Drawing;
- using GrapeCity.Documents.Layout;
- using GCTEXT = GrapeCity.Documents.Text;
- using GCDRAW = GrapeCity.Documents.Drawing;
-
- namespace DsPdfWeb.Demos
- {
- // This example shows how to draw a table with differently shaded odd and even rows,
- // using the GrapeCity.Documents.Drawing.TableRenderer and related classes.
- public class OddEvenRows
- {
- public int CreatePDF(Stream stream)
- {
- var doc = new GcPdfDocument();
- var p = doc.Pages.Add();
- var g = p.Graphics;
-
- DrawTable(g, g.CanvasSize.Width, g.CanvasSize.Height);
-
- // Save the PDF:
- doc.Save(stream);
- return doc.Pages.Count;
- }
-
- // Data source for the table:
- static readonly Team[] _teams = new Team[]
- {
- new Team("England"),
- new Team("France"),
- new Team("Ireland"),
- new Team("Italy"),
- new Team("Scotland"),
- new Team("Wales"),
- };
-
- static void DrawTable(GcGraphics g, float pageWidth, float pageHeight)
- {
- var host = new LayoutHost();
- var view = host.CreateView(pageWidth, pageHeight);
-
- var rt = view.CreateRect();
- rt.AnchorTopRight(null, 36, 36);
-
- var ta = new TableRenderer(g,
- rt, FixedTableSides.TopRight,
- rowCount: _teams.Length + 2,
- columnCount: 11,
- gridLineColor: Color.FromArgb(173, 223, 252),
- gridLineWidth: 1,
- rowMinHeight: 10,
- columnMinWidth: 10);
-
- var fmt = new TextFormat
- {
- Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "tahoma.ttf")),
- FontSize = 18,
- FontSizeInGraphicUnits = true
- };
- var cs = new CellStyle
- {
- TextFormat = fmt,
- FixedWidth = false,
- PaddingAll = 4
- };
- var csHeaderH = new CellStyle(cs)
- {
- TextFormat = new TextFormat(fmt)
- {
- ForeColor = Color.White,
- FontBold = true
- },
- FillColor = Color.FromArgb(17, 93, 140),
- TextAlignment = TextAlignment.Center,
- ParagraphAlignment = ParagraphAlignment.Center,
- };
- var csHeaderV = new CellStyle(csHeaderH)
- {
- RotationAngle = 270,
- TextAlignment = TextAlignment.Leading,
- PaddingLeft = 3
- };
- var csNumber = new CellStyle(cs)
- {
- TextAlignment = TextAlignment.Center
- };
- var csNation = new CellStyle(cs)
- {
- TextFormat = new TextFormat(fmt)
- {
- ForeColor = Color.FromArgb(50, 123, 197)
- },
- };
-
- // add cells to the header
- ta.AddCell(csHeaderV, 0, 0, 2, 1, "Position");
- ta.AddCell(csHeaderH, 0, 1, 2, 1, "Nation");
- ta.AddCell(csHeaderH, 0, 2, 1, 4, "Games");
- ta.AddCell(csHeaderV, 1, 2, "Played");
- ta.AddCell(csHeaderV, 1, 3, "Won");
- ta.AddCell(csHeaderV, 1, 4, "Drawn");
- ta.AddCell(csHeaderV, 1, 5, "Lost");
- ta.AddCell(csHeaderH, 0, 6, 1, 4, "Points");
- ta.AddCell(csHeaderV, 1, 6, "For");
- ta.AddCell(csHeaderV, 1, 7, "Against");
- ta.AddCell(csHeaderV, 1, 8, "Difference");
- ta.AddCell(csHeaderV, 1, 9, "Tries");
- ta.AddCell(csHeaderH, 0, 10, 2, 1, "Table\npoints");
-
- // add the data cells
- for (int i = 0; i < _teams.Length; i++)
- {
- int rowIndex = i + 2;
- var team = _teams[i];
- ta.AddCell(csNumber, rowIndex, 0, $"{i + 1}");
- ta.AddCell(csNation, rowIndex, 1, team.Nation);
- ta.AddCell(csNumber, rowIndex, 2, $"{team.Played}");
- ta.AddCell(csNumber, rowIndex, 3, $"{team.Won}");
- ta.AddCell(csNumber, rowIndex, 4, $"{team.Drawn}");
- ta.AddCell(csNumber, rowIndex, 5, $"{team.Lost}");
- ta.AddCell(csNumber, rowIndex, 6, $"{team.For}");
- ta.AddCell(csNumber, rowIndex, 7, $"{team.Against}");
- ta.AddCell(csNumber, rowIndex, 8, $"{team.Diff}");
- ta.AddCell(csNumber, rowIndex, 9, $"{team.Tries}");
- ta.AddCell(csNumber, rowIndex, 10, $"{team.TablePoints}");
- }
-
- // change background for odd rows
- ta.DefaultCellStyle = new CellStyle
- {
- Background = true,
- FillColor = Color.FromArgb(238, 238, 238)
- };
- for (int i = 0; i < _teams.Length; i += 2)
- {
- ta.AddCell(i + 2, 0, 1, 11);
- }
-
- ta.Render();
- }
-
- // A class to store example data:
- class Team
- {
- static readonly Random _rnd = Common.Util.NewRandom();
-
- public string Nation;
- public int Played, Won, Drawn, Lost;
- public int For, Against, Diff, Tries;
- public int TablePoints;
-
- internal Team(string nation)
- {
- Nation = nation;
- Played = _rnd.Next(0, 50);
- Won = _rnd.Next(0, 50);
- Drawn = _rnd.Next(0, 50);
- Lost = _rnd.Next(0, 50);
- For = _rnd.Next(0, 50);
- Against = _rnd.Next(0, 50);
- Diff = _rnd.Next(0, 50);
- Tries = _rnd.Next(0, 50);
- TablePoints = _rnd.Next(0, 150);
- }
- }
- }
- }
-