|
@@ -1,6 +1,7 @@
|
|
|
using InABox.Core;
|
|
|
-using PDFtoImage;
|
|
|
-using SkiaSharp;
|
|
|
+using Syncfusion.Pdf;
|
|
|
+using Syncfusion.Pdf.Graphics;
|
|
|
+using Syncfusion.PdfToImageConverter;
|
|
|
|
|
|
namespace InABox.Avalonia.Platform.Desktop;
|
|
|
|
|
@@ -11,17 +12,49 @@ public class Desktop_PdfRenderer : IPdfRenderer
|
|
|
if (pdf?.Any() != true)
|
|
|
return null;
|
|
|
|
|
|
- var result = Conversion.ToImage(pdf, page, options: new RenderOptions(Dpi: dpi));
|
|
|
- using var ms = new MemoryStream();
|
|
|
- result.Encode(ms, SKEncodedImageFormat.Jpeg, 65);
|
|
|
- return ms.ToArray();
|
|
|
+ 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<byte[]?> PdfToImageAsync(byte[]? pdf, int page, int dpi)
|
|
|
=> Task.Run(() => PdfToImage(pdf, page, dpi));
|
|
|
|
|
|
public byte[]? ImageToPdf(byte[]? image)
|
|
|
- => null;
|
|
|
+ {
|
|
|
+ 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));
|