RotatedTable.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Numerics;
using System.Collections.Generic;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Imaging;
using GrapeCity.Documents.Layout;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos
{
// このサンプルでは、角度の制約を使用して回転したテーブルを描画する方法を紹介しています。
// 角度の制約は、変換行列による回転と似ていますが、変換と違って、
// 角度の制約を使用すると、ビューに他の視覚的要素を追加することがより簡単になります。
public class RotatedTable
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var p = doc.NewPage();
var g = p.Graphics;
// デフォルトのグラフィックス解像度(GcPdfGraphics では 72 dpi)を変更することで、
// 忠実度を損なわずにドキュメントを拡大縮小することができます。
g.Resolution = 96;
DrawTable(g, g.CanvasSize.Width, g.CanvasSize.Height);
// PDF を保存します。
doc.Save(stream);
return doc.Pages.Count;
}
class ItemLine
{
public ItemLine(string text, double sales, double marginNumber, double marginPercent, int totalCustomers)
{
Text = text;
Sales = sales;
MarginNumber = marginNumber;
MarginPercent = marginPercent;
TotalCustomers = totalCustomers;
}
public string Text { get; }
public double Sales { get; }
public double MarginNumber { get; }
public double MarginPercent { get; }
public int TotalCustomers { get; }
}
static void DrawTable(GcGraphics g, float pageWidth, float pageHeight)
{
float marginX = 20, marginY = 20;
var host = new LayoutHost();
var view = host.CreateView(0, 0);
// 注:テーブルの矩形は AngleConstraint を使用して回転させています。
// 変換行列を持つ View を別に用意する必要はありません。
var rt = view.CreateRect();
rt.SetAngle(null, 270);
rt.SetTop(null, AnchorParam.Left, marginX);
rt.SetRight(null, AnchorParam.Top, -marginY);
var ta = new TableRenderer(g,
rt, FixedTableSides.TopRight,
rowCount: 9,
columnCount: 5,
gridLineColor: Color.Black,
gridLineWidth: 1,
paddingLeft: 20,
paddingRight: 20,
paddingBottom: 20,
paddingTop: 12);
var lgb = new LinearGradientBrush(Color.FromArgb(240, 234, 249), new PointF(0, 0), Color.FromArgb(201, 181, 232), new PointF(0, 1));
ta.TableFrameStyle = new FrameStyle
{
LineColor = Color.FromArgb(126, 96, 160),
LineWidth = 1,
FillBrush = lgb
};
var columns = ta.ColumnRects;
columns[0].SetWidth(80);
columns[1].SetWidth(125);
columns[2].SetWidth(110);
columns[3].SetWidth(80);
columns[4].SetWidth(80);
var fmt = new TextFormat
{
Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "ipag.ttc")),
FontSize = 16,
FontSizeInGraphicUnits = true,
FontFeatures = new FontFeature[] { new FontFeature(FeatureTag.liga, false) }
};
var fmtHeader = new TextFormat(fmt)
{
ForeColor = Color.White,
FontBold = true
};
var csTitle = new CellStyle
{
Background = true,
TextFormat = new TextFormat(fmt)
{
FontBold = true,
FontSize = 20
},
TextAlignment = TextAlignment.Center,
PaddingBottom = 8
};
ta.AddCell(csTitle, 0, 0, 1, 5, "授業スケジュール");
var csHeader = new CellStyle
{
TextFormat = fmtHeader,
TextAlignment = TextAlignment.Center,
PaddingTop = 5,
PaddingBottom = 6
};
ta.AddCell(csHeader, 1, 0, "レッスン");
ta.AddCell(csHeader, 1, 1, "トピック");
ta.AddCell(csHeader, 1, 2, "課題");
ta.AddCell(csHeader, 1, 3, "点数");
ta.AddCell(csHeader, 1, 4, "期限");
var csCenter = new CellStyle(csHeader)
{
TextFormat = fmt,
PaddingLeftRight = 6
};
var csLeft = new CellStyle(csCenter)
{
TextAlignment = TextAlignment.Leading
};
ta.AddCell(csCenter, 2, 0, 2, 1, "1");
ta.AddCell(csLeft, 2, 1, 2, 1, "遠隔教育とは?");
ta.AddCell(csLeft, 2, 2, "Wiki #1");
ta.AddCell(csCenter, 2, 3, "10");
ta.AddCell(csCenter, 2, 4, "3月10日");
ta.AddCell(csLeft, 3, 2, "プレゼンテーション");
ta.AddCell(csCenter, 3, 3, "20");
ta.AddCell(csCenter, 3, 4);
ta.AddCell(csCenter, 4, 0, "2");
ta.AddCell(csLeft, 4, 1, "歴史と理論");
ta.AddCell(csLeft, 4, 2, "小論文");
ta.AddCell(csCenter, 4, 3, "20");
ta.AddCell(csCenter, 4, 4, "3月24日");
ta.AddCell(csCenter, 5, 0, 1, 5, "春休み");
ta.AddCell(csCenter, 6, 0, 2, 1, "3");
ta.AddCell(csLeft, 6, 1, 2, 1, "遠隔学習者");
ta.AddCell(csLeft, 6, 2, "ディスカッション #1");
ta.AddCell(csCenter, 6, 3, "10");
ta.AddCell(csCenter, 6, 4, "4月7日");
ta.AddCell(csLeft, 7, 2, "グループプロジェクト");
ta.AddCell(csCenter, 7, 3, "50");
ta.AddCell(csCenter, 7, 4, "4月14日");
ta.AddCell(csCenter, 8, 0, "4");
ta.AddCell(csLeft, 8, 1, "メディア選択");
ta.AddCell(csLeft, 8, 2, "ブログ #1");
ta.AddCell(csCenter, 8, 3, "10");
ta.AddCell(csCenter, 8, 4, "4月21日");
ta.AddCell(new CellStyle
{
Background = true,
FillColor = Color.FromArgb(79, 129, 189)
}, 1, 0, 1, 5);
ta.AddCell(new CellStyle
{
Background = true,
FillColor = Color.FromArgb(208, 216, 232)
}, 2, 0, 7, 5);
var bkHighlight = new CellStyle
{
Background = true,
FillColor = Color.FromArgb(233, 237, 244)
};
ta.AddCell(bkHighlight, 3, 2, 1, 3);
ta.AddCell(bkHighlight, 5, 0, 1, 5);
ta.AddCell(bkHighlight, 7, 2, 1, 3);
ta.ApplyCellConstraints();
g.Transform = Matrix3x2.CreateScale(1.8f);
ta.Render(g);
}
}
}