PdfRenderer.Android.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using InABox.Core;
  2. using PDFtoImage;
  3. using SkiaSharp;
  4. namespace InABox.Avalonia.Platform.Android;
  5. public class Android_PdfRenderer : IPdfRenderer
  6. {
  7. public Logger? Logger { get; set; }
  8. public byte[]? PdfToImage(byte[]? pdf, int page, int dpi)
  9. {
  10. if (pdf is null || pdf.Length == 0)
  11. return null;
  12. var result = Conversion.ToImage(pdf, page, options: new RenderOptions(Dpi: dpi));
  13. using var ms = new MemoryStream();
  14. result.Encode(ms, SKEncodedImageFormat.Jpeg, 65);
  15. return ms.ToArray();
  16. }
  17. public Task<byte[]?> PdfToImageAsync(byte[]? pdf, int page, int dpi)
  18. => Task.Run(() => PdfToImage(pdf, page, dpi));
  19. public byte[][]? PdfToImages(byte[]? pdf, int dpi)
  20. {
  21. if (pdf is null || pdf.Length == 0)
  22. return null;
  23. var result = Conversion.ToImages(pdf, options: new RenderOptions(Dpi: dpi));
  24. return result.Select(x =>
  25. {
  26. using var ms = new MemoryStream();
  27. x.Encode(ms, SKEncodedImageFormat.Jpeg, 65);
  28. return ms.ToArray();
  29. }).ToArray();
  30. }
  31. public Task<byte[][]?> PdfToImagesAsync(byte[]? pdf, int dpi)
  32. => Task.Run(() => PdfToImages(pdf, dpi));
  33. public int? PdfPageCount(byte[]? pdf)
  34. {
  35. if (pdf is null || pdf.Length == 0)
  36. return null;
  37. return Conversion.GetPageCount(pdf);
  38. }
  39. public Task<int?> PdfPageCountAsync(byte[]? pdf)
  40. => Task.Run(() => PdfPageCount(pdf));
  41. public byte[]? ImageToPdf(byte[]? image) => null;
  42. public Task<byte[]?> ImageToPdfAsync(byte[]? image)
  43. => Task.Run(() => ImageToPdf(image));
  44. }