SkiaSharpHelpers.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Text;
  2. using QuestPDF.Fluent;
  3. using QuestPDF.Infrastructure;
  4. using SkiaSharp;
  5. namespace QuestPDF.SkiaSharpIntegration;
  6. public static class SkiaSharpHelpers
  7. {
  8. public static void SkiaSharpSvgCanvas(this IContainer container, Action<SKCanvas, Size> drawOnCanvas)
  9. {
  10. container.Svg(size =>
  11. {
  12. using var stream = new MemoryStream();
  13. using (var canvas = SKSvgCanvas.Create(new SKRect(0, 0, size.Width, size.Height), stream))
  14. drawOnCanvas(canvas, size);
  15. var svgData = stream.ToArray();
  16. return Encoding.UTF8.GetString(svgData);
  17. });
  18. }
  19. public static void SkiaSharpRasterizedCanvas(this IContainer container, Action<SKCanvas, ImageSize> drawOnCanvas)
  20. {
  21. container.Image(payload =>
  22. {
  23. using var bitmap = new SKBitmap(payload.ImageSize.Width, payload.ImageSize.Height);
  24. using (var canvas = new SKCanvas(bitmap))
  25. {
  26. canvas.Scale(payload.ImageSize.Width / payload.AvailableSpace.Width, payload.ImageSize.Height / payload.AvailableSpace.Height);
  27. drawOnCanvas(canvas, new ImageSize((int)payload.AvailableSpace.Width, (int)payload.AvailableSpace.Height));
  28. }
  29. return bitmap.Encode(SKEncodedImageFormat.Png, 100).ToArray();
  30. });
  31. }
  32. }