using InABox.Core; using Syncfusion.Pdf; using Syncfusion.Pdf.Graphics; using Syncfusion.PdfToImageConverter; namespace InABox.Avalonia.Platform.Desktop; public class Desktop_PdfRenderer : IPdfRenderer { public byte[]? PdfToImage(byte[]? pdf, int page, int dpi) { if (pdf?.Any() != true) return null; using (var inData = new MemoryStream(pdf)) { using (var converter = new PdfToImageConverter(inData)) { using (var outData = new MemoryStream()) { converter.Convert(page,true,false) .CopyTo(outData); return outData.ToArray(); } } } } public Task PdfToImageAsync(byte[]? pdf, int page, int dpi) => Task.Run(() => PdfToImage(pdf, page, dpi)); public byte[]? ImageToPdf(byte[]? image) { if (image?.Any() != true) return null; using var imgStream = new MemoryStream(image); var bmp = new PdfBitmap(imgStream); var doc = new PdfDocument(); var section = doc.Sections.Add(); section.PageSettings.Margins.All = 0; section.PageSettings.Width = bmp.Width; section.PageSettings.Height = bmp.Height; var page = section.Pages.Add(); page.Graphics.DrawImage(bmp, 0, 0, page.Size.Width, page.Size.Height); using var docStream = new MemoryStream(); doc.Save(docStream); return docStream.GetBuffer(); } public Task ImageToPdfAsync(byte[]? image) => Task.Run(() => ImageToPdf(image)); public Logger? Logger { get; set; } }