Пример #1
0
        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);
        }
Пример #2
0
        public ActionResult GenerateQuestionnairePDF()
        {
            TempData.Keep("Questionnaire");
            QuestionnairePreviewModel model = TempData["Questionnaire"] as QuestionnairePreviewModel;

            return(File(model.GeneratePDF().ToArray(), "application/pdf", "Questionnaire.pdf"));
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
        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);
        }