FR3ExportPlugin.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. using System;
  2. using System.IO;
  3. using FastReport.Table;
  4. using FastReport.Matrix;
  5. using FastReport.Barcode;
  6. #if MSCHART
  7. using FastReport.MSChart;
  8. #endif
  9. using FastReport.Map;
  10. using FastReport.Utils;
  11. namespace FastReport.Design.ExportPlugins.FR3
  12. {
  13. /// <summary>
  14. /// Represents the FR3 export plugin.
  15. /// </summary>
  16. public class FR3ExportPlugin : ExportPlugin
  17. {
  18. #region Fields
  19. private StreamWriter writer;
  20. //private ReportPage page;
  21. //private Base parent;
  22. //private ReportComponentBase component;
  23. #endregion // Fields
  24. #region Properties
  25. #endregion // Properties
  26. #region Constructors
  27. /// <summary>
  28. /// Initializes a new instance of the <see cref="FR3ExportPlugin"/> class.
  29. /// </summary>
  30. public FR3ExportPlugin() : base()
  31. {
  32. }
  33. /// <summary>
  34. /// Initializes a new instance of the <see cref="FR3ExportPlugin"/> class with a specified designer.
  35. /// </summary>
  36. /// <param name="designer">The report designer.</param>
  37. public FR3ExportPlugin(Designer designer) : base(designer)
  38. {
  39. }
  40. #endregion // Constructors
  41. #region Private Methods
  42. private string ReplaceControlChars(string str)
  43. {
  44. str = str.Replace("&", "&amp;");
  45. str = str.Replace("'", "&apos;");
  46. str = str.Replace("\"", "&quot;");
  47. str = str.Replace("<", "&lt;");
  48. str = str.Replace(">", "&gt;");
  49. str = str.Replace(Environment.NewLine, "&#13;&#10;");
  50. return str;
  51. }
  52. private void WriteEngineOptions()
  53. {
  54. writer.Write(" EngineOptions.DoublePass=\"" + Report.DoublePass.ToString() + "\"");
  55. writer.Write(" EngineOptions.UseFileCache=\"" + Report.UseFileCache.ToString() + "\"");
  56. }
  57. private void WriteReportOptions()
  58. {
  59. writer.Write(" ReportOptions.Author=\"" + Report.ReportInfo.Author + "\"");
  60. writer.Write(" ReportOptions.Description.Text=\"" + ReplaceControlChars(Report.ReportInfo.Description) + "\"");
  61. }
  62. private void WriteDataPage()
  63. {
  64. writer.WriteLine(" <TfrxDataPage Name=\"Data\" Height=\"1000\" Left=\"0\" Top=\"0\" Width=\"1000\"/>");
  65. }
  66. private void WriteBorder(Border border)
  67. {
  68. writer.Write(" Frame.Typ=\"" + UnitsConverter.ConvertBorderLines(border.Lines) + "\"");
  69. writer.Write(" Frame.LeftLine.Color=\"" + UnitsConverter.ColorToTColor(border.LeftLine.Color) + "\"");
  70. writer.Write(" Frame.TopLine.Color=\"" + UnitsConverter.ColorToTColor(border.TopLine.Color) + "\"");
  71. writer.Write(" Frame.RightLine.Color=\"" + UnitsConverter.ColorToTColor(border.RightLine.Color) + "\"");
  72. writer.Write(" Frame.BottomLine.Color=\"" + UnitsConverter.ColorToTColor(border.BottomLine.Color) + "\"");
  73. writer.Write(" Frame.LeftLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.LeftLine.Style) + "\"");
  74. writer.Write(" Frame.TopLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.TopLine.Style) + "\"");
  75. writer.Write(" Frame.RightLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.RightLine.Style) + "\"");
  76. writer.Write(" Frame.BottomLine.Style=\"" + UnitsConverter.ConvertLineStyle(border.BottomLine.Style) + "\"");
  77. }
  78. private void WriteObject(ReportComponentBase obj, string type)
  79. {
  80. writer.Write(" <" + type + " Name=\"" + obj.Name + "\"");
  81. writer.Write(" Height=\"" + obj.Height.ToString() + "\"");
  82. writer.Write(" Left=\"" + obj.Left.ToString() + "\"");
  83. writer.Write(" Top=\"" + obj.Top.ToString() + "\"");
  84. writer.Write(" Width=\"" + obj.Width.ToString() + "\"");
  85. writer.Write(" Visible=\"" + obj.Visible.ToString() + "\"");
  86. }
  87. private void WriteTextObject(TextObject text)
  88. {
  89. WriteObject(text, "TfrxMemoView");
  90. writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(text.FillColor) + "\"");
  91. writer.Write(" Font.Charset=\"1\"");
  92. writer.Write(" Font.Color=\"" + UnitsConverter.ColorToTColor(text.TextColor) + "\"");
  93. writer.Write(" Font.Height=\"" + UnitsConverter.ConvertFontSize(text.Font.Size) + "\"");
  94. writer.Write(" Font.Name=\"" + text.Font.Name + "\"");
  95. writer.Write(" Font.Style=\"" + UnitsConverter.ConvertFontStyle(text.Font.Style) + "\"");
  96. WriteBorder(text.Border);
  97. writer.Write(" HAlign=\"" + UnitsConverter.ConvertHorzAlign(text.HorzAlign) + "\"");
  98. writer.Write(" ParentFont=\"" + "False" + "\"");
  99. writer.Write(" VAlign=\"" + UnitsConverter.ConvertVertAlign(text.VertAlign) + "\"");
  100. writer.Write(" Text=\"" + ReplaceControlChars(text.Text) + "\"");
  101. writer.WriteLine("/>");
  102. }
  103. private void WritePictureObject(PictureObject pic)
  104. {
  105. WriteObject(pic, "TfrxPictureView");
  106. WriteBorder(pic.Border);
  107. writer.WriteLine("/>");
  108. }
  109. private void WriteLineObject(LineObject line)
  110. {
  111. WriteObject(line, "TfrxLineView");
  112. WriteBorder(line.Border);
  113. writer.Write(" Diagonal=\"" + line.Diagonal.ToString() + "\"");
  114. writer.WriteLine("/>");
  115. }
  116. private void WriteShapeObject(ShapeObject shape)
  117. {
  118. WriteObject(shape, "TfrxShapeView");
  119. writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(shape.FillColor) + "\"");
  120. WriteBorder(shape.Border);
  121. writer.Write(" Shape=\"" + UnitsConverter.ConvertShapeKind(shape.Shape) + "\"");
  122. writer.WriteLine("/>");
  123. }
  124. private void WriteTableObject(TableObject table)
  125. {
  126. writer.Write(" <TfrxTableObject Name=\"" + table.Name + "\"");
  127. writer.Write(" Height=\"" + table.Height.ToString() + "\"");
  128. writer.Write(" Left=\"" + table.Left.ToString() + "\"");
  129. writer.Write(" Top=\"" + table.Top.ToString() + "\"");
  130. writer.Write(" Width=\"" + table.Width.ToString() + "\"");
  131. writer.Write(" Visible=\"" + table.Visible.ToString() + "\"");
  132. writer.WriteLine(">");
  133. foreach (TableColumn column in table.Columns)
  134. {
  135. writer.Write(" <TfrxTableColumn Name=\"" + column.Name + "\"");
  136. writer.Write(" Width=\"" + column.Width.ToString() + "\"");
  137. writer.Write(" MinWidth=\"" + column.MinWidth.ToString() + "\"");
  138. writer.Write(" MaxWidth=\"" + column.MaxWidth.ToString() + "\"");
  139. writer.Write(" AutoSize=\"" + column.AutoSize.ToString() + "\"");
  140. writer.WriteLine("/>");
  141. }
  142. foreach (TableRow row in table.Rows)
  143. {
  144. writer.Write(" <TfrxTableRow Name=\"" + row.Name + "\"");
  145. writer.Write(" Height=\"" + row.Height.ToString() + "\"");
  146. writer.Write(" MinHeight=\"" + row.MinHeight.ToString() + "\"");
  147. writer.Write(" MaxHeight=\"" + row.MaxHeight.ToString() + "\"");
  148. writer.Write(" AutoSize=\"" + row.AutoSize.ToString() + "\"");
  149. writer.WriteLine(">");
  150. for (int i = 0; i < table.Columns.Count; i++)
  151. {
  152. writer.Write(" <TfrxTableCell Name=\"" + row[i].Name + "\"");
  153. writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(row[i].FillColor) + "\"");
  154. writer.Write(" Font.Charset=\"1\"");
  155. writer.Write(" Font.Color=\"" + UnitsConverter.ColorToTColor(row[i].TextColor) + "\"");
  156. writer.Write(" Font.Height=\"" + UnitsConverter.ConvertFontSize(row[i].Font.Size) + "\"");
  157. writer.Write(" Font.Name=\"" + row[i].Font.Name + "\"");
  158. writer.Write(" Font.Style=\"" + UnitsConverter.ConvertFontStyle(row[i].Font.Style) + "\"");
  159. writer.Write(" HAlign=\"" + UnitsConverter.ConvertHorzAlign(row[i].HorzAlign) + "\"");
  160. writer.Write(" ParentFont=\"" + "False" + "\"");
  161. writer.Write(" VAlign=\"" + UnitsConverter.ConvertVertAlign(row[i].VertAlign) + "\"");
  162. writer.Write(" Text=\"" + ReplaceControlChars(row[i].Text) + "\"");
  163. writer.WriteLine("/>");
  164. }
  165. writer.WriteLine(" </TfrxTableRow>");
  166. }
  167. writer.WriteLine(" </TfrxTableObject>");
  168. }
  169. //private void WriteMatrixObject(MatrixObject matrix)
  170. //{
  171. //}
  172. private void WriteBarcodeObject(BarcodeObject barcode)
  173. {
  174. WriteObject(barcode, "TfrxBarCodeView");
  175. writer.Write(" BarType=\"" + UnitsConverter.ConvertBarcodeType(barcode.Barcode) + "\"");
  176. WriteBorder(barcode.Border);
  177. writer.WriteLine("/>");
  178. }
  179. private void Write2DBarcodeObject(BarcodeObject barcode)
  180. {
  181. WriteObject(barcode, "TfrxBarcode2DView");
  182. writer.Write(" BarType=\"" + UnitsConverter.ConvertBarcodeType(barcode.Barcode) + "\"");
  183. WriteBorder(barcode.Border);
  184. writer.WriteLine("/>");
  185. }
  186. //private void WriteChartMSChartObject(MSChartObject chart)
  187. //{
  188. //}
  189. private void WriteRichObject(RichObject rich)
  190. {
  191. WriteObject(rich, "TfrxRichView");
  192. WriteBorder(rich.Border);
  193. writer.WriteLine("/>");
  194. }
  195. private void WriteCheckBoxObject(CheckBoxObject box)
  196. {
  197. WriteObject(box, "TfrxCheckBoxView");
  198. WriteBorder(box.Border);
  199. writer.Write(" Checked=\"" + box.Checked + "\"");
  200. writer.Write(" CheckStyle=\"" + UnitsConverter.ConvertCheckedSymbol(box.CheckedSymbol) + "\"");
  201. writer.Write(" CheckColor=\"" + UnitsConverter.ColorToTColor(box.CheckColor) + "\"");
  202. writer.WriteLine("/>");
  203. }
  204. private void WriteCellularTextObject(CellularTextObject text)
  205. {
  206. WriteObject(text, "TfrxCellularText");
  207. WriteBorder(text.Border);
  208. writer.Write(" Color=\"" + UnitsConverter.ColorToTColor(text.FillColor) + "\"");
  209. writer.Write(" Font.Charset=\"1\"");
  210. writer.Write(" Font.Color=\"" + UnitsConverter.ColorToTColor(text.TextColor) + "\"");
  211. writer.Write(" Font.Height=\"" + UnitsConverter.ConvertFontSize(text.Font.Size) + "\"");
  212. writer.Write(" Font.Name=\"" + text.Font.Name + "\"");
  213. writer.Write(" Font.Style=\"" + UnitsConverter.ConvertFontStyle(text.Font.Style) + "\"");
  214. writer.Write(" HAlign=\"" + UnitsConverter.ConvertHorzAlign(text.HorzAlign) + "\"");
  215. writer.Write(" ParentFont=\"" + "False" + "\"");
  216. writer.Write(" VAlign=\"" + UnitsConverter.ConvertVertAlign(text.VertAlign) + "\"");
  217. writer.Write(" WordWrap=\"" + text.WordWrap.ToString() + "\"");
  218. writer.Write(" Text=\"" + ReplaceControlChars(text.Text) + "\"");
  219. writer.WriteLine("/>");
  220. }
  221. private void WriteZipCodeObject(ZipCodeObject zip)
  222. {
  223. WriteObject(zip, "TfrxZipCodeView");
  224. writer.Write(" DigitCount=\"" + zip.SegmentCount.ToString() + "\"");
  225. writer.Write(" ShowMarkers=\"" + zip.ShowMarkers.ToString() + "\"");
  226. writer.Write(" ShowGrid=\"" + zip.ShowGrid.ToString() + "\"");
  227. writer.Write(" Fill.BackColor=\"" + UnitsConverter.ColorToTColor(zip.FillColor) + "\"");
  228. writer.Write(" mmDigitHeight=\"" + (zip.SegmentHeight / Units.Millimeters).ToString() + "\"");
  229. writer.Write(" mmDigitWidth=\"" + (zip.SegmentWidth / Units.Millimeters).ToString() + "\"");
  230. writer.Write(" mmSpacing=\"" + (zip.Spacing / Units.Millimeters).ToString() + "\"");
  231. writer.Write(" Text=\"" + zip.Text + "\"");
  232. writer.WriteLine("/>");
  233. }
  234. private void WriteMapObject(MapObject map)
  235. {
  236. writer.Write(" <TfrxMapView Name=\"" + map.Name + "\"");
  237. writer.Write(" Height=\"" + map.Height.ToString() + "\"");
  238. writer.Write(" Left=\"" + map.Left.ToString() + "\"");
  239. writer.Write(" Top=\"" + map.Top.ToString() + "\"");
  240. writer.Write(" Width=\"" + map.Width.ToString() + "\"");
  241. writer.Write(" Visible=\"" + map.Visible.ToString() + "\"");
  242. WriteBorder(map.Border);
  243. writer.Write(" Fill.BackColor=\"" + UnitsConverter.ColorToTColor(map.FillColor) + "\"");
  244. writer.Write(" Zoom=\"" + map.Zoom.ToString() + "\"");
  245. writer.Write(" MinZoom=\"" + map.MinZoom.ToString() + "\"");
  246. writer.Write(" MaxZoom=\"" + map.MaxZoom.ToString() + "\"");
  247. writer.Write(" OffsetX=\"" + map.OffsetX.ToString() + "\"");
  248. writer.Write(" OffsetY=\"" + map.OffsetY.ToString() + "\"");
  249. writer.Write(" MercatorProjection=\"" + map.MercatorProjection.ToString() + "\"");
  250. writer.Write(" ColorScale.Visible=\"" + map.ColorScale.Visible.ToString() + "\"");
  251. writer.Write(" ColorScale.BorderColor=\"" + UnitsConverter.ColorToTColor(map.ColorScale.BorderColor) + "\"");
  252. writer.Write(" ColorScale.BorderWidth=\"" + map.ColorScale.Border.Width.ToString() + "\"");
  253. writer.Write(" ColorScale.Dock=\"" + UnitsConverter.ConvertScaleDock(map.ColorScale.Dock) + "\"");
  254. writer.Write(" ColorScale.Font.Charset=\"1\"");
  255. writer.Write(" ColorScale.Font.Color=\"" + UnitsConverter.ColorToTColor(map.ColorScale.TextColor) + "\"");
  256. writer.Write(" ColorScale.Font.Height=\"" + UnitsConverter.ConvertFontSize(map.ColorScale.Font.Size) + "\"");
  257. writer.Write(" ColorScale.Font.Name=\"" + map.ColorScale.Font.Name + "\"");
  258. writer.Write(" ColorScale.Font.Style=\"" + UnitsConverter.ConvertFontStyle(map.ColorScale.Font.Style) + "\"");
  259. writer.Write(" ColorScale.TitleFont.Charset=\"1\"");
  260. writer.Write(" ColorScale.TitleFont.Color=\"" + UnitsConverter.ColorToTColor(map.ColorScale.TitleColor) + "\"");
  261. writer.Write(" ColorScale.TitleFont.Height=\"" + UnitsConverter.ConvertFontSize(map.ColorScale.TitleFont.Size) + "\"");
  262. writer.Write(" ColorScale.TitleFont.Name=\"" + map.ColorScale.TitleFont.Name + "\"");
  263. writer.Write(" ColorScale.TitleFont.Style=\"" + UnitsConverter.ConvertFontStyle(map.ColorScale.TitleFont.Style) + "\"");
  264. writer.WriteLine(">");
  265. foreach (MapLayer layer in map.Layers)
  266. {
  267. writer.Write(" <TfrxMapFileLayer Name=\"" + layer.Name + "\"");
  268. writer.Write(" ColorRanges.RangeCount=\"" + layer.ColorRanges.RangeCount.ToString() + "\"");
  269. writer.Write(" ColorRanges.StartColor=\"" + UnitsConverter.ColorToTColor(layer.ColorRanges.StartColor) + "\"");
  270. writer.Write(" ColorRanges.MiddleColor=\"" + UnitsConverter.ColorToTColor(layer.ColorRanges.MiddleColor) + "\"");
  271. writer.Write(" ColorRanges.EndColor=\"" + UnitsConverter.ColorToTColor(layer.ColorRanges.EndColor) + "\"");
  272. writer.Write(" DefaultShapeStyle.BorderColor=\"" + UnitsConverter.ColorToTColor(layer.DefaultShapeStyle.BorderColor) + "\"");
  273. writer.Write(" DefaultShapeStyle.BorderStyle=\"" + UnitsConverter.ConvertDashStyle(layer.DefaultShapeStyle.BorderStyle) + "\"");
  274. writer.Write(" DefaultShapeStyle.BorderWidth=\"" + layer.DefaultShapeStyle.BorderWidth.ToString() + "\"");
  275. writer.Write(" DefaultShapeStyle.FillColor=\"" + UnitsConverter.ColorToTColor(layer.DefaultShapeStyle.FillColor) + "\"");
  276. writer.Write(" DefaultShapeStyle.PointSize=\"" + layer.DefaultShapeStyle.PointSize.ToString() + "\"");
  277. writer.Write(" Operation=\"" + UnitsConverter.ConvertTotalType(layer.Function) + "\"");
  278. writer.Write(" LabelKind=\"" + UnitsConverter.ConvertMapLabelKind(layer.LabelKind) + "\"");
  279. writer.Write(" MapPalette=\"" + UnitsConverter.ConvertMapPalette(layer.Palette) + "\"");
  280. writer.Write(" SizeRanges.RangeCount=\"" + layer.SizeRanges.RangeCount.ToString() + "\"");
  281. writer.Write(" SizeRanges.Visible=\"True\"");
  282. writer.Write(" SizeRanges.StartSize=\"" + layer.SizeRanges.StartSize.ToString() + "\"");
  283. writer.Write(" SizeRanges.EndSize=\"" + layer.SizeRanges.EndSize.ToString() + "\"");
  284. writer.Write(" LabelColumn=\"" + layer.SpatialColumn + "\"");
  285. writer.Write(" LayerTags.Text=\"\"");
  286. writer.Write(" MapAccuracy=\"" + layer.Accuracy.ToString() + "\"");
  287. writer.Write(" MapFileName=\"" + layer.Shapefile + "\"");
  288. writer.Write(" PixelAccuracy=\"0\"");
  289. writer.WriteLine("/>");
  290. }
  291. writer.WriteLine(" </TfrxMapView>");
  292. }
  293. private void WriteObjects(BandBase band)
  294. {
  295. foreach (ReportComponentBase c in band.Objects)
  296. {
  297. if (c is CellularTextObject)
  298. {
  299. WriteCellularTextObject(c as CellularTextObject);
  300. }
  301. else if (c is TextObject)
  302. {
  303. WriteTextObject(c as TextObject);
  304. }
  305. else if (c is PictureObject)
  306. {
  307. WritePictureObject(c as PictureObject);
  308. }
  309. else if (c is LineObject)
  310. {
  311. WriteLineObject(c as LineObject);
  312. }
  313. else if (c is ShapeObject)
  314. {
  315. WriteShapeObject(c as ShapeObject);
  316. }
  317. //else if (c is SubreportObject)
  318. //{
  319. //}
  320. else if (c is TableObject)
  321. {
  322. WriteTableObject(c as TableObject);
  323. }
  324. //else if (c is MatrixObject)
  325. //{
  326. //}
  327. else if (c is BarcodeObject)
  328. {
  329. if ((c as BarcodeObject).Barcode is Barcode2DBase)
  330. {
  331. Write2DBarcodeObject(c as BarcodeObject);
  332. }
  333. else
  334. {
  335. WriteBarcodeObject(c as BarcodeObject);
  336. }
  337. }
  338. else if (c is RichObject)
  339. {
  340. WriteRichObject(c as RichObject);
  341. }
  342. else if (c is CheckBoxObject)
  343. {
  344. WriteCheckBoxObject(c as CheckBoxObject);
  345. }
  346. #if MSCHART
  347. else if (c is MSChartObject)
  348. {
  349. }
  350. #endif
  351. else if (c is ZipCodeObject)
  352. {
  353. WriteZipCodeObject(c as ZipCodeObject);
  354. }
  355. else if (c is MapObject)
  356. {
  357. WriteMapObject(c as MapObject);
  358. }
  359. }
  360. }
  361. private void WriteChild(ChildBand child)
  362. {
  363. if (child != null)
  364. {
  365. WriteBand(child, "TfrxChild");
  366. }
  367. }
  368. private void WriteBand(BandBase band, string type)
  369. {
  370. writer.Write(" <" + type + " Name=\"" + band.Name + "\"");
  371. writer.Write(" Height=\"" + band.Height.ToString() + "\"");
  372. writer.Write(" Left=\"" + band.Left.ToString() + "\"");
  373. writer.Write(" Top=\"" + band.Top.ToString() + "\"");
  374. writer.Write(" Width=\"" + band.Width.ToString() + "\"");
  375. if (band.Child != null)
  376. {
  377. writer.Write(" Child=\"" + band.Child.Name + "\"");
  378. }
  379. writer.WriteLine(">");
  380. WriteObjects(band);
  381. writer.WriteLine(" </" + type + ">");
  382. WriteChild(band.Child);
  383. }
  384. private void WriteReportTitle(ReportTitleBand title)
  385. {
  386. if (title != null)
  387. {
  388. WriteBand(title, "TfrxReportTitle");
  389. }
  390. }
  391. private void WritePageHeader(PageHeaderBand header)
  392. {
  393. if (header != null)
  394. {
  395. WriteBand(header, "TfrxPageHeader");
  396. }
  397. }
  398. private void WriteDataBands(BandCollection bands)
  399. {
  400. foreach (BandBase band in bands)
  401. WriteBand(band);
  402. }
  403. private void WriteBand(BandBase band)
  404. {
  405. if (band is DataBand)
  406. WriteBand(band, "TfrxMasterData");
  407. else if (band is GroupHeaderBand)
  408. WriteBand(band, "TfrxGroupHeader");
  409. else if (band is GroupFooterBand)
  410. WriteBand(band, "TfrxGroupFooter");
  411. if (band.ChildObjects.Count > 0)
  412. {
  413. foreach (object b in band.ChildObjects)
  414. if (b is BandBase)
  415. WriteBand(b as BandBase);
  416. }
  417. }
  418. private void WritePageFooter(PageFooterBand footer)
  419. {
  420. if (footer != null)
  421. {
  422. WriteBand(footer, "TfrxPageFooter");
  423. }
  424. }
  425. private void WriteReportSummary(ReportSummaryBand summary)
  426. {
  427. if (summary != null)
  428. {
  429. WriteBand(summary, "TfrxReportSummary");
  430. }
  431. }
  432. private void WriteBands(ReportPage page)
  433. {
  434. WriteReportTitle(page.ReportTitle);
  435. WritePageHeader(page.PageHeader);
  436. WriteDataBands(page.Bands);
  437. WritePageFooter(page.PageFooter);
  438. WriteReportSummary(page.ReportSummary);
  439. }
  440. private void WriteReportPage(ReportPage page)
  441. {
  442. writer.Write(" <TfrxReportPage Name=\"" + page.Name + "\"");
  443. writer.Write(" PaperWidth=\"" + page.PaperWidth.ToString() + "\"");
  444. writer.Write(" PaperHeight=\"" + page.PaperHeight.ToString() + "\"");
  445. writer.Write(" PaperSize=\"" + page.RawPaperSize.ToString() + "\"");
  446. writer.Write(" LeftMargin=\"" + page.LeftMargin.ToString() + "\"");
  447. writer.Write(" RightMargin=\"" + page.RightMargin.ToString() + "\"");
  448. writer.Write(" TopMargin=\"" + page.TopMargin.ToString() + "\"");
  449. writer.Write(" BottomMargin=\"" + page.BottomMargin.ToString() + "\"");
  450. writer.Write(" ColumnWidth=\"" + page.Columns.Width.ToString() + "\"");
  451. writer.Write(" ColumnPositions.Text=\"" + "" + "\"");
  452. writer.Write(" HGuides.Text=\"" + "" + "\"");
  453. writer.Write(" VGuides.Text=\"" + "" + "\"");
  454. writer.WriteLine(">");
  455. WriteBands(page);
  456. writer.WriteLine(" </TfrxReportPage>");
  457. }
  458. private void WriteReportPages()
  459. {
  460. foreach (ReportPage p in Report.Pages)
  461. {
  462. WriteReportPage(p);
  463. }
  464. }
  465. private void WriteReport()
  466. {
  467. writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>");
  468. writer.Write("<TfrxReport Version=\"4.8.222\" DotMatrixReport=\"False\"");
  469. WriteEngineOptions();
  470. WriteReportOptions();
  471. writer.WriteLine(">");
  472. WriteDataPage();
  473. WriteReportPages();
  474. writer.WriteLine("</TfrxReport>");
  475. }
  476. #endregion // Private Methods
  477. #region Protected Methods
  478. /// <inheritdoc/>
  479. protected override string GetFilter()
  480. {
  481. return new FastReport.Utils.MyRes("FileFilters").Get("Fr3File");
  482. }
  483. #endregion // Protected Methods
  484. #region Public Methods
  485. /// <inheritdoc/>
  486. public override void SaveReport(Report report, string filename)
  487. {
  488. Report = report;
  489. using (writer = new StreamWriter(new FileStream(filename, FileMode.Create)))
  490. {
  491. WriteReport();
  492. }
  493. }
  494. #endregion // Public Methods
  495. }
  496. }