protected int RecurseRender(Rdl.Render.GenericRender rpt, StringBuilder body, Element elmt, int level, bool forPrint) { StringBuilder bodyPart = new StringBuilder(); bool hasAction = false; string style = string.Empty; //BoxStyle bs = rpt.StyleList[elmt.StyleIndex]; //if (elmt.ReportElement is Rdl.Engine.Report) //{ // rpt = (Rdl.Engine.Report)elmt.ReportElement; //} if (elmt is Container) { Container c = elmt as Container; if (!c.IsVisible) { return(0); } } if ((elmt is TextElement || elmt is FixedContainer || elmt is ImageElement || elmt is ChartElement)) { style += "width: " + ElementWidth(rpt, elmt) + "pt;" + "height: " + ElementHeight(rpt, elmt) + "pt;"; } if (elmt is TextElement) { style += "overflow: hidden;"; } if (elmt._imageIndex >= 0 && !(elmt is ImageElement)) { style += "background-image: url(" + GetImageUrl(elmt.Name, "StaticImage", elmt._imageIndex.ToString()) + ");"; style += "background-repeat: " + rpt.ImageList[elmt._imageIndex].ImageRepeat.ToString() + ";"; } if (elmt.Parent != null && elmt.Parent is Rdl.Render.FixedContainer) { decimal top = elmt.Top; decimal left = elmt.Left; style += "top: " + top + "pt;" + "left: " + left + "pt;"; // 12/26/2007 This line caused problems with tables. //if (!elmt.MatchParentHeight) style += "position: absolute;"; } if (elmt is TextElement && ((TextStyle)elmt.Style).TextAlign == Rdl.Engine.Style.TextAlignEnum.General) { TextElement te = elmt as TextElement; decimal val; if (te.Text.Length > 0 && decimal.TryParse(te.Text, System.Globalization.NumberStyles.AllowCurrencySymbol | System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.CurrentCulture, out val)) { style += "text-align: right;"; } else { style += "text-align: left;"; } } if (elmt is FlowContainer && ((FlowContainer)elmt).FlowDirection == FlowContainer.FlowDirectionEnum.LeftToRight) { int elements = 0; bodyPart.AppendLine(Spaces(level) + "<table cellpadding=\"0\" cellspacing=\"0\" " + "id=\"" + elmt.Name + "\" " + ((elmt.StyleIndex >= 0) ? "class=\"Report_style" + elmt.StyleIndex + "\" " : string.Empty) + "style=\"" + style + "\"" + ">" + "<tr>"); foreach (Element child in ((Container)elmt).Children) { bodyPart.AppendLine(Spaces(level + 1) + "<td>"); elements += RecurseRender(rpt, bodyPart, child, level + 2, forPrint); bodyPart.AppendLine(Spaces(level + 1) + "</td>"); } bodyPart.AppendLine(Spaces(level) + "</tr></table>"); if (elements > 0) { body.Append(bodyPart.ToString()); } return(elements); } if (elmt is Container || elmt is TextElement || elmt is ImageElement || elmt is ChartElement) { string divTag = "<div " + "id=\"" + elmt.Name + "\" " + ((elmt.StyleIndex >= 0) ? "class=\"Report_style" + elmt.StyleIndex.ToString() + "\" " : string.Empty) + "style=\"" + style + "\""; if (elmt is TextElement && ((TextElement)elmt).IsToggle) { divTag += " stateToggle=\"" + ((TextElement)elmt).ToggleState.ToString() + "\""; } divTag += ">"; bodyPart.AppendLine(Spaces(level) + divTag); } if (elmt is TextElement) { TextElement te = elmt as TextElement; if (te.IsToggle && !forPrint) { bodyPart.AppendLine(Spaces(level + 1) + "<a href=\"javascript:{}\" onclick=\"javascript:ToggleState('" + te.Name + "');\">"); bodyPart.AppendLine(Spaces(level + 1) + "<img id=\"" + te.Name + "_img\" src=" + ((te.ToggleState == TextElement.ToggleStateEnum.open) ? _minusGif : _plusGif) + " border=\"0\" style=\"float: left;\" />"); bodyPart.AppendLine(Spaces(level + 1) + "</a>"); } } if (elmt is ActionElement) { ActionElement ae = (ActionElement)elmt; if (ae.DrillThroughReportName != null) { bodyPart.AppendLine(Spaces(level + 1) + "<a href=\"javascript:{}\" onclick=\"javascript:Action('" + ae.Name + "');\">"); hasAction = true; } else if (ae.Hyperlink != null) { bodyPart.AppendLine(Spaces(level + 1) + "<a href=\"" + ae.Hyperlink + "\" >"); hasAction = true; } else if (ae.BookmarkLink != null) { bodyPart.AppendLine(Spaces(level + 1) + "<a href=\"#" + ae.BookmarkLink + "\" >"); hasAction = true; } } if (elmt is TextElement) { TextElement te = elmt as TextElement; // Save the report item value for filling in to ReportItem references later if (te.ReportElement is Rdl.Engine.ReportItem) { elementValues[((Rdl.Engine.ReportItem)te.ReportElement).Name] = te.Text; } string text = te.Text.Replace("\n", "<br />"); bodyPart.AppendLine(Spaces(level) + text); } if (elmt is ImageElement) { ImageElement ie = elmt as ImageElement; bodyPart.AppendLine(Spaces(level) + "<img id=\"img_" + elmt.Name + "\" alt=\"\" border=\"0\" src=\"\">"); _script.AppendLine(Spaces(level) + "document.getElementById('img_" + elmt.Name + "').src = " + GetImageUrl(elmt.Name, "SizedImage", elmt._imageIndex.ToString()) + ";" ); } if (elmt is ChartElement) { _charts.Add(elmt.Name, (ChartElement)elmt); bodyPart.AppendLine(Spaces(level) + "<img id=\"img_" + elmt.Name + "\" alt=\"\" border=\"0\" src=\"\">"); _script.AppendLine(Spaces(level) + "document.getElementById('img_" + elmt.Name + "').src = " + GetImageUrl(elmt.Name, "Chart", elmt.Name) + ";" ); } if (elmt is Container) { if (elmt.Height == 0) { return(0); } int elements = 0; foreach (Element child in ((Container)elmt).Children) { elements += RecurseRender(rpt, bodyPart, child, level + 1, forPrint); } } if (hasAction) { bodyPart.Append("</a>"); } if (elmt is Container || elmt is TextElement || elmt is ImageElement || elmt is ChartElement) { bodyPart.AppendLine(Spaces(level) + "</div>"); } body.Append(bodyPart.ToString()); return(1); }
private void RecurseRender(Element elmt, decimal top, decimal left, bool renderAll) { top += elmt.Top; left += elmt.Left; if (!renderAll) { if (elmt is Container && !((Container)elmt).IsVisible) { return; } } if (elmt is TextElement) { TextElement te = elmt as TextElement; TextStyle ts = null; if (te.Style is TextStyle) { ts = (TextStyle)te.Style; } Int32 row = _rows.FindIndex(delegate(decimal d) { return(d == top); }); Int32 col; if (ts != null && ts.TextAlign == Rdl.Engine.Style.TextAlignEnum.Right) { col = _cols.FindIndex(delegate(decimal d) { return(d == left + elmt.Width); }) - 1; } else { col = _cols.FindIndex(delegate(decimal d) { return(d == left); }); } WritableCell cell; double dValue; if (double.TryParse(te.Text, out dValue)) { cell = new Number(col, row, dValue); } else { cell = new Label(col, row, te.Text); } cell.setCellFormat(formats[te.StyleIndex]); _ws.addCell(cell); } if (elmt is ImageElement) { ImageElement ie = elmt as ImageElement; Int32 row = _rows.FindIndex(delegate(decimal d) { return(d == top); }); Int32 col; if (ie != null) { col = _cols.FindIndex(delegate(decimal d) { return(d == left); }); } Rdl.Render.ImageData id = _report.ImageList[ie._imageIndex]; WritableImage img = new WritableImage(0, 0, (double)ie.Width, (double)ie.Height, id.GetImageData()); _ws.addImage(img); } if (elmt is Container) { foreach (Element child in ((Container)elmt).Children) { RecurseRender(child, top, left, renderAll); } } }
public Toggle(TextElement te) { Element = te; }
public Toggle(TextElement te, Rdl.Engine.Enums.ToggleDirectionEnum direction) { Element = te; Direction = direction; }
protected void RecurseRender(Element elmt, Pdf.ContentStream contents, decimal top, decimal left) { top += elmt.Top; left += elmt.Left; if (elmt is Container || elmt is TextElement) { // If the background is not transparent then fill it in. if (elmt.Style != null && elmt.Style.BackgroundColor != null && elmt.Style.BackgroundColor != "transparent") { contents.AddFillRect(left, _pageRender.PageHeight - (top + elmt.Height), left + elmt.Width, _pageRender.PageHeight - top, Rdl.Engine.Style.W32Color(elmt.Style.BackgroundColor)); } // If there is a border then build the border. if (elmt.Style != null && elmt.Style.BorderWidth.Left.points > 0 && elmt.Style.BorderStyle.Left != Rdl.Engine.BorderStyle.BorderStyleEnum.None) { contents.AddLine(left, _pageRender.PageHeight - (top + elmt.Height), left, _pageRender.PageHeight - top, elmt.Style.BorderWidth.Left.points, Rdl.Engine.Style.W32Color(elmt.Style.BorderColor.Left), PdfLineStyle(elmt.Style.BorderStyle.Left)); } if (elmt.Style != null && elmt.Style.BorderWidth.Right.points > 0 && elmt.Style.BorderStyle.Right != Rdl.Engine.BorderStyle.BorderStyleEnum.None) { contents.AddLine(left + elmt.Width, _pageRender.PageHeight - (top + elmt.Height), left + elmt.Width, _pageRender.PageHeight - top, elmt.Style.BorderWidth.Right.points, Rdl.Engine.Style.W32Color(elmt.Style.BorderColor.Right), PdfLineStyle(elmt.Style.BorderStyle.Right)); } if (elmt.Style != null && elmt.Style.BorderWidth.Top.points > 0 && elmt.Style.BorderStyle.Top != Rdl.Engine.BorderStyle.BorderStyleEnum.None) { contents.AddLine(left, _pageRender.PageHeight - top, left + elmt.Width, _pageRender.PageHeight - top, elmt.Style.BorderWidth.Top.points, Rdl.Engine.Style.W32Color(elmt.Style.BorderColor.Top), PdfLineStyle(elmt.Style.BorderStyle.Top)); } if (elmt.Style != null && elmt.Style.BorderWidth.Bottom.points > 0 && elmt.Style.BorderStyle.Bottom != Rdl.Engine.BorderStyle.BorderStyleEnum.None) { contents.AddLine(left, _pageRender.PageHeight - (top + elmt.Height), left + elmt.Width, _pageRender.PageHeight - (top + elmt.Height), elmt.Style.BorderWidth.Bottom.points, Rdl.Engine.Style.W32Color(elmt.Style.BorderColor.Bottom), PdfLineStyle(elmt.Style.BorderStyle.Bottom)); } } if (elmt is TextElement) { TextElement te = elmt as TextElement; TextStyle ts = te.Style as TextStyle; if (te.Text.Length > 0) { decimal[] widths; CharacterRange[] charRanges = BuildCharacterRanges( te.Text, _winFontList[elmt.StyleIndex], new Rectangle(0, 0, (int)te.Width, (int)te.Height), out widths); for (int i = 0; i < charRanges.Length; i++) { decimal l = 0, r = 0; switch (ts.TextAlign) { case Rdl.Engine.Style.TextAlignEnum.Left: case Rdl.Engine.Style.TextAlignEnum.General: l = left; r = l + widths[i]; break; case Rdl.Engine.Style.TextAlignEnum.Center: l = left + ((elmt.Width - widths[i]) / 2); r = l + widths[i]; break; case Rdl.Engine.Style.TextAlignEnum.Right: r = left + elmt.Width; l = r - widths[i]; break; } contents.AddText(l, _pageRender.PageHeight - top - (ts.LineHeight.points * (i + 1)), r, _pageRender.PageHeight - top - (ts.LineHeight.points * i), te.Text.Substring(charRanges[i].First, charRanges[i].Length), Rdl.Engine.Style.W32Color(te.Style.Color), _pdfFontList[elmt.StyleIndex], (int)ts.FontSize.points, (int)ts.LineHeight.points, null, Rdl.Pdf.ContentStream.WritingModeEnum.lr_tb, PdfFontDecofation(ts.TextDecoration)); } } } if (elmt is Container) { foreach (Element child in ((Container)elmt).Children) { RecurseRender(child, contents, top, left); } } }