private string ModelToHTML(IResultsViewModel model) { string crimesHTML = "None"; if (model.CriminalHistory != null && model.CriminalHistory.Count() > 0) { var builder = new StringBuilder(); foreach (var crime in model.CriminalHistory) { builder.Append(HTMLTemplates.CrimeHtml); var prop = crime.GetType().GetProperties(); foreach (var property in prop) { builder.Replace($"*{property.Name}*", property.GetValue(crime).ToString()); } } crimesHTML = builder.ToString(); } var pageBuilder = new StringBuilder(); pageBuilder.Append(HTMLTemplates.PageHtml); var modelProp = model.GetType().GetProperties(); foreach (var property in modelProp.Where(p => p.Name != "CriminalHistory")) { pageBuilder.Replace($"*{property.Name}*", property.GetValue(model).ToString()); } pageBuilder.Replace("*Crimes*", crimesHTML); var page = pageBuilder.ToString(); return(page); }
public ResultsView(IResultsViewModel viewModel) { ViewModel = viewModel; InitializeComponent(); BarChart.DataContext = viewModel; }
public FileInfo CreatePdf(IResultsViewModel model) { if (model == null || (string.IsNullOrEmpty(model.FullName) && string.IsNullOrEmpty(model.Photo) && model.Height <= 0)) { return(null); } string file = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, $@"App_Data\{model.FullName ?? "unkown"}.pdf"); string page = ModelToHTML(model); if (!string.IsNullOrEmpty(page)) { var htmlToPdf = new HtmlToPdf(new PdfPrintOptions() { PaperSize = PdfPrintOptions.PdfPaperSize.A4 }); PdfResource pdf = htmlToPdf.RenderHtmlAsPdf(page); if (File.Exists(file)) { for (int i = 1; ; ++i) { var s = file.Insert(file.Length - 4, $" ({i.ToString()})"); if (File.Exists(s)) { continue; } else { file = s; break; } } } pdf.SaveAs(file); } var fileinfo = new FileInfo(file); return(fileinfo.Exists ? fileinfo : null); }