| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- using QuestPDF.Fluent;
- using QuestPDF.Helpers;
- using QuestPDF.Infrastructure;
- using QuestPDF.SkiaSharpIntegration;
- using SkiaSharp;
- namespace QuestPDF.DocumentationExamples;
- public class SkiaSharpIntegrationExamples
- {
- [Test]
- public void Svg()
- {
- Document
- .Create(document =>
- {
- document.Page(page =>
- {
- page.Size(350, 350);
- page.Margin(25);
- page.Content()
- .Width(300)
- .Height(300)
- .SkiaSharpSvgCanvas((canvas, size) =>
- {
- var centerX = size.Width / 2;
- var centerY = size.Height / 2;
- var radius = Math.Min(centerX, centerY);
- // draw clock face
- using var facePaint = new SKPaint
- {
- Color = new SKColor(Colors.Blue.Lighten4)
- };
- canvas.DrawCircle(centerX, centerY, radius, facePaint);
- // draw clock ticks
- using var tickPaint = new SKPaint
- {
- Color = new SKColor(Colors.Blue.Darken4),
- StrokeWidth = 4,
- StrokeCap = SKStrokeCap.Round
- };
- canvas.Save();
- canvas.Translate(centerX, centerY);
- foreach (var i in Enumerable.Range(0, 12))
- {
- canvas.DrawLine(new SKPoint(0, radius * 0.85f), new SKPoint(0, radius * 0.95f), tickPaint);
- canvas.RotateDegrees(30);
- }
- canvas.Restore();
- // draw clock hands
- using var hourHandPaint = new SKPaint
- {
- Color = new SKColor(Colors.Blue.Darken4),
- StrokeWidth = 8,
- StrokeCap = SKStrokeCap.Round
- };
- using var minuteHandPaint = new SKPaint
- {
- Color = new SKColor(Colors.Blue.Darken2),
- StrokeWidth = 4,
- StrokeCap = SKStrokeCap.Round
- };
- canvas.Translate(centerX, centerY);
- canvas.Save();
- canvas.RotateDegrees(6 * DateTime.Now.Minute);
- canvas.DrawLine(new SKPoint(0, 0), new SKPoint(0, -radius * 0.7f), minuteHandPaint);
- canvas.Restore();
-
- canvas.Save();
- canvas.RotateDegrees(30 * DateTime.Now.Hour + DateTime.Now.Minute / 2);
- canvas.DrawLine(new SKPoint(0, 0), new SKPoint(0, -radius * 0.5f), hourHandPaint);
- canvas.Restore();
- });
- });
- })
- .GenerateImages(x => "skiasharp-integration-svg.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
- }
-
- [Test]
- public void Resterized()
- {
- Document
- .Create(document =>
- {
- document.Page(page =>
- {
- page.Size(new PageSize(500, 400));
- page.DefaultTextStyle(x => x.FontSize(20));
- page.Content()
- .Padding(25)
- .SkiaSharpRasterizedCanvas((canvas, size) =>
- {
- // add padding to properly display the shadow effect
- const float padding = 25;
- canvas.Translate(padding, padding);
-
- // load image and scale canvas space
- using var bitmap = SKBitmap.Decode("Resources/landscape.jpg");
-
- var targetBitmapSize = new SKSize(size.Width - 2 * padding, size.Height - 2 * padding);
- var scale = Math.Min(targetBitmapSize.Width / bitmap.Width, targetBitmapSize.Height / bitmap.Height);
- canvas.Scale(scale);
- var drawingArea = new SKRoundRect(new SKRect(0, 0, bitmap.Width, bitmap.Height), 32, 32);
-
- // draw drop shadow
- using var dropShadowFilter = SKImageFilter.CreateDropShadow(8, 8, 16, 16, SKColors.Black);
- using var paint = new SKPaint
- {
- ImageFilter = dropShadowFilter
- };
- canvas.DrawRoundRect(drawingArea, paint);
-
- // draw image
- canvas.ClipRoundRect(drawingArea, antialias: true);
- canvas.DrawBitmap(bitmap, SKPoint.Empty);
- });
- });
- })
- .GenerateImages(x => "skiasharp-integration-rasterized.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
- }
- }
|