Exemple #1
0
 public static void ToFile(string fileName, IEnumerable <IVisual> visuals)
 {
     using var doc = SKDocument.CreatePdf(fileName);
     foreach (var visual in visuals)
     {
         var bounds = visual.Bounds;
         var page   = doc.BeginPage((float)bounds.Width, (float)bounds.Height);
         using var context = new DrawingContext(DrawingContextHelper.WrapSkiaCanvas(page, SkiaPlatform.DefaultDpi));
         ImmediateRenderer.Render(visual, context);
         doc.EndPage();
     }
     doc.Close();
 }
Exemple #2
0
        public void Render(IDrawingContextImpl context)
        {
            if (context is not ISkiaDrawingContextImpl skia)
            {
                return;
            }

            if (!skia.SkCanvas.TotalMatrix.TryInvert(out var currentInvertedTransform))
            {
                return;
            }

            // One or both dimensions has zero size.
            // Skia doesnt like that.
            if (_bounds.Size.AspectRatio == 0)
            {
                return;
            }

            using var backgroundSnapshot = skia.SkSurface.Snapshot();

            using var preBlur =
                      DrawingContextHelper.CreateDrawingContext(
                          new Size(backgroundSnapshot.Width, backgroundSnapshot.Height), new Vector(96, 96),
                          skia.GrContext);
            using (var filter = SKImageFilter.CreateBlur((int)_blurRadius.X, (int)_blurRadius.Y, SKShaderTileMode.Clamp))
                using (var blurPaint = new SKPaint {
                    ImageFilter = filter
                })
                {
                    var canvas = preBlur.SkSurface.Canvas;
                    canvas.DrawSurface(skia.SkSurface, 0f, 0f, blurPaint);
                    canvas.Flush();
                }

            using var preBlurredSnapshot = preBlur.SkSurface.Snapshot();

            using var backdropShader = SKShader.CreateImage(preBlurredSnapshot, SKShaderTileMode.Clamp,
                                                            SKShaderTileMode.Clamp, currentInvertedTransform);

            using var blurred = DrawingContextHelper.CreateDrawingContext(_bounds.Size, new Vector(96, 96), skia.GrContext);
            using (var blurPaint = new SKPaint {
                Shader = backdropShader
            })
            {
                blurred.SkSurface.Canvas.DrawRect(0, 0, (float)_bounds.Width, (float)_bounds.Height, blurPaint);
            }

            blurred.DrawTo(skia);
        }
Exemple #3
0
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 {
     return(DrawingContextHelper.WrapSkiaCanvas(_canvas, new Vector(_dpi, _dpi), visualBrushRenderer));
 }
Exemple #4
0
        /// <summary>
        /// ページを描画する
        /// </summary>
        /// <param name="dch">ドローイングコンテキスト</param>
        /// <param name="arg">レポート引数</param>
        protected override void DrawingPage(DrawingContextHelper dch, ReportArgument arg)
        {
            var titleFont = new FontInfo("Meiryo", true, 32, Brushes.Black);

            // ヘッダの描画
            dch.DrawText("蔵書リスト", titleFont, CM2PX(1.0d), CM2PX(1.5d));
            dch.DrawText(string.Format("Page.{0}", arg.PageNo), CM2PX(26.5d), CM2PX(1.4d));

            Table.HeaderColumns[0].DrawText("No", TextAlignment.Right, dch);
            Table.HeaderColumns[1].DrawText("書名", TextAlignment.Left, dch);
            Table.HeaderColumns[2].DrawText("著者名", TextAlignment.Left, dch);
            Table.HeaderColumns[3].DrawText("出版社", TextAlignment.Left, dch);
            Table.HeaderColumns[4].DrawText("カテゴリ", TextAlignment.Left, dch);
            Table.HeaderColumns[5].DrawText("価格", TextAlignment.Right, dch);
            Table.HeaderColumns[6].DrawText("購入日", TextAlignment.Center, dch);
            Table.HeaderColumns[7].DrawText("評価点", TextAlignment.Left, dch);

            // 明細の描画
            Table.RowIndex = 0;
            while (DataRowIndex < BookList.Count)
            {
                // 1ページ分明細行を印刷したらブレイク
                if (Table.PageBreak)
                {
                    break;
                }

                if (Table.RowIndex % 2 != 0)
                {
                    Table.DrawRowBorder(Table.RowIndex, null, new Thickness(0.0d), Brushes.WhiteSmoke, dch);
                }

                var book = BookList[DataRowIndex];
                Table[0].DrawText(book.Id.ToString(), TextAlignment.Right, dch);
                Table[1].DrawText(book.Title, TextAlignment.Left, dch);
                Table[2].DrawText(book.Author, TextAlignment.Left, dch);
                Table[3].DrawText(book.Publisher, TextAlignment.Left, dch);
                if (book.Category.HasValue)
                {
                    Table[4].DrawText(AttributeUtil.GetEnumFieldDisplayName(book.Category.Value), TextAlignment.Left, dch);
                }
                if (book.Price.HasValue)
                {
                    Table[5].DrawText(book.Price.Value.ToString("#,##0円"), TextAlignment.Right, dch);
                }
                if (book.PurchaseDate.HasValue)
                {
                    Table[6].DrawText(book.PurchaseDate.Value.ToString("yyyy/MM/dd"), TextAlignment.Center, dch);
                }
                if (book.ReviewPoint.HasValue)
                {
                    Table[7].DrawText(new String('★', book.ReviewPoint.Value), TextAlignment.Left, dch);
                }

                DataRowIndex++;
                Table.RowIndex++;
            }

            // 枠線の描画
            Table.DrawBorder(dch.DefaulBrush, new Thickness(1.0d), null, dch);
            Table.DrawHeaderBorder(dch.DefaulBrush, new Thickness(0.0d, 0.0d, 0.0d, 1.0d), null, dch);

            // 印刷すべきデータがまだあれば印刷を継続する
            arg.PrintTerminate = (DataRowIndex >= BookList.Count);
        }
        private DrawingContextImpl CreateTarget()
        {
            var canvas = new SKCanvas(new SKBitmap(100, 100));

            return((DrawingContextImpl)DrawingContextHelper.WrapSkiaCanvas(canvas, new Vector(96, 96)));
        }