TimeChartTable.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 representing a time chart,
- // using the GrapeCity.Documents.Drawing.TableRenderer and related classes.
- public class TimeChartTable
- {
- public int CreatePDF(Stream stream)
- {
- var doc = new GcPdfDocument();
- var p = doc.Pages.Add(new SizeF(doc.PageSize.Height, doc.PageSize.Width));
- var g = p.Graphics;
-
- DrawTable(g, g.CanvasSize.Width, g.CanvasSize.Height);
-
- // Save the PDF:
- doc.Save(stream);
- return doc.Pages.Count;
- }
-
- class Range
- {
- public Range(double valueLow, double deltaLow, double valueHigh, double deltaHigh)
- {
- ValueLow = valueLow;
- DeltaLow = deltaLow;
- ValueHigh = valueHigh;
- DeltaHigh = deltaHigh;
- }
- public double ValueLow { get; }
- public double DeltaLow { get; }
- public double ValueHigh { get; }
- public double DeltaHigh { get; }
- }
-
- static void DrawTable(GcGraphics g, float pageWidth, float pageHeight)
- {
- var host = new LayoutHost();
- var view = host.CreateView(pageWidth, pageHeight * 0.7f);
-
- var rt = view.CreateRect();
-
- // Pad the table rectangle equally from left, right, top and bottom:
- rt.AnchorDeflate(null, 10);
-
- // All sides of the table are fixed, so we can apply
- // star widths to columns and star heights to rows:
- var ta = new TableRenderer(g,
- rt, FixedTableSides.All,
- rowCount: 10, columnCount: 32,
- gridLineColor: Color.DimGray,
- gridLineWidth: 1);
-
- var columns = ta.ColumnRects;
- columns[0].SetWidth(120);
- for (int i = 1; i < 32; i++)
- {
- columns[i].SetStarWidth(1f);
- }
-
- // Table header is a part of the table;
- // the first row (rows[0]) is for the table header:
- var rows = ta.RowRects;
- rows[0].SetHeight(40);
- rows[1].SetHeight(30);
- for (int i = 2; i < 10; i++)
- {
- rows[i].SetStarHeight(1f);
- }
-
- var fmt = new TextFormat
- {
- Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "segoeui.ttf")),
- FontSize = 16,
- FontSizeInGraphicUnits = true
- };
- var cs = new CellStyle
- {
- TextFormat = fmt,
- TextAlignment = TextAlignment.Center
- };
-
- var csTitle = new CellStyle(cs)
- {
- Background = true,
- TextFormat = new TextFormat(fmt)
- {
- FontSize = 16,
- FontBold = true
- }
- };
- ta.AddCell(csTitle, 0, 0, 1, 32, "Small Business Marketing Plan");
-
- ta.DefaultCellStyle = new CellStyle(cs)
- {
- ParagraphAlignment = ParagraphAlignment.Center
- };
- for (int i = 1; i < 32; i++)
- {
- ta.AddCell(1, i, i.ToString());
- }
-
- ta.DefaultCellStyle = new CellStyle(cs)
- {
- TextAlignment = TextAlignment.Leading,
- PaddingLeft = 3
- };
- ta.AddCell(2, 0, "Business Overview");
- ta.AddCell(3, 0, "Market Analysis");
- ta.AddCell(4, 0, "Marketing Strategy");
- ta.AddCell(5, 0, "Operations Plan");
- ta.AddCell(6, 0, "Organization");
- ta.AddCell(7, 0, "Management");
- ta.AddCell(8, 0, "Legal aspects");
- ta.AddCell(9, 0, "Financial Plan");
-
- // Add merged background cells for color highlighting:
- AddBand(2, 1, 6, Color.FromArgb(247, 202, 171));
- AddBand(3, 2, 7, Color.FromArgb(179, 198, 231));
- AddBand(4, 5, 6, Color.FromArgb(255, 229, 154));
- AddBand(5, 11, 6, Color.FromArgb(45, 116, 182));
- AddBand(6, 17, 6, Color.FromArgb(255, 155, 155));
- AddBand(7, 18, 6, Color.FromArgb(197, 224, 179));
- AddBand(8, 24, 4, Color.FromArgb(3, 174, 80));
- AddBand(9, 28, 4, Color.FromArgb(1, 176, 241));
-
- void AddBand(int rowIndex, int columnIndex, int columnCount, Color color)
- {
- ta.AddCell(new CellStyle
- {
- Background = true,
- FillColor = color
- }, rowIndex, columnIndex, 1, columnCount);
- }
-
- // We exclude the first row when we add missing cells
- // to avoid drawing grid lines for the table header:
- ta.AddMissingCells(1, 0, 9, 32);
-
- ta.Render();
- }
- }
- }
-