public QuestionnairePreviewModel GenerateQuestionnaireModel(Questionnaire questionaire) { Random random = new Random(); QuestionnairePreviewModel model = new QuestionnairePreviewModel(); model.QuestionnaireId = questionaire.QuestionnaireId; model.Title = questionaire.Title; model.QuestionSetId = questionaire.QuestionSetId; model.Questions = GetListKeysWithQuestionSets(questionaire.QuestionSetId); List <KeyValuePair <string, string> > questions = new List <KeyValuePair <string, string> >(); List <KeyValuePair <string, string> > questionsForPdf = new List <KeyValuePair <string, string> >(); foreach (KeyValuePair <string, string> item in model.Questions) { string[] stringSeparators = new string[] { @"[""", @""",""", @"""]" }; if (item.Value != null && item.Value != String.Empty) { string[] values = item.Value.ToString().Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); string value = values[random.Next(0, values.Count())]; questionsForPdf.Add(new KeyValuePair <string, string>(item.Key, value.ToString())); value = value.Replace("\\n", "<br/>"); questions.Add(new KeyValuePair <string, string>(item.Key, value.ToString())); } } model.GeneratedQuestionary = questions.ToList(); model.GeneratedQuestionary.Sort(Compare); model.GeneratedQuestionaryForPdf = questionsForPdf.OrderBy(q => q.Key).ToList(); TempData["Questionnaire"] = model; return(model); }
public ActionResult GenerateQuestionnairePDF() { TempData.Keep("Questionnaire"); QuestionnairePreviewModel model = TempData["Questionnaire"] as QuestionnairePreviewModel; return(File(model.GeneratePDF().ToArray(), "application/pdf", "Questionnaire.pdf")); }
public ViewResult GenerateQuestionnaire(int questionaireID) { Questionnaire questionaire = repository.Questionnaires.Where(q => q.QuestionnaireId == questionaireID).FirstOrDefault(); if (questionaire == null) { return(View("~/Views/Error/ShowErrorPage.cshtml")); } else { QuestionnairePreviewModel model = GenerateQuestionnaireModel(questionaire); if (model.GeneratedQuestionary.Count == 0) { return(View(model)); } return(View("~/Views/HR/GenerateQuestionnaire.cshtml", model)); } }
public static MemoryStream GeneratePDF(this QuestionnairePreviewModel model) { MemoryStream pdfMemoryStream = new MemoryStream(); PDF pdf = new PDF(pdfMemoryStream); Font titleFont = new Font(pdf, new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/Resources/DejaVuLGCSerif.ttf.deflated", FileMode.Open, FileAccess.Read)); titleFont.SetSize(22f); Font questionTitleFont = new Font(pdf, new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/Resources/DejaVuLGCSerif.ttf.deflated", FileMode.Open, FileAccess.Read)); questionTitleFont.SetSize(18f); Font textLineFont = new Font(pdf, new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/Resources/DejaVuLGCSerif.ttf.deflated", FileMode.Open, FileAccess.Read)); textLineFont.SetSize(14f); Table questionTable = new Table(); List <List <Cell> > tableData = new List <List <Cell> >(); Cell title = new Cell(titleFont, model.Title); title.SetTextAlignment(Align.CENTER); tableData.Add(new List <Cell> { title }); foreach (KeyValuePair <String, String> question in model.GeneratedQuestionaryForPdf) { Cell questionTitle = new Cell(questionTitleFont, "Question " + question.Key); tableData.Add(new List <Cell> { questionTitle }); string[] splittedQuestion = question.Value.Split(new string [] { "\\n" }, StringSplitOptions.None); foreach (string textLine in splittedQuestion) { tableData.Add(new List <Cell> { new Cell(textLineFont, textLine) }); } tableData.Add(new List <Cell> { new Cell(textLineFont, "") }); } questionTable.SetData(tableData); questionTable.AutoAdjustColumnWidths(); questionTable.SetNoCellBorders(); questionTable.SetPosition(25, 10); questionTable.SetColumnWidth(0, A4.PORTRAIT[0] - 50); questionTable.WrapAroundCellText(); Page page = new Page(pdf, A4.PORTRAIT); while (true) { questionTable.DrawOn(page); if (!questionTable.HasMoreData()) { questionTable.ResetRenderedPagesCount(); break; } page = new Page(pdf, A4.PORTRAIT); } pdf.Flush(); return(pdfMemoryStream); }