//
// 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 GrapeCity.Documents.Layout.Composition;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos
{
// This example shows how to draw a simple empty table,
// using the GrapeCity.Documents.Layout.Composition.Surface and
// GrapeCity.Documents.Drawing.TableRenderer classes.
// This example highlights the main elements of the table layout
// that can be created using the TableRenderer class.
public class EmptyTable
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var g = doc.NewPage().Graphics;
DrawTable(g, g.CanvasSize.Width, g.CanvasSize.Height);
// Save the PDF:
doc.Save(stream);
return doc.Pages.Count;
}
static readonly TextFormat FormatDesc = new TextFormat()
{
Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "segoeui.ttf")),
FontSize = 16,
FontSizeInGraphicUnits = true,
ForeColor = Color.White
};
static void DrawTable(GcGraphics g, float pageWidth, float pageHeight)
{
var surf = new Surface();
var view = surf.CreateView(pageWidth, pageHeight);
// Fill the page with Gray color.
view.CreateVisual((g, v) => {
g.FillRectangle(v.AsRectF(), Color.Gray);
}).LayoutRect.AnchorExact(null);
var vTable = view.CreateVisual();
var tableRect = vTable.LayoutRect;
tableRect.AnchorTopLeftRight(null, 36, 36, 36);
// The paddingAll parameter adds padding to the table grid relative to the table rectangle.
var ta = new TableRenderer(g,
tableRect, FixedTableSides.TopLeftRight,
rowCount: 3,
columnCount: 3,
gridLineColor: Color.Yellow,
gridLineWidth: 5,
rowMinHeight: 100,
paddingAll: 40);
var columns = ta.ColumnRects;
columns[0].SetStarWidth(1);
columns[1].SetWidth(100);
columns[2].SetStarWidth(3);
ta.TableFrameStyle = new FrameStyle
{
LinePaddingAll = 20,
LineColor = Color.SlateBlue,
FillColor = Color.LightGreen,
LineWidth = 10f
};
ta.ApplyCellConstraints();
vTable.Draw = (g, v) =>
{
var rc = v.AsRectF();
g.FillRectangle(rc, Color.White);
var tl = g.CreateTextLayout();
tl.AppendLine("Table rectangle (tableRect) is White,", FormatDesc);
tl.AppendLine("Padding of the table frame is 20 (TableFrameStyle.LinePaddingAll),", FormatDesc);
tl.AppendLine("Frame line width is 10 (TableFrameStyle.LineWidth),", FormatDesc);
tl.AppendLine("Frame line color is SlateBlue (TableFrameStyle.LineColor),", FormatDesc);
tl.AppendLine("Frame area color is LightGreen (TableFrameStyle.FillColor),", FormatDesc);
tl.AppendLine("Padding of the table grid is 40 (the paddingAll parameter),", FormatDesc);
tl.AppendLine("Table grid line width is 5 (the gridLineWidth parameter),", FormatDesc);
tl.AppendLine("Grid line color is Yellow (the gridLineColor parameter).", FormatDesc);
g.DrawTextLayout(tl, new PointF(0, rc.Bottom + 10));
g.Transform = v.Layer.Surface.BaseTransform;
ta.Render();
};
surf.Render(g);
}
}
}