using System.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.Extensions.FileProviders; using Syncfusion.Drawing; using Syncfusion.HtmlConverter; using Syncfusion.Pdf; using Syncfusion.Pdf.Graphics; namespace gehGassi.Web.Helper { /// /// Erweiterungen um aus einem View ein PDF zu erstellen /// public static class ControllerPdfExtensions { public static byte[] GetPdf(this ControllerContext context, IUrlHelperFactory factory, IWebHostEnvironment env, string controller, string action, object routeValues) { var urlHelper = factory.GetUrlHelper(context); var address = urlHelper.Action(action, controller, routeValues); address = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}{address}"; var htmlConverter = new HtmlToPdfConverter(HtmlRenderingEngine.WebKit) { ConverterSettings = new WebKitConverterSettings() { WebKitPath = Path.Combine(env.ContentRootPath, "QtBinariesWindows"), PdfPageSize = PdfPageSize.A4, Margin = new PdfMargins() { All = 36f }, WebKitViewPort = new Size(896, 0), DisableWebKitWarning = true } }; var pdfDocument = htmlConverter.Convert(address); var outputStream = new MemoryStream(); pdfDocument.Save(outputStream); outputStream.Position = 0; return outputStream.ToArray(); } public static byte[] GetPdfWithHeaderAndFooter(this ControllerContext context, IUrlHelperFactory factory, IWebHostEnvironment env, string controller, string action, object routeValues) { var urlHelper = factory.GetUrlHelper(context); var address = urlHelper.Action(action, controller, routeValues); address = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}{address}"; var htmlConverter = new HtmlToPdfConverter(HtmlRenderingEngine.WebKit) { ConverterSettings = new WebKitConverterSettings() { WebKitPath = Path.Combine(env.ContentRootPath, "QtBinariesWindows"), PdfPageSize = PdfPageSize.A4, Margin = new PdfMargins() { All = 36f }, WebKitViewPort = new Size(896, 0), PdfHeader = AddPdfHeader(PdfPageSize.A4.Width, env), PdfFooter = AddPdfFooter(PdfPageSize.A4.Width, env), DisableWebKitWarning = true } }; var pdfDocument = htmlConverter.Convert(address); var outputStream = new MemoryStream(); pdfDocument.Save(outputStream); outputStream.Position = 0; return outputStream.ToArray(); } private static PdfPageTemplateElement AddPdfHeader(float width, IWebHostEnvironment env) { RectangleF rect = new RectangleF(0, 0, width, 75); //Create a new instance of PdfPageTemplateElement class. PdfPageTemplateElement header = new PdfPageTemplateElement(rect); PdfGraphics g = header.Graphics; var fileName = Path.Combine(env.WebRootPath, "images", "invoice_logo.png"); using var fileStram = File.OpenRead(fileName); var image = new PdfBitmap(fileStram); g.DrawImage(image, 214,0, 167, 50); return header; } private static PdfPageTemplateElement AddPdfFooter(float width, IWebHostEnvironment env) { RectangleF rect = new RectangleF(0, 0, width, 50); //Create a new instance of PdfPageTemplateElement class. PdfPageTemplateElement footer = new PdfPageTemplateElement(rect); PdfGraphics g = footer.Graphics; var fileName = Path.Combine(env.WebRootPath, "images", "invoice_icon.png"); using var fileStram = File.OpenRead(fileName); var image = new PdfBitmap(fileStram); g.DrawImage(image, 0, 0, 22, 25); g.DrawImage(image, 570, 0, 22, 25); PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 8); g.DrawString("gehgassi GmbH | c/o frebels | Judengasse 12/2 | 5020 Salzburg | office@gehgassi.com | www.gehgassi.com\n\rFN 580181h | UID: ATU77335634 | Sparkasse Kufstein | IBAN: AT39 2050 6077 0015 5083 | BIC: SPKUAT22XXX", font, PdfBrushes.Black, new RectangleF(0,0,595,50), new PdfStringFormat(PdfTextAlignment.Center)); return footer; } } }