RotatedTableText.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 cells containing rotated texts, // using the GrapeCity.Documents.Drawing.TableRenderer and related classes. public class RotatedTableText { 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; } static void DrawTable(GcGraphics g, float pageWidth, float pageHeight) { var host = new LayoutHost(); var view = host.CreateView(pageWidth, pageHeight); var rt = view.CreateRect(); rt.AnchorTopLeftRight(null, 30, 20, 20); var ta = new TableRenderer(g, rt, FixedTableSides.TopLeftRight, rowCount: 9, columnCount: 7, gridLineColor: Color.Transparent, gridLineWidth: 1, rowMinHeight: 20, columnMinWidth: 20); ta.ColumnRects[6].SetStarWidth(1f); ta.RowRects[8].AppendMinHeight(70); var fmtNorm = new TextFormat { Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSans-Regular.ttf")), FontSize = 16f, FontSizeInGraphicUnits = true }; var cs = new CellStyle { LineWidth = 1, LineColor = Color.Coral, LinePaddingAll = 1, CornerRadius = 5, FillColor = Color.Snow, PaddingLeftRight = 10, PaddingTop = 2, PaddingBottom = 5, TextAlignment = TextAlignment.Center, TextFormat = fmtNorm }; ta.DefaultCellStyle = cs; ta.TableFrameStyle = new FrameStyle { LineWidth = 1, LineColor = Color.CornflowerBlue, LinePaddingAll = -3, CornerRadius = 5, FillColor = Color.MistyRose }; var csFlexW = new CellStyle(cs) { FixedWidth = false }; var cs270 = new CellStyle(cs) { RotationAngle = 270 }; var cs270FlexH = new CellStyle(cs) { RotationAngle = 270, ParagraphAlignment = ParagraphAlignment.Center, FixedWidth = false, MaxWidth = 120 }; ta.AddCell(0, 1, 1, 3, "Title 1 with a long text"); ta.AddCell(new CellStyle(cs) { ParagraphAlignment = ParagraphAlignment.Center }, 0, 4, 1, 3, "Title 2"); ta.AddCell(cs270, 1, 1, 2, 1, "Vertical Title 1"); ta.AddCell(cs270, 1, 2, 2, 1, "Vertical Title 2 with additional text"); ta.AddCell(cs270, 1, 3, 2, 1, "Vertical Title 3"); ta.AddCell(1, 4, 1, 2, "Subtitle 2.1"); ta.AddCell(cs270FlexH, 2, 4, "Vertical Subtitle 2.1.1"); ta.AddCell(cs270FlexH, 2, 5, "Vertical Subtitle 2.1.2 with a long, long, long, and even longer text"); ta.AddCell(cs270, 3, 0, 3, 1, "Side Title 1"); ta.AddCell(cs270, 6, 0, 2, 1, "Side Title 2"); for (int r = 3; r < 8; r++) for (int c = 1; c < 4; c++) ta.AddCell(csFlexW, r, c, (r * c).ToString()); for (int r = 3; r < 8; r++) for (int c = 4; c < 6; c++) ta.AddCell(csFlexW, r, c, $"row {r} column {c}"); ta.AddCell(new CellStyle(cs) { RotationAngle = 90, ParagraphAlignment = ParagraphAlignment.Far, TextAlignment = TextAlignment.Leading }, 1, 6, 7, 1, "Other Side"); ta.AddCell(new CellStyle(cs) { TextAlignment = TextAlignment.Trailing, ParagraphAlignment = ParagraphAlignment.Far }, 8, 0, 1, 7, "Bottom Side"); ta.Render(); } } }