using System; using System.IO; using FastReport.Table; using FastReport.Matrix; using FastReport.Barcode; #if MSCHART using FastReport.MSChart; #endif using FastReport.Map; using FastReport.Utils; namespace FastReport.Design.ExportPlugins.FR3 { /// /// Represents the FR3 export plugin. /// public class FR3ExportPlugin : ExportPlugin { #region Fields private StreamWriter writer; //private ReportPage page; //private Base parent; //private ReportComponentBase component; #endregion // Fields #region Properties #endregion // Properties #region Constructors /// /// Initializes a new instance of the class. /// public FR3ExportPlugin() : base() { } /// /// Initializes a new instance of the class with a specified designer. /// /// The report designer. public FR3ExportPlugin(Designer designer) : base(designer) { } #endregion // Constructors #region Private Methods private string ReplaceControlChars(string str) { str = str.Replace("&", "&"); str = str.Replace("'", "'"); str = str.Replace("\"", """); str = str.Replace("<", "<"); str = str.Replace(">", ">"); str = str.Replace(Environment.NewLine, " "); return str; } private void WriteEngineOptions() { writer.Write(" EngineOptions.DoublePass=\"" + Report.DoublePass.ToString() + "\""); writer.Write(" EngineOptions.UseFileCache=\"" + Report.UseFileCache.ToString() + "\""); } private void WriteReportOptions() { writer.Write(" ReportOptions.Author=\"" + Report.ReportInfo.Author + "\""); writer.Write(" ReportOptions.Description.Text=\"" + ReplaceControlChars(Report.ReportInfo.Description) + "\""); } private void WriteDataPage() { writer.WriteLine(" "); } private void WriteBorder(Border border) { writer.Write(" Frame.Typ=\"" + UnitsConverter.ConvertBorderLines(border.Lines) + "\""); writer.Write(" Frame.LeftLine.Color=\"" + UnitsConverter.ColorToTColor(border.LeftLine.Color) + "\""); writer.Write(" Frame.TopLine.Color=\"" + UnitsConverter.ColorToTColor(border.TopLine.Color) + "\""); writer.Write(" Frame.RightLine.Color=\"" + UnitsConverter.ColorToTColor(border.RightLine.Color) + "\""); writer.Write(" Frame.BottomLine.Color=\"" + UnitsConverter.ColorToTColor(border.BottomLine.Color) + "\""); writer.Write(" Frame.LeftLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.LeftLine.Style) + "\""); writer.Write(" Frame.TopLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.TopLine.Style) + "\""); writer.Write(" Frame.RightLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.RightLine.Style) + "\""); writer.Write(" Frame.BottomLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.BottomLine.Style) + "\""); } private void WriteObject(ReportComponentBase obj, string type) { writer.Write(" <" + type + " Name=\"" + obj.Name + "\""); writer.Write(" Height=\"" + obj.Height.ToString() + "\""); writer.Write(" Left=\"" + obj.Left.ToString() + "\""); writer.Write(" Top=\"" + obj.Top.ToString() + "\""); writer.Write(" Width=\"" + obj.Width.ToString() + "\""); writer.Write(" Visible=\"" + obj.Visible.ToString() + "\""); } private void WriteTextObject(TextObject text) { WriteObject(text, "TfrxMemoView"); writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(text.FillColor) + "\""); writer.Write(" Font.Charset=\"1\""); writer.Write(" Font.Color=\"" + UnitsConverter.ColorToTColor(text.TextColor) + "\""); writer.Write(" Font.Height=\"" + UnitsConverter.ConvertFontSize(text.Font.Size) + "\""); writer.Write(" Font.Name=\"" + text.Font.Name + "\""); writer.Write(" Font.Style=\"" + UnitsConverter.ConvertFontStyle(text.Font.Style) + "\""); WriteBorder(text.Border); writer.Write(" HAlign=\"" + UnitsConverter.ConvertHorzAlign(text.HorzAlign) + "\""); writer.Write(" ParentFont=\"" + "False" + "\""); writer.Write(" VAlign=\"" + UnitsConverter.ConvertVertAlign(text.VertAlign) + "\""); writer.Write(" Text=\"" + ReplaceControlChars(text.Text) + "\""); writer.WriteLine("/>"); } private void WritePictureObject(PictureObject pic) { WriteObject(pic, "TfrxPictureView"); WriteBorder(pic.Border); writer.WriteLine("/>"); } private void WriteLineObject(LineObject line) { WriteObject(line, "TfrxLineView"); WriteBorder(line.Border); writer.Write(" Diagonal=\"" + line.Diagonal.ToString() + "\""); writer.WriteLine("/>"); } private void WriteShapeObject(ShapeObject shape) { WriteObject(shape, "TfrxShapeView"); writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(shape.FillColor) + "\""); WriteBorder(shape.Border); writer.Write(" Shape=\"" + UnitsConverter.ConvertShapeKind(shape.Shape) + "\""); writer.WriteLine("/>"); } private void WriteTableObject(TableObject table) { writer.Write(" "); foreach (TableColumn column in table.Columns) { writer.Write(" "); } foreach (TableRow row in table.Rows) { writer.Write(" "); for (int i = 0; i < table.Columns.Count; i++) { writer.Write(" "); } writer.WriteLine(" "); } writer.WriteLine(" "); } //private void WriteMatrixObject(MatrixObject matrix) //{ //} private void WriteBarcodeObject(BarcodeObject barcode) { WriteObject(barcode, "TfrxBarCodeView"); writer.Write(" BarType=\"" + UnitsConverter.ConvertBarcodeType(barcode.Barcode) + "\""); WriteBorder(barcode.Border); writer.WriteLine("/>"); } private void Write2DBarcodeObject(BarcodeObject barcode) { WriteObject(barcode, "TfrxBarcode2DView"); writer.Write(" BarType=\"" + UnitsConverter.ConvertBarcodeType(barcode.Barcode) + "\""); WriteBorder(barcode.Border); writer.WriteLine("/>"); } //private void WriteChartMSChartObject(MSChartObject chart) //{ //} private void WriteRichObject(RichObject rich) { WriteObject(rich, "TfrxRichView"); WriteBorder(rich.Border); writer.WriteLine("/>"); } private void WriteCheckBoxObject(CheckBoxObject box) { WriteObject(box, "TfrxCheckBoxView"); WriteBorder(box.Border); writer.Write(" Checked=\"" + box.Checked + "\""); writer.Write(" CheckStyle=\"" + UnitsConverter.ConvertCheckedSymbol(box.CheckedSymbol) + "\""); writer.Write(" CheckColor=\"" + UnitsConverter.ColorToTColor(box.CheckColor) + "\""); writer.WriteLine("/>"); } private void WriteCellularTextObject(CellularTextObject text) { WriteObject(text, "TfrxCellularText"); WriteBorder(text.Border); writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(text.FillColor) + "\""); writer.Write(" Font.Charset=\"1\""); writer.Write(" Font.Color=\"" + UnitsConverter.ColorToTColor(text.TextColor) + "\""); writer.Write(" Font.Height=\"" + UnitsConverter.ConvertFontSize(text.Font.Size) + "\""); writer.Write(" Font.Name=\"" + text.Font.Name + "\""); writer.Write(" Font.Style=\"" + UnitsConverter.ConvertFontStyle(text.Font.Style) + "\""); writer.Write(" HAlign=\"" + UnitsConverter.ConvertHorzAlign(text.HorzAlign) + "\""); writer.Write(" ParentFont=\"" + "False" + "\""); writer.Write(" VAlign=\"" + UnitsConverter.ConvertVertAlign(text.VertAlign) + "\""); writer.Write(" WordWrap=\"" + text.WordWrap.ToString() + "\""); writer.Write(" Text=\"" + ReplaceControlChars(text.Text) + "\""); writer.WriteLine("/>"); } private void WriteZipCodeObject(ZipCodeObject zip) { WriteObject(zip, "TfrxZipCodeView"); writer.Write(" DigitCount=\"" + zip.SegmentCount.ToString() + "\""); writer.Write(" ShowMarkers=\"" + zip.ShowMarkers.ToString() + "\""); writer.Write(" ShowGrid=\"" + zip.ShowGrid.ToString() + "\""); writer.Write(" Fill.BackColor=\"" + UnitsConverter.ColorToTColor(zip.FillColor) + "\""); writer.Write(" mmDigitHeight=\"" + (zip.SegmentHeight / Units.Millimeters).ToString() + "\""); writer.Write(" mmDigitWidth=\"" + (zip.SegmentWidth / Units.Millimeters).ToString() + "\""); writer.Write(" mmSpacing=\"" + (zip.Spacing / Units.Millimeters).ToString() + "\""); writer.Write(" Text=\"" + zip.Text + "\""); writer.WriteLine("/>"); } private void WriteMapObject(MapObject map) { writer.Write(" "); foreach (MapLayer layer in map.Layers) { writer.Write(" "); } writer.WriteLine(" "); } private void WriteObjects(BandBase band) { foreach (ReportComponentBase c in band.Objects) { if (c is CellularTextObject) { WriteCellularTextObject(c as CellularTextObject); } else if (c is TextObject) { WriteTextObject(c as TextObject); } else if (c is PictureObject) { WritePictureObject(c as PictureObject); } else if (c is LineObject) { WriteLineObject(c as LineObject); } else if (c is ShapeObject) { WriteShapeObject(c as ShapeObject); } //else if (c is SubreportObject) //{ //} else if (c is TableObject) { WriteTableObject(c as TableObject); } //else if (c is MatrixObject) //{ //} else if (c is BarcodeObject) { if ((c as BarcodeObject).Barcode is Barcode2DBase) { Write2DBarcodeObject(c as BarcodeObject); } else { WriteBarcodeObject(c as BarcodeObject); } } else if (c is RichObject) { WriteRichObject(c as RichObject); } else if (c is CheckBoxObject) { WriteCheckBoxObject(c as CheckBoxObject); } #if MSCHART else if (c is MSChartObject) { } #endif else if (c is ZipCodeObject) { WriteZipCodeObject(c as ZipCodeObject); } else if (c is MapObject) { WriteMapObject(c as MapObject); } } } private void WriteChild(ChildBand child) { if (child != null) { WriteBand(child, "TfrxChild"); } } private void WriteBand(BandBase band, string type) { writer.Write(" <" + type + " Name=\"" + band.Name + "\""); writer.Write(" Height=\"" + band.Height.ToString() + "\""); writer.Write(" Left=\"" + band.Left.ToString() + "\""); writer.Write(" Top=\"" + band.Top.ToString() + "\""); writer.Write(" Width=\"" + band.Width.ToString() + "\""); if (band.Child != null) { writer.Write(" Child=\"" + band.Child.Name + "\""); } writer.WriteLine(">"); WriteObjects(band); writer.WriteLine(" "); WriteChild(band.Child); } private void WriteReportTitle(ReportTitleBand title) { if (title != null) { WriteBand(title, "TfrxReportTitle"); } } private void WritePageHeader(PageHeaderBand header) { if (header != null) { WriteBand(header, "TfrxPageHeader"); } } private void WriteDataBands(BandCollection bands) { foreach (BandBase band in bands) WriteBand(band); } private void WriteBand(BandBase band) { if (band is DataBand) WriteBand(band, "TfrxMasterData"); else if (band is GroupHeaderBand) WriteBand(band, "TfrxGroupHeader"); else if (band is GroupFooterBand) WriteBand(band, "TfrxGroupFooter"); if (band.ChildObjects.Count > 0) { foreach (object b in band.ChildObjects) if (b is BandBase) WriteBand(b as BandBase); } } private void WritePageFooter(PageFooterBand footer) { if (footer != null) { WriteBand(footer, "TfrxPageFooter"); } } private void WriteReportSummary(ReportSummaryBand summary) { if (summary != null) { WriteBand(summary, "TfrxReportSummary"); } } private void WriteBands(ReportPage page) { WriteReportTitle(page.ReportTitle); WritePageHeader(page.PageHeader); WriteDataBands(page.Bands); WritePageFooter(page.PageFooter); WriteReportSummary(page.ReportSummary); } private void WriteReportPage(ReportPage page) { writer.Write(" "); WriteBands(page); writer.WriteLine(" "); } private void WriteReportPages() { foreach (ReportPage p in Report.Pages) { WriteReportPage(p); } } private void WriteReport() { writer.WriteLine(""); writer.Write(""); WriteDataPage(); WriteReportPages(); writer.WriteLine(""); } #endregion // Private Methods #region Protected Methods /// protected override string GetFilter() { return new FastReport.Utils.MyRes("FileFilters").Get("Fr3File"); } #endregion // Protected Methods #region Public Methods /// public override void SaveReport(Report report, string filename) { Report = report; using (writer = new StreamWriter(new FileStream(filename, FileMode.Create))) { WriteReport(); } } #endregion // Public Methods } }