using DinkToPdf; using DinkToPdf.Contracts; using Microsoft.AspNetCore.Mvc; using System.IO; using System; using PdfService.Utility; using PdfService.Models; namespace PdfService.Controllers { [ApiController] public class PdfController : ControllerBase { private IConverter _converter; public PdfController(IConverter converter) { _converter = converter; } [Route("")] [HttpGet] public ActionResult GeneratePdfDemo() { var globalSettings = new GlobalSettings { ColorMode = ColorMode.Color, Orientation = Orientation.Portrait, PaperSize = PaperKind.A4, Margins = new MarginSettings { Top =0, Left = 0, Right = 0 }, DocumentTitle = "Sentiment Analysis - Advanced Report - " + DateTime.Now , }; var objectSettings = new ObjectSettings { PagesCount = true, HtmlContent = TemplateGenerator.GetHTMLString(new Term[]{ new Term("Good Term", 0.9), new Term("Term 1", 0.5), new Term("Another Term", 0.3), new Term("Another bad Tweet", 0.1) }), WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "bulma.min.css") }, FooterSettings = { FontSize = 9, Right = "Page [page] of [toPage] ", Line = false, Spacing = 0.812 } }; var pdf = new HtmlToPdfDocument() { GlobalSettings = globalSettings, Objects = { objectSettings } }; var file = _converter.Convert(pdf); return File(file, "application/pdf"); } // GET /generatePDF [Route("generatePDF")] [HttpPost] public ActionResult GeneratePdf([FromBody] Term[] terms) { // check parameters if (!ModelState.IsValid) { return BadRequest(ModelState); } // check parameter if they have correct form foreach(Term term in terms) { if(term.Name.Length<1 || term.Sentiment<0.0 || term.Sentiment>1.0){ return BadRequest(ModelState); } } var globalSettings = new GlobalSettings { ColorMode = ColorMode.Color, Orientation = Orientation.Portrait, PaperSize = PaperKind.A4, Margins = new MarginSettings { Top = 0, Left = 0, Right = 0 }, DocumentTitle = "Sentiment Analysis - Advanced Report - " + DateTime.Now , }; var objectSettings = new ObjectSettings { PagesCount = true, HtmlContent = TemplateGenerator.GetHTMLString(terms), WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "bulma.min.css") }, FooterSettings = { FontSize = 9, Right = "Page [page] of [toPage] ", Line = false, Spacing = 0.812 } }; var pdf = new HtmlToPdfDocument() { GlobalSettings = globalSettings, Objects = { objectSettings } }; var file = _converter.Convert(pdf); if(Request.Headers["Accept"] == "application/base64") return Content(Convert.ToBase64String(file)); else return File(file, "application/pdf"); } } }