فهرست منبع

Added PDF Rendering Option to MobileDocument

Frank van den Bos 1 سال پیش
والد
کامیت
b2f95059ce

+ 1 - 0
InABox.Mobile/InABox.Mobile.Shared/InABox.Mobile.Shared.csproj

@@ -23,6 +23,7 @@
         <PackageReference Include="Serilog" Version="3.0.1" />
         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
         <PackageReference Include="Syncfusion.Licensing" Version="22.1.39" />
+        <PackageReference Include="Syncfusion.Xamarin.Pdf" Version="22.1.39" />
         <PackageReference Include="Syncfusion.Xamarin.SfDataGrid" Version="22.1.39" />
         <PackageReference Include="Syncfusion.Xamarin.SfPopupLayout" Version="22.1.39" />
         <PackageReference Include="Syncfusion.Xamarin.SfPullToRefresh" Version="22.1.39" />

+ 37 - 1
InABox.Mobile/InABox.Mobile.Shared/MobileDocument.cs

@@ -2,6 +2,11 @@ using System;
 using System.IO;
 using System.Threading.Tasks;
 using Plugin.Media;
+using Syncfusion.Drawing;
+using Syncfusion.Pdf;
+using Syncfusion.Pdf.Graphics;
+using Syncfusion.Pdf.Parsing;
+
 
 namespace InABox.Mobile
 {
@@ -9,6 +14,7 @@ namespace InABox.Mobile
     public abstract class MobileDocumentSource
     {
         public abstract Task<MobileDocument> GetDocument();
+        
     }
 
     public class MobileDocumentCameraSource : MobileDocumentSource
@@ -73,6 +79,37 @@ namespace InABox.Mobile
         }
     }
     
+    public static class MobileDocumentExtensions
+    {
+        public static MobileDocument ToPDF(this MobileDocument document)
+        {
+            byte[] result;
+            using (var img = new MemoryStream(document.Data))
+            {
+                var image = new PdfBitmap(img);
+
+                var pdfDoc = new PdfDocument();
+
+                var section = pdfDoc.Sections.Add();
+                section.PageSettings.Margins.All = 0;
+                section.PageSettings.Width = image.Width;
+                section.PageSettings.Height = image.Height;
+
+                var page = section.Pages.Add();
+                page.Graphics.DrawImage(image, 0, 0, page.Size.Width, page.Size.Height);
+
+                using (var ms = new MemoryStream())
+                {
+                    pdfDoc.Save(ms);
+                    document.Data = ms.GetBuffer();
+                    document.FileName = Path.ChangeExtension(document.FileName, "pdf");                
+                }
+            }
+
+            return document;
+        }
+    }
+    
     public class MobileDocument
     {
         public string FileName { get; set; }
@@ -89,6 +126,5 @@ namespace InABox.Mobile
         {
             return await new T().GetDocument();
         }
-        
     }
 }