107 lines
4.7 KiB
C#
107 lines
4.7 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Erweiterungen um aus einem View ein PDF zu erstellen
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|