Transforms.cs
- //
- // このコードは、DioDocs for PDF のサンプルの一部として提供されています。
- // © MESCIUS inc. All rights reserved.
- //
- using System;
- using System.IO;
- using System.Drawing;
- using System.Numerics;
- using GrapeCity.Documents.Drawing;
- using GrapeCity.Documents.Pdf;
- using GrapeCity.Documents.Text;
-
- namespace DsPdfWeb.Demos.Basics
- {
- // グラフィックの変形(GcPdfGraphics.Transform プロパティ)の使用方法を示します。
- public class Transforms
- {
- // 塗りつぶされたボックスにテキストを描画するヘルパーメソッドです。
- private static void DrawBox(string text, GcGraphics g, RectangleF box)
- {
- g.FillRectangle(box, Color.FromArgb(80, 0, 184, 204));
- g.DrawRectangle(box, Color.FromArgb(0, 193, 213), 1);
- box.Inflate(-6, -6);
- g.DrawString(text, new TextFormat() { Font = Common.Util.getFont(), FontSize = 14, }, box);
- }
-
- public int CreatePDF(Stream stream)
- {
- const string baseTxt = "座標[0,36][4×2インチ]の原型\n\n";
- var doc = new GcPdfDocument();
- var page = doc.NewPage();
- var g = page.Graphics;
- var box = new RectangleF(0, 36, 72 * 4, 72 * 2);
- // #1:
- DrawBox($"Box 1: {baseTxt}変形なし", g, box);
- //
- var translate0 = Matrix3x2.CreateTranslation(72 * 1, 72 * 4);
- var scale0 = Matrix3x2.CreateScale(0.5f);
-
- // 変換は最後から順に適用されます。
-
- // #2:
- g.Transform =
- scale0 *
- translate0;
- DrawBox($"Box 2: {baseTxt}スケール50% \n移動[X軸=1:Y軸=4インチ]", g, box);
- // #3:
- g.Transform =
- translate0 *
- scale0;
- DrawBox($"Box 3: {baseTxt}移動[X軸=1:Y軸=4インチ] \nスケール50%", g, box);
- //
- var translate1 = Matrix3x2.CreateTranslation(72 * 3, 72 * 5);
- var scale1 = Matrix3x2.CreateScale(0.7f);
- var rotate0 = Matrix3x2.CreateRotation((float)(-70 * Math.PI) / 180f); // 70 degrees CCW
- // #4:
- g.Transform =
- rotate0 *
- translate1 *
- scale1;
- DrawBox($"Box 4: {baseTxt}回転[反時計70°] 移動[X軸=3:Y軸=7インチ] \nスケール70%", g, box);
- // #5:
- g.Transform =
- Matrix3x2.CreateTranslation(36, 72) *
- g.Transform;
- DrawBox($"Box 5: {baseTxt}「Box 4」の変更を適用後 \n移動[X軸=0.5:Y軸=1インチ]", g, box);
- // #6:
- g.Transform =
- // rotate0 *
- Matrix3x2.CreateSkew((float)(-45 * Math.PI) / 180f, (float)(20 * Math.PI) / 180f) *
- Matrix3x2.CreateTranslation(72 * 3, 72 * 7);
- DrawBox($"Box 6: {baseTxt}移動[X軸=3:Y軸=7インチ] \n歪み[X軸=-45°:Y軸=20°]", g, box);
- // #7:
- g.Transform =
- Matrix3x2.CreateRotation((float)Math.PI) *
- Matrix3x2.CreateTranslation(page.Size.Width - 72, page.Size.Height - 72);
- DrawBox($"Box 7: {baseTxt}移動[X軸=7.5:Y軸=10インチ] \n回転[180°]", g, box);
- // グラフィックス上の変形をすべて削除することができます。
- g.Transform = Matrix3x2.Identity;
-
- // PDF ドキュメントを保存します。
- doc.Save(stream);
- return doc.Pages.Count;
- }
- }
- }
-