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", "NotoSans-Regular.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(); } } }