RTF_ToTextSaver.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. //using System.Linq;
  5. using System.Text;
  6. namespace FastReport.RichTextParser
  7. {
  8. #pragma warning disable 1591
  9. /// <summary>
  10. /// Save RTF document to plain text stream
  11. /// </summary>
  12. public class RTF_ToTextSaver : IDisposable
  13. {
  14. private RichDocument doc;
  15. public RTF_ToTextSaver(RichDocument doc)
  16. {
  17. this.doc = doc;
  18. }
  19. private void SaveDocumentBody(StringBuilder s)
  20. {
  21. foreach (Page p in doc.pages)
  22. SavePage(s, p, false);
  23. }
  24. private void SavePage(StringBuilder s, Page page, bool v)
  25. {
  26. SaveSequence(s, page.sequence, false);
  27. }
  28. private void SavePargraph(StringBuilder s, Paragraph par, bool InTable)
  29. {
  30. foreach (Run r in par.runs)
  31. if (r.text.Length == 0)
  32. s.Append("\t");
  33. else
  34. s.Append(r.text);
  35. s.AppendLine();
  36. }
  37. private void SaveTable(StringBuilder s, Table tbl, bool InTable)
  38. {
  39. foreach (TableRow row in tbl.rows)
  40. SaveRow(s, row);
  41. }
  42. private void SaveRow(StringBuilder s, TableRow row)
  43. {
  44. foreach (RichObjectSequence seq in row.cells)
  45. SaveSequence(s, seq, true);
  46. }
  47. private void SaveSequence(StringBuilder s, RichObjectSequence seq, bool InTable)
  48. {
  49. foreach(RichObject robj in seq.objects)
  50. {
  51. switch (robj.type)
  52. {
  53. case RichObject.Type.Paragraph:
  54. SavePargraph(s, robj.pargraph, InTable);
  55. break;
  56. case RichObject.Type.Picture:
  57. // SkipPicture
  58. break;
  59. case RichObject.Type.Table:
  60. SaveTable(s, robj.table, InTable);
  61. break;
  62. }
  63. }
  64. }
  65. public string PlainText
  66. {
  67. get
  68. {
  69. StringBuilder s = new StringBuilder();
  70. SaveDocumentBody(s);
  71. return s.ToString();
  72. }
  73. }
  74. public void Dispose()
  75. {
  76. // Perhaps that everything clean
  77. }
  78. }
  79. #pragma warning restore 1591
  80. }