Symfoware

Symfowareについての考察blog

SkiaSharp + C#でPDFファイルの出力(線、矩形、円の描画)

SkiaSharpを使用してPDFファイルを出力してみました。
SkiaSharp + .NET Core 2でPDFファイルの出力

線の描画など、使い方を調べていきます。

線の描画(DrawLine)



線の描画はDrawLineで行います。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(300f, 500f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 描画開始x, 描画開始y, 描画終了x, 描画終了y
  19.                     canvas.DrawLine(10f, 10f, 100f, 100f, paint);
  20.                     // ページ終了
  21.                     document.EndPage();
  22.                 }
  23.                 // PDFドキュメント終了
  24.                 document.Close();
  25.             }
  26.         }
  27.     }
  28. }



880_01.png


線の太さはSKPaintに対して指定します。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 線の太さを指定
  19.                     paint.StrokeWidth = 5;
  20.                     // 描画開始x, 描画開始y, 描画終了x, 描画終了y
  21.                     canvas.DrawLine(10f, 10f, 100f, 100f, paint);
  22.                     // ページ終了
  23.                     document.EndPage();
  24.                 }
  25.                 // PDFドキュメント終了
  26.                 document.Close();
  27.             }
  28.         }
  29.     }
  30. }



880_02.png


破線のパターンはSKPathEffect.CreateDashで作成します。
「実線の長さ」,「余白の長さ」,「実線の長さ」...を配列で指定します。
第二引数は繰り返す回数のようで、始点から終点まで破線を描画する場合は0を指定します。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 線の太さを指定
  19.                     paint.StrokeWidth = 5;
  20.                     // 破線のパターン
  21.                     paint.PathEffect = SKPathEffect.CreateDash(new float[] { 1, 4 }, 0);
  22.                     // 描画開始x, 描画開始y, 描画終了x, 描画終了y
  23.                     canvas.DrawLine(10f, 10f, 100f, 100f, paint);
  24.                     // ページ終了
  25.                     document.EndPage();
  26.                 }
  27.                 // PDFドキュメント終了
  28.                 document.Close();
  29.             }
  30.         }
  31.     }
  32. }



880_03.png




矩形の描画(DrawRect)



矩形の描画はDrawRectで行います。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 線の太さを指定
  19.                     paint.StrokeWidth = 3;
  20.                     // 描画開始x, 描画開始y, 矩形の幅、矩形の高さ
  21.                     var rect = new SKRect(10, 10, 100, 50);
  22.                     canvas.DrawRect(rect, paint);
  23.                     // ページ終了
  24.                     document.EndPage();
  25.                 }
  26.                 // PDFドキュメント終了
  27.                 document.Close();
  28.             }
  29.         }
  30.     }
  31. }



880_04.png


中身を塗りつぶさず線だけ描画する場合は、
Style = SKPaintStyle.Stroke
を指定します。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 線の太さを指定
  19.                     paint.StrokeWidth = 3;
  20.                     // 塗りつぶしタイプを指定
  21.                     paint.Style = SKPaintStyle.Stroke;
  22.                     // 描画開始x, 描画開始y, 矩形の幅、矩形の高さ
  23.                     var rect = new SKRect(10, 10, 100, 50);
  24.                     canvas.DrawRect(rect, paint);
  25.                     // ページ終了
  26.                     document.EndPage();
  27.                 }
  28.                 // PDFドキュメント終了
  29.                 document.Close();
  30.             }
  31.         }
  32.     }
  33. }



880_05.png


矩形の領域内を別の色で塗りつぶしたい場合は、先にFillで塗りつぶしたあと
枠線を描画すれば良いようです。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 描画開始x, 描画開始y, 矩形の幅、矩形の高さ
  17.                     var rect = new SKRect(10, 10, 100, 50);
  18.                     // 中身を塗りつぶし
  19.                     // 線の色を指定
  20.                     paint.Color = SKColors.Blue;
  21.                     // 塗りつぶしタイプを指定
  22.                     paint.Style = SKPaintStyle.Fill;
  23.                     canvas.DrawRect(rect, paint);
  24.                     // 線の色を指定
  25.                     paint.Color = SKColors.Red;
  26.                     // 線の太さを指定
  27.                     paint.StrokeWidth = 3;
  28.                     // 塗りつぶしタイプを指定
  29.                     paint.Style = SKPaintStyle.Stroke;
  30.                     canvas.DrawRect(rect, paint);
  31.                     // ページ終了
  32.                     document.EndPage();
  33.                 }
  34.                 // PDFドキュメント終了
  35.                 document.Close();
  36.             }
  37.         }
  38.     }
  39. }



880_06.png


もちろん枠線には破線の指定を行うことができます。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 描画開始x, 描画開始y, 矩形の幅、矩形の高さ
  17.                     var rect = new SKRect(10, 10, 100, 50);
  18.                     // 中身を塗りつぶし
  19.                     // 線の色を指定
  20.                     paint.Color = SKColors.Blue;
  21.                     // 塗りつぶしタイプを指定
  22.                     paint.Style = SKPaintStyle.Fill;
  23.                     canvas.DrawRect(rect, paint);
  24.                     // 線の色を指定
  25.                     paint.Color = SKColors.Red;
  26.                     // 線の太さを指定
  27.                     paint.StrokeWidth = 3;
  28.                     // 塗りつぶしタイプを指定
  29.                     paint.Style = SKPaintStyle.Stroke;
  30.                     // 破線のパターン
  31.                     paint.PathEffect = SKPathEffect.CreateDash(new float[] { 4, 1 }, 0);
  32.                     canvas.DrawRect(rect, paint);
  33.                     // ページ終了
  34.                     document.EndPage();
  35.                 }
  36.                 // PDFドキュメント終了
  37.                 document.Close();
  38.             }
  39.         }
  40.     }
  41. }



880_07.png



円の描画(DrawCircle)



円の描画はDrawCircleで行います。


  1. using System;
  2. using SkiaSharp;
  3. namespace myApp
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             
  10.             // PDF ファイル作成
  11.             using (var stream = new SKFileWStream("document.pdf"))
  12.             using (var document = SKDocument.CreatePdf(stream)) {
  13.                 // 1ページ目
  14.                 using (var canvas = document.BeginPage(200f, 300f))
  15.                 using (var paint = new SKPaint()) {
  16.                     // 線の色を指定
  17.                     paint.Color = SKColors.Red;
  18.                     // 線の太さを指定
  19.                     paint.StrokeWidth = 3;
  20.                     // 塗りつぶしタイプを指定
  21.                     paint.Style = SKPaintStyle.Stroke;
  22.                     // 中心x, 中心y, 半径
  23.                     canvas.DrawCircle(50, 100, 20, paint);
  24.                     // ページ終了
  25.                     document.EndPage();
  26.                 }
  27.                 // PDFドキュメント終了
  28.                 document.Close();
  29.             }
  30.         }
  31.     }
  32. }



880_08.png

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/05/13(日) 16:17:18|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<SkiaSharp + C#で画像をPDFファイルに埋め込む | ホーム | SkiaSharp + .NET Core 2でPDFファイルの出力>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2180-17d39af5
この記事にトラックバックする(FC2ブログユーザー)