123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988 |
- using System;
- using System.IO;
- using System.Xml;
- using System.Drawing;
- using System.Windows.Forms;
- using FastReport.Data;
- using FastReport.Table;
- namespace FastReport.Import.RDL
- {
- /// <summary>
- /// Represents the RDL import plugin.
- /// </summary>
- public partial class RDLImport : ImportBase
- {
- #region Fields
- private ReportPage page;
- private ComponentBase component;
- private Base parent;
- private string defaultFontFamily;
- private BandBase curBand;
- private string dataSetName;
- private bool firstRun;
- private XmlNode reportNode;
- private string filename;
- private float sectionWidth = 0.0f;
- #endregion // Fields
- #region Constructors
- /// <summary>
- /// Initializes a new instance of the <see cref="RDLImport"/> class.
- /// </summary>
- public RDLImport() : base()
- {
- }
- #endregion // Constructors
- #region Private Methods
- private void LoadBorderColor(XmlNode borderColorNode, string border)
- {
- XmlNodeList nodeList = borderColorNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (border == "Default")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Color = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (border == "Top")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.TopLine.Color = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (border == "Left")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.LeftLine.Color = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (border == "Right")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.RightLine.Color = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (border == "Bottom")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.BottomLine.Color = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- }
- }
- private void LoadBorder(XmlNode borderNode)
- {
- XmlNodeList nodeList = borderNode.ChildNodes;
- string border = "";
- if (borderNode.Name == "TopBorder")
- {
- border = "Top";
- }
- else if (borderNode.Name == "BottomBorder")
- {
- border = "Bottom";
- }
- else if (borderNode.Name == "LeftBorder")
- {
- border = "Left";
- }
- else if (borderNode.Name == "RightBorder")
- {
- border = "Right";
- }
- else
- {
- border = "default";
- }
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Color")
- {
- LoadBorderColor(node, border);
- }
- else if (node.Name == "Style")
- {
- LoadBorderStyle(node, border);
- }
- else if (node.Name == "Width")
- {
- LoadBorderWidth(node, border);
- }
- }
- }
- private void LoadBorderStyle(XmlNode borderStyleNode, string border)
- {
- XmlNodeList nodeList = borderStyleNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.InnerText != "None")
- {
- if (border == "Default")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Lines = BorderLines.All;
- (component as ReportComponentBase).Border.Style = UnitsConverter.ConvertBorderStyle(node.InnerText);
- }
- }
- else if (border == "Top")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Lines |= BorderLines.Top;
- (component as ReportComponentBase).Border.TopLine.Style = UnitsConverter.ConvertBorderStyle(node.InnerText);
- }
- }
- else if (border == "Left")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Lines |= BorderLines.Left;
- (component as ReportComponentBase).Border.LeftLine.Style = UnitsConverter.ConvertBorderStyle(node.InnerText);
- }
- }
- else if (border == "Right")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Lines |= BorderLines.Right;
- (component as ReportComponentBase).Border.RightLine.Style = UnitsConverter.ConvertBorderStyle(node.InnerText);
- }
- }
- else if (border == "Bottom")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Lines |= BorderLines.Bottom;
- (component as ReportComponentBase).Border.BottomLine.Style = UnitsConverter.ConvertBorderStyle(node.InnerText);
- }
- }
- }
- }
- }
- private void LoadBorderWidth(XmlNode borderWidthNode, string border)
- {
- XmlNodeList nodeList = borderWidthNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (border == "Default")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- else if (border == "Top")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.TopLine.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- else if (border == "Left")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.LeftLine.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- else if (border == "Right")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.RightLine.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- else if (border == "Bottom")
- {
- if (component is ReportComponentBase)
- {
- (component as ReportComponentBase).Border.BottomLine.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- }
- }
- private void LoadStyle(XmlNode styleNode)
- {
- FontStyle fontStyle = FontStyle.Regular;
- string fontFamily = "Arial";
- float fontSize = 10.0f;
- int paddingTop = 0;
- int paddingLeft = 2;
- int paddingRight = 2;
- int paddingBottom = 0;
- XmlNodeList nodeList = styleNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name.EndsWith("Border"))
- {
- LoadBorder(node);
- }
- else if (node.Name == "BackgroundColor")
- {
- if (component is ShapeObject)
- {
- (component as ShapeObject).FillColor = UnitsConverter.ConvertColor(node.InnerText);
- }
- else if (component is TableObject)
- {
- (component as TableObject).FillColor = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (node.Name == "FontStyle")
- {
- fontStyle = UnitsConverter.ConvertFontStyle(node.InnerText);
- }
- else if (node.Name == "FontFamily")
- {
- fontFamily = node.InnerText;
- }
- else if (node.Name == "FontSize")
- {
- fontSize = Convert.ToSingle(UnitsConverter.ConvertFontSize(node.InnerText));
- }
- else if (node.Name == "TextAlign")
- {
- if (component is TextObject)
- {
- (component as TextObject).HorzAlign = UnitsConverter.ConvertTextAlign(node.InnerText);
- }
- }
- else if (node.Name == "VerticalAlign")
- {
- if (component is TextObject)
- {
- (component as TextObject).VertAlign = UnitsConverter.ConvertVerticalAlign(node.InnerText);
- }
- }
- else if (node.Name == "WritingMode")
- {
- if (component is TextObject)
- {
- (component as TextObject).Angle = UnitsConverter.ConvertWritingMode(node.InnerText);
- }
- }
- else if (node.Name == "Color")
- {
- if (component is TextObject)
- {
- (component as TextObject).TextColor = UnitsConverter.ConvertColor(node.InnerText);
- }
- }
- else if (node.Name == "PaddingLeft")
- {
- paddingLeft = UnitsConverter.SizeToInt(node.InnerText, SizeUnits.Point);
- }
- else if (node.Name == "PaddingRight")
- {
- paddingRight = UnitsConverter.SizeToInt(node.InnerText, SizeUnits.Point);
- }
- else if (node.Name == "PaddingTop")
- {
- paddingTop = UnitsConverter.SizeToInt(node.InnerText, SizeUnits.Point);
- }
- else if (node.Name == "PaddingBottom")
- {
- paddingBottom = UnitsConverter.SizeToInt(node.InnerText, SizeUnits.Point);
- }
- }
- if (component is TextObject)
- {
- (component as TextObject).Font = new Font(fontFamily, fontSize, fontStyle);
- (component as TextObject).Padding = new Padding(paddingLeft, paddingTop, paddingRight, paddingBottom);
- }
- else if (component is PictureObject)
- {
- (component as PictureObject).Padding = new Padding(paddingLeft, paddingTop, paddingRight, paddingBottom);
- }
- }
- private void LoadVisibility(XmlNode visibilityNode)
- {
- XmlNodeList nodeList = visibilityNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Hidden")
- {
- component.Visible = !UnitsConverter.BooleanToBool(node.InnerText);
- }
- }
- }
- private void LoadPlotArea(XmlNode plotAreaNode)
- {
- XmlNodeList nodeList = plotAreaNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Style")
- {
- LoadStyle(node);
- }
- }
- }
- private void LoadSubtotal(XmlNode subtotalNode)
- {
- XmlNodeList nodeList = subtotalNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "ReportItems")
- {
- //LoadReportItems(node);
- }
- else if (node.Name == "Style")
- {
- LoadStyle(node);
- }
- }
- }
- private void LoadReportItem(XmlNodeList nodeList)
- {
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Top")
- {
- component.Top = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "Left")
- {
- component.Left = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "Height")
- {
- component.Height = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "Width")
- {
- component.Width = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "Visibility")
- {
- LoadVisibility(node);
- }
- else if (node.Name == "Style")
- {
- LoadStyle(node);
- }
- }
- if (parent is TableCell)
- {
- component.Width = (parent as TableCell).Width;
- component.Height = (parent as TableCell).Height;
- }
- }
- private void LoadLine(XmlNode lineNode)
- {
- component = ComponentsFactory.CreateLineObject(lineNode.Attributes["Name"].Value, parent);
- XmlNodeList nodeList = lineNode.ChildNodes;
- LoadReportItem(nodeList);
- }
- private void LoadRectangle(XmlNode rectangleNode)
- {
- XmlNodeList nodeList = rectangleNode.ChildNodes;
- if (RectangleExistReportItem(nodeList))
- {
- LoadContainerRectangle(rectangleNode);
- return;
- }
- component = ComponentsFactory.CreateShapeObject(rectangleNode.Attributes["Name"].Value, parent);
- (component as ShapeObject).Shape = ShapeKind.Rectangle;
- LoadReportItem(nodeList);
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "ReportItems")
- {
- LoadReportItems(node);
- }
- }
- }
- private void LoadContainerRectangle(XmlNode rectangleNode)
- {
- Base tempParent = parent;
- component = ComponentsFactory.CreateContainerObject(rectangleNode.Attributes["Name"].Value, parent);
- parent = component;
- XmlNodeList nodeList = rectangleNode.ChildNodes;
- (component as ContainerObject).Border.Lines = BorderLines.All;
- (component as ContainerObject).Border.Color = Color.Black;
- LoadReportItem(nodeList);
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "ReportItems")
- {
- LoadReportItems(node);
- }
- }
- parent = tempParent;
- }
- private bool RectangleExistReportItem(XmlNodeList reportItemsNode)
- {
- foreach (XmlNode node in reportItemsNode)
- {
- if (node.Name == "ReportItems")
- foreach (XmlNode itemNode in node)
- {
- switch (itemNode.Name)
- {
- case "Line":
- case "Rectangle":
- case "Textbox":
- case "Image":
- case "Subreport":
- case "Chart":
- case "Table":
- case "Matrix":
- return true;
- }
- }
- }
- return false;
- }
- private void LoadParagraphs(XmlNode paragraphs)
- {
- firstRun = true;
- foreach (XmlNode paragraph in paragraphs.ChildNodes)
- {
- if (paragraph.Name == "Paragraph")
- {
- foreach (XmlNode parChild in paragraph.ChildNodes)
- {
- if (parChild.Name == "TextRuns")
- {
- foreach (XmlNode runsChild in parChild.ChildNodes)
- {
- ParseTextRun(runsChild);
- }
- }
- }
- }
- if (firstRun)
- firstRun = false;
- }
- }
- private void ParseTextRun(XmlNode runsChild)
- {
- if (runsChild.Name == "TextRun")
- {
- foreach (XmlNode runChild in runsChild.ChildNodes)
- {
- if (runChild.Name == "Value")
- ParseTextBoxValue(runChild);
- else if (runChild.Name == "Style")
- ParseTextBoxStyle(runChild);
- }
- }
- }
- private void ParseTextBoxValue(XmlNode runChild)
- {
- if (!firstRun)
- (component as TextObject).Text += "\r\n";
- (component as TextObject).Text += GetValue(runChild.InnerText);
- }
- private void ParseTextBoxStyle(XmlNode runChild)
- {
- FontStyle style = FontStyle.Regular;
- Color textBoxForeColor = Color.Black;
- string fontFamily = String.Empty;
- int fontSize = 0;
- foreach (XmlNode styleChild in runChild.ChildNodes)
- {
- if (styleChild.Name == "FontFamily")
- fontFamily = styleChild.InnerText;
- else if (styleChild.Name == "FontSize")
- int.TryParse(styleChild.InnerText.Replace("pt", ""), out fontSize);
- else if (styleChild.Name == "FontWeight" && styleChild.InnerText == "Bold")
- style = style | FontStyle.Bold;
- else if (styleChild.Name == "FontStyle" && styleChild.InnerText == "Italic")
- style = style | FontStyle.Italic;
- else if (styleChild.Name == "TextDecoration" && styleChild.InnerText == "Underline")
- style = style | FontStyle.Underline;
- else if (styleChild.Name == "Color")
- textBoxForeColor = ColorTranslator.FromHtml(styleChild.InnerText);
- }
- if (fontFamily == string.Empty)
- fontFamily = defaultFontFamily;
- if (fontFamily == string.Empty && fontSize == 0)
- (component as TextObject).Font = new Font((component as TextObject).Font, style);
- else if (fontFamily == string.Empty)
- (component as TextObject).Font = new Font((component as TextObject).Font.FontFamily, fontSize, style);
- else if (fontSize == 0)
- (component as TextObject).Font = new Font(fontFamily, (component as TextObject).Font.Size, style);
- else
- (component as TextObject).Font = new Font(fontFamily, fontSize, style);
- (component as TextObject).TextColor = textBoxForeColor;
- }
- private string GetValue(string rdlValue)
- {
- //=Fields!VATIdentifierCaption.Value
- string frExpression = "[";
- if (!string.IsNullOrEmpty(rdlValue) && rdlValue[0] == '=') //is expression
- {
- if (rdlValue.IndexOf("Fields") == 1) //is sumple data source
- {
- frExpression += dataSetName + ".";
- int fieldStart = rdlValue.IndexOf("!") + 1;
- int fieldEnd = rdlValue.Substring(fieldStart).IndexOf(".") - 1;
- frExpression += rdlValue.Substring(fieldStart, fieldEnd + 1);
- frExpression += "]";
- return frExpression;
- }
- }
- return rdlValue;
- }
- private void LoadTextbox(XmlNode textboxNode)
- {
- if (parent is TableCell)
- component = (TableCell)parent;
- else
- component = ComponentsFactory.CreateTextObject(textboxNode.Attributes["Name"].Value, parent);
- XmlNodeList nodeList = textboxNode.ChildNodes;
- LoadReportItem(nodeList);
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "CanGrow")
- {
- (component as TextObject).CanGrow = UnitsConverter.BooleanToBool(node.InnerText);
- }
- else if (node.Name == "CanShrink")
- {
- (component as TextObject).CanShrink = UnitsConverter.BooleanToBool(node.InnerText);
- }
- else if (node.Name == "HideDuplicates")
- {
- (component as TextObject).Duplicates = Duplicates.Hide;
- }
- else if (node.Name == "Value")
- {
- (component as TextObject).Text = node.InnerText;
- }
- else if (node.Name == "Paragraphs")
- {
- LoadParagraphs(node);
- }
- }
- }
- private void LoadImage(XmlNode imageNode)
- {
- component = ComponentsFactory.CreatePictureObject(imageNode.Attributes["Name"].Value, parent);
- XmlNodeList nodeList = imageNode.ChildNodes;
- LoadReportItem(nodeList);
- string name = String.Empty;
- foreach (XmlNode node in nodeList)
- {
- //if (node.Name == "Source")
- //{
- //}
- /*else */
- if (node.Name == "Value")
- {
- if (File.Exists(node.InnerText))
- {
- (component as PictureObject).ImageLocation = node.InnerText;
- }
- }
- else if (node.Name == "Sizing")
- {
- (component as PictureObject).SizeMode = UnitsConverter.ConvertSizing(node.InnerText);
- }
- }
- }
- private void LoadSubreport(XmlNode subreportNode)
- {
- component = ComponentsFactory.CreateSubreportObject(subreportNode.Attributes["Name"].Value, parent);
- ReportPage subPage = ComponentsFactory.CreateReportPage(Report);
- (component as SubreportObject).ReportPage = subPage;
- XmlNodeList nodeList = subreportNode.ChildNodes;
- string path = Path.GetDirectoryName(filename);
- string reportName = String.Empty;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "ReportName")
- reportName = node.InnerText;
- }
- string subFilename = Path.Combine(path, reportName + ".rdl");
- if (!File.Exists(subFilename))
- {
- subFilename = Path.Combine(path, reportName + ".rdlc");
- if (!File.Exists(subFilename))
- subFilename = String.Empty;
- }
- if (!String.IsNullOrEmpty(subFilename))
- {
- XmlDocument doc = new XmlDocument();
- doc.Load(subFilename);
- reportNode = doc.LastChild;
- ReportPage tempPage = page;
- page = subPage;
- LoadReport(reportNode);
- page = tempPage;
- }
- else
- {
- DataBand subBand = ComponentsFactory.CreateDataBand(subPage);
- subBand.Height = 2.0f * Utils.Units.Centimeters;
- LoadReportItem(nodeList);
- }
- }
- partial void LoadChart(XmlNode chartNode);
- private void LoadReportItems(XmlNode reportItemsNode)
- {
- XmlNodeList nodeList = reportItemsNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Line")
- {
- LoadLine(node);
- }
- else if (node.Name == "Rectangle")
- {
- LoadRectangle(node);
- }
- else if (node.Name == "Textbox")
- {
- LoadTextbox(node);
- }
- else if (node.Name == "Image")
- {
- LoadImage(node);
- }
- else if (node.Name == "Subreport")
- {
- LoadSubreport(node);
- }
- else if (node.Name == "Chart")
- {
- LoadChart(node);
- }
- else if (node.Name == "Table" || (node.Name == "Tablix" && !IsTablixMatrix(node)))
- {
- LoadTable(node);
- }
- else if (node.Name == "Matrix" || (node.Name == "Tablix" && IsTablixMatrix(node)))
- {
- LoadMatrix(node);
- }
- }
- }
- private void LoadBody(XmlNode bodyNode)
- {
- parent = ComponentsFactory.CreateDataBand(page);
- curBand = (BandBase)parent;
- XmlNodeList nodeList = bodyNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "ReportItems")
- {
- LoadReportItems(node);
- }
- else if (node.Name == "Height")
- {
- (parent as DataBand).Height = UnitsConverter.SizeToPixels(node.InnerText);
- }
- }
- }
- private void LoadPageSection(XmlNode pageSectionNode)
- {
- if (pageSectionNode.Name == "PageHeader")
- {
- page.PageHeader = new PageHeaderBand();
- page.PageHeader.CreateUniqueName();
- page.PageHeader.PrintOn = PrintOn.EvenPages | PrintOn.OddPages | PrintOn.RepeatedBand;
- XmlNodeList nodeList = pageSectionNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Height")
- {
- page.PageHeader.Height = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "PrintOnFirstPage")
- {
- if (node.InnerText == "true")
- {
- page.PageHeader.PrintOn |= PrintOn.FirstPage;
- }
- }
- else if (node.Name == "PrintOnLastPage")
- {
- if (node.InnerText == "true")
- {
- page.PageHeader.PrintOn |= PrintOn.LastPage;
- }
- }
- else if (node.Name == "ReportItems")
- {
- parent = page.PageHeader;
- LoadReportItems(node);
- }
- }
- }
- else if (pageSectionNode.Name == "PageFooter")
- {
- page.PageFooter = new PageFooterBand();
- page.PageFooter.CreateUniqueName();
- page.PageFooter.PrintOn = PrintOn.EvenPages | PrintOn.OddPages | PrintOn.RepeatedBand;
- XmlNodeList nodeList = pageSectionNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Height")
- {
- page.PageFooter.Height = UnitsConverter.SizeToPixels(node.InnerText);
- }
- else if (node.Name == "PrintOnFirstPage")
- {
- if (node.InnerText == "true")
- {
- page.PageFooter.PrintOn |= PrintOn.FirstPage;
- }
- }
- else if (node.Name == "PrintOnLastPage")
- {
- if (node.InnerText == "true")
- {
- page.PageFooter.PrintOn |= PrintOn.LastPage;
- }
- }
- else if (node.Name == "ReportItems")
- {
- parent = page.PageFooter;
- LoadReportItems(node);
- }
- }
- }
- }
- private void LoadPage(XmlNode pageNode)
- {
- XmlNodeList nodeList = pageNode.ChildNodes;
- bool pageWidthLoaded = false;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "PageHeader")
- {
- LoadPageSection(node);
- }
- else if (node.Name == "PageFooter")
- {
- LoadPageSection(node);
- }
- else if (node.Name == "PageHeight")
- {
- page.PaperHeight = UnitsConverter.SizeToMillimeters(node.InnerText);
- }
- else if (node.Name == "PageWidth")
- {
- page.PaperWidth = UnitsConverter.SizeToMillimeters(node.InnerText);
- pageWidthLoaded = true;
- }
- else if (node.Name == "LeftMargin")
- {
- page.LeftMargin = UnitsConverter.SizeToMillimeters(node.InnerText);
- }
- else if (node.Name == "RightMargin")
- {
- page.RightMargin = UnitsConverter.SizeToMillimeters(node.InnerText);
- }
- else if (node.Name == "TopMargin")
- {
- page.TopMargin = UnitsConverter.SizeToMillimeters(node.InnerText);
- }
- else if (node.Name == "BottomMargin")
- {
- page.BottomMargin = UnitsConverter.SizeToMillimeters(node.InnerText);
- }
- else if (node.Name == "Style")
- {
- LoadStyle(node);
- }
- }
- if (!pageWidthLoaded && sectionWidth > 0)
- {
- page.PaperWidth = page.LeftMargin + sectionWidth + page.RightMargin;
- }
- }
- private void LoadParameters(XmlNode parametersNode)
- {
- foreach (XmlNode node in parametersNode.ChildNodes)
- {
- Parameter parameter = ComponentsFactory.CreateParameter(node.Attributes["Name"].Value, Report);
- foreach (XmlNode subNode in node.ChildNodes)
- {
- if (subNode.Name == "DataType")
- {
- Type type = Type.GetType("System." + subNode.InnerText);
- if (type != null)
- parameter.DataType = type;
- else if (subNode.InnerText == "Integer")
- parameter.DataType = typeof(Int32);
- else if (subNode.InnerText == "Float")
- parameter.DataType = typeof(float);
- }
- else if (subNode.Name == "Prompt")
- {
- parameter.Description = subNode.InnerText;
- }
- else if (subNode.Name == "DefaultValue")
- {
- }
- }
- }
- }
- private XmlNode GetEmbededImageNode(string objectName)
- {
- foreach (XmlNode node in reportNode.ChildNodes)
- {
- if (node.Name == "EmbeddedImages")
- {
- foreach (XmlNode embededImage in node.ChildNodes)
- {
- if (embededImage.Attributes[0].InnerText == objectName)
- return embededImage;
- }
- }
- }
- return null;
- }
- private void LoadReport(XmlNode reportNode)
- {
- int pageNbr = 0;
- XmlNodeList nodeList = reportNode.ChildNodes;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "Description")
- {
- Report.ReportInfo.Description = node.InnerText;
- }
- else if (node.Name == "Author")
- {
- Report.ReportInfo.Author = node.InnerText;
- }
- else if (node.Name == "Body")
- {
- if (page == null)
- page = ComponentsFactory.CreateReportPage(Report);
- LoadBody(node);
- }
- else if (node.Name == "Page")
- {
- if (pageNbr > 0)
- page = ComponentsFactory.CreateReportPage(Report);
- LoadPage(node);
- pageNbr++;
- }
- else if (node.Name == "ReportSections")
- {
- if (node.HasChildNodes && node.FirstChild.Name == "ReportSection")
- foreach (XmlNode sectionItem in node.FirstChild)
- {
- if (sectionItem.Name == "Body")
- {
- if (page == null)
- page = ComponentsFactory.CreateReportPage(Report);
- LoadBody(sectionItem);
- }
- else if (sectionItem.Name == "Page")
- {
- if (pageNbr > 0)
- page = ComponentsFactory.CreateReportPage(Report);
- LoadPage(sectionItem);
- pageNbr++;
- }
- else if (sectionItem.Name == "Width")
- {
- sectionWidth = UnitsConverter.SizeToMillimeters(sectionItem.InnerText);
- }
- }
- }
- else if (node.Name == "df:DefaultFontFamily")
- {
- defaultFontFamily = node.InnerText;
- }
- else if (node.Name == "DataSets")
- {
- if (node.HasChildNodes)
- dataSetName = node.FirstChild.Attributes["Name"].Value;
- }
- else if (node.Name == "ReportParameters")
- {
- if (node.HasChildNodes)
- LoadParameters(node);
- }
- }
- if (page == null)
- {
- page = ComponentsFactory.CreateReportPage(Report);
- LoadPage(reportNode);
- }
- }
- #endregion // Private Methods
- #region Public Methods
- /// <inheritdoc/>
- public override void LoadReport(Report report, string filename)
- {
- this.filename = filename;
- using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
- {
- LoadReport(report, fs);
- }
- }
- /// <inheritdoc />
- public override void LoadReport(Report report, Stream content)
- {
- Report = report;
- Report.Clear();
- XmlDocument document = new XmlDocument();
- document.Load(content);
- reportNode = document.LastChild;
- defaultFontFamily = "";
- page = null;
- LoadReport(reportNode);
- }
- #endregion // Public Methods
- }
- }
|