protected Doc ItemAnalysisToPdfDoc(PdfRenderSettings settings = null) { if (settings == null) settings = new PdfRenderSettings(); StringWriter sw = new StringWriter(); HtmlTextWriter w = new HtmlTextWriter(sw); reportHeaderDiv.Controls.Add(LoadPDFHeaderInfo()); barGraphLevelsContainerDiv.Controls.Add(LoadBarGraphLevels()); barGraphPDFContainerDiv.Controls.Add(LoadBarGraphs()); contentDiv.RenderControl(w); string result_html = sw.GetStringBuilder().ToString(); int topOffset = settings.HeaderHeight > 0 ? settings.HeaderHeight : 0; int bottomOffset = settings.FooterHeight > 0 ? settings.FooterHeight : 0; Doc doc = new Doc(); doc.HtmlOptions.HideBackground = true; doc.HtmlOptions.PageCacheEnabled = false; doc.HtmlOptions.UseScript = true; doc.HtmlOptions.Timeout = 36000; doc.HtmlOptions.BreakZoneSize = 100; // I experiemented with this being 99% instead of 100%, but you end up with passages getting cut off in unflattering ways. This may lead to more blank space... but I think it's the lessor of evils doc.HtmlOptions.ImageQuality = 70; doc.MediaBox.String = "0 0 " + settings.PageWidth + " " + settings.PageHeight; doc.Rect.String = settings.LeftMargin + " " + (0 + bottomOffset).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + (settings.PageHeight - topOffset).ToString(); doc.HtmlOptions.AddTags = true; doc.SetInfo(0, "ApplyOnLoadScriptOnceOnly", "1"); List<int> forms = new List<int>(); int theID = doc.AddImageHtml(result_html); while (true) { if (!doc.Chainable(theID)) break; doc.Page = doc.AddPage(); theID = doc.AddImageToChain(theID); string[] tagIds = doc.HtmlOptions.GetTagIDs(theID); if (tagIds.Length > 0 && tagIds[0] == "test_header") forms.Add(doc.PageNumber); // By using GetTagIDs to find if a test header ended up on this page, we can determine whether the page needs a header if (settings.PossibleForcedBreaks) { // only want to take the performance hit if there's a change we're forcing breaks if (String.IsNullOrEmpty(doc.GetText("Text"))) { // WSH Found situation where after I added page break always for multi-form, one test that was already breaking properly, added an extra page that was blank between forms. Almost like some amount of HTML had been put there, even though it wasn't any real text. By checking to make sure there is some actual text on page, we can avoid that problem doc.Delete(doc.Page); } } } if (settings.HeaderHeight > 0 && !String.IsNullOrEmpty(settings.HeaderText)) { /*HttpServerUtility Server = HttpContext.Current.Server; headerText = Server.HtmlDecode(headerText);*/ Doc headerDoc = new Doc(); headerDoc.MediaBox.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT headerDoc.Rect.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT headerDoc.VPos = 0.5; int headerID = headerDoc.AddImageHtml(settings.HeaderText); if (!String.IsNullOrEmpty(settings.HeaderText)) { int form_ref = 0; for (int i = 1; i <= doc.PageCount; i++) { if (form_ref < forms.Count && forms[form_ref] == i) { form_ref++; } else { if (i > 1 || settings.ShowHeaderOnFirstPage) { doc.PageNumber = i; doc.Rect.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT doc.VPos = 0.5; theID = doc.AddImageDoc(headerDoc, 1, null); theID = doc.AddImageToChain(theID); } } } } } for (int i = 1; i <= doc.PageCount; i++) { doc.PageNumber = i; doc.Flatten(); } return doc; }
protected Doc AssessmentSummaryToPdfDoc(PdfRenderSettings settings = null) { var dp = DistrictParms.LoadDistrictParms(); if (settings == null) settings = new PdfRenderSettings(); StringWriter sw = new StringWriter(); HtmlTextWriter w = new HtmlTextWriter(sw); summaryContent.Attributes["style"] = "font-family: Sans-Serif, Arial;font-weight: bold;position: relative;font-size: .8em;"; summaryContent.RenderControl(w); string result_html = sw.GetStringBuilder().ToString(); int topOffset = settings.HeaderHeight > 0 ? settings.HeaderHeight : 0; int bottomOffset = settings.FooterHeight > 0 ? settings.FooterHeight : 0; Doc doc = new Doc(); doc.HtmlOptions.HideBackground = true; doc.HtmlOptions.PageCacheEnabled = false; doc.HtmlOptions.UseScript = true; doc.HtmlOptions.Timeout = 36000; doc.HtmlOptions.BreakZoneSize = 100; // I experiemented with this being 99% instead of 100%, but you end up with passages getting cut off in unflattering ways. This may lead to more blank space... but I think it's the lessor of evils doc.HtmlOptions.ImageQuality = 70; doc.MediaBox.String = "0 0 " + settings.PageWidth + " " + settings.PageHeight; doc.Rect.String = settings.LeftMargin + " " + (0 + bottomOffset).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + (settings.PageHeight - topOffset).ToString(); doc.HtmlOptions.AddTags = true; doc.SetInfo(0, "ApplyOnLoadScriptOnceOnly", "1"); List<int> forms = new List<int>(); int theID = doc.AddImageHtml(result_html); Thinkgate.Base.Classes.Assessment.ChainPDFItems(doc, theID, forms, settings, dp.PdfPrintPageLimit); if (settings.HeaderHeight > 0 && !String.IsNullOrEmpty(settings.HeaderText)) { /*HttpServerUtility Server = HttpContext.Current.Server; headerText = Server.HtmlDecode(headerText);*/ Doc headerDoc = new Doc(); headerDoc.MediaBox.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT headerDoc.Rect.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT headerDoc.VPos = 0.5; int headerID = headerDoc.AddImageHtml(settings.HeaderText); if (!String.IsNullOrEmpty(settings.HeaderText)) { int form_ref = 0; for (int i = 1; i <= doc.PageCount; i++) { if (form_ref < forms.Count && forms[form_ref] == i) { form_ref++; } else { if (i > 1 || settings.ShowHeaderOnFirstPage) { doc.PageNumber = i; doc.Rect.String = settings.LeftMargin + " " + (settings.PageHeight - settings.HeaderHeight).ToString() + " " + (settings.PageWidth - settings.RightMargin).ToString() + " " + settings.PageHeight; //LEFT, BOTTOM,WIDTH, HEIGHT doc.VPos = 0.5; theID = doc.AddImageDoc(headerDoc, 1, null); theID = doc.AddImageToChain(theID); } } } } } for (int i = 1; i <= doc.PageCount; i++) { doc.PageNumber = i; doc.Flatten(); } return doc; }
protected void Page_Load(object sender, EventArgs e) { if (Tile == null) return; // TFS 1123 : Check the content is locked or unlocked for specific Test ID if (Request.QueryString["testID"] != null) { string contentLock; int testID = Convert.ToInt32(Request.QueryString["testID"]); DataRow row = Thinkgate.Base.Classes.Assessment.GetAssessmentSchedule(testID); if (row != null) { string content = row["CONTENT"].ToString(); if (content == AssessmentScheduleStatus.Disabled.ToString()) { _isContentLocked = true; } else if (content == AssessmentScheduleStatus.Enabled.ToString()) { _isContentLocked = false; } else if (row["CONTENT"].ToString().Split(' ')[0] == AssessmentScheduleStatus.Enabled.ToString()) { contentLock = row["CONTENT"].ToString(); DateTime dateFrom = DateTime.MinValue; DateTime dateTo = DateTime.MaxValue; if (contentLock.IndexOf(" - ") > -1) //Enabled 10/15/2013 - 10/31/2013 { dateFrom = Convert.ToDateTime(contentLock.ToString().Split(' ')[1].Trim()); dateTo = Convert.ToDateTime(contentLock.ToString().Split(' ')[3].Trim()); } else if (contentLock.IndexOf("Starting") > -1) //Enabled Starting 10/15/2013 { dateFrom = Convert.ToDateTime(contentLock.ToString().Split(' ')[2]); } else if (contentLock.IndexOf("Until") > -1) //Enabled Until 10/15/2013 { dateTo = Convert.ToDateTime(contentLock.ToString().Split(' ')[2]); } if (dateFrom <= DateTime.Today && DateTime.Today <= dateTo) { _isContentLocked = false; } else { _isContentLocked = true; } } } } if (Request.QueryString["selectedReport"] != null && !String.IsNullOrEmpty(Request.QueryString["selectedReport"])) { SessionObject sessionObject = (SessionObject)Session["SessionObject"]; ThinkgateEventSource.Log.LoggedUserReportAccess(MethodBase.GetCurrentMethod().DeclaringType.ToString() + "->" + MethodBase.GetCurrentMethod().Name, sessionObject.LoggedInUser.UserName + " has accessed '" + Request.QueryString["selectedReport"].ToString() + "' report", Request.QueryString["selectedReport"].ToString(), sessionObject.LoggedInUser.UserName); } _selectedFormID = rcbDistractorAnalysisForms.SelectedValue; isPDFView = Request.QueryString["printPDFView"] == "yes"; _highlightCorrectPDFParm = Request.QueryString["highlightCorrect"] == "yes"; _highlightIncorrectPDFParm = Request.QueryString["highlightIncorrect"] == "yes"; _hideStudentName = Request.QueryString["hdStdName"] == "yes"; _hideStudentID = Request.QueryString["hdStdID"] == "yes"; _showRigorPDFParm = Request.QueryString["showRigor"] == "yes"; _guidforPDFView = Request.QueryString["guid"]; LoadCriteria(); if (!isPDFView) { LoadReport(); LoadFormButton(); } highlightCorrect_checkbox.Checked = true; highlightIncorrect_checkbox.Checked = true; showStandards_checkbox.Checked = true; showRigor_checkbox.Checked = true; if (isPDFView) { var settings = new PdfRenderSettings(); settings.PageHeight = 612; settings.PageWidth = 792; settings.HeaderHeight = 0; settings.FooterHeight = 10; settings.LeftMargin = 10; settings.RightMargin = 10; Doc doc = DistractorAnalysisToPdfDoc(settings); byte[] theData = doc.GetData(); Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "inline; filename=MyPDF.PDF"); Response.AddHeader("content-length", theData.Length.ToString()); Response.BinaryWrite(theData); } }