| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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);
- var output = converter.Convert(page, true, false) as MemoryStream;
- return output.ToArray();
- }
- public Task<byte[]?> PdfToImageAsync(byte[]? pdf, int page, int dpi)
- => Task.Run(() => PdfToImage(pdf, page, dpi));
- public byte[][]? PdfToImages(byte[]? pdf, int dpi)
- {
- if (pdf is null || pdf.Length == 0)
- return null;
- using var inData = new MemoryStream(pdf);
- using var converter = new PdfToImageConverter(inData);
- return Enumerable.Range(0, converter.PageCount).Select(i =>
- {
- var output = converter.Convert(i, true, false) as MemoryStream;
- return output.ToArray();
- }).ToArray();
- }
- public Task<byte[][]?> PdfToImagesAsync(byte[]? pdf, int dpi)
- => Task.Run(() => PdfToImages(pdf, dpi));
- public int? PdfPageCount(byte[]? pdf)
- {
- if (pdf is null || pdf.Length == 0)
- return null;
- using var inData = new MemoryStream(pdf);
- using var converter = new PdfToImageConverter(inData);
- return converter.PageCount;
- }
- public Task<int?> PdfPageCountAsync(byte[]? pdf)
- => Task.Run(() => PdfPageCount(pdf));
- 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<byte[]?> ImageToPdfAsync(byte[]? image)
- => Task.Run(() => ImageToPdf(image));
- public Logger? Logger { get; set; }
- }
|