SkiaSharp + C#で画像をPDFファイルに埋め込む

SkiaSharp + .NET Core 2でPDFファイルの出力を試しています。
SkiaSharp + .NET Core 2でPDFファイルの出力
SkiaSharp + C#でPDFファイルの出力(線、矩形、円の描画)

今回はPDFに画像を埋め込んでみます。


DrawImage



こちらを参考に、SKBitmap.Decodeで画像ファイルを読み込み、SKImage.FromBitmapで
SKImageオブジェクトを作成します。
https://github.com/mono/SkiaSharp/issues/236

サンプルの画像はこちらからお借りしました。
【90枚】コードギアス C.C.の壁紙ギャラリー


  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.                     var bitmap = SKBitmap.Decode("cc2.jpg");
  16.                     var image = SKImage.FromBitmap(bitmap);
  17.                     canvas.DrawImage(image, 10, 10);
  18.                     // ページ終了
  19.                     document.EndPage();
  20.                 }
  21.                 // PDFドキュメント終了
  22.                 document.Close();
  23.             }
  24.         }
  25.     }
  26. }



原寸で埋め込まれます。

881_01.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.                     var bitmap = SKBitmap.Decode("cc2.jpg");
  16.                     // 横幅180にリサイズ
  17.                     int newWidth = 180 * bitmap.Height / bitmap.Width;
  18.                     var scaled = bitmap.Resize(new SKImageInfo(180, newWidth), SKBitmapResizeMethod.Lanczos3);
  19.                     var image = SKImage.FromBitmap(scaled);
  20.                     canvas.DrawImage(image, 10, 10);
  21.                     // ページ終了
  22.                     document.EndPage();
  23.                 }
  24.                 // PDFドキュメント終了
  25.                 document.Close();
  26.             }
  27.         }
  28.     }
  29. }



881_02.png

関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ