MultiColumnExamples.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using QuestPDF.Examples.Engine;
  5. using QuestPDF.Fluent;
  6. using QuestPDF.Helpers;
  7. using QuestPDF.Infrastructure;
  8. namespace QuestPDF.Examples;
  9. public class MultiColumnExamples
  10. {
  11. [Test]
  12. public void TypicalCase()
  13. {
  14. RenderingTest
  15. .Create()
  16. .PageSize(PageSizes.A4)
  17. .ProducePdf()
  18. .ShowResults()
  19. .Render(container =>
  20. {
  21. container
  22. .Padding(25)
  23. .DefaultTextStyle(x => x.FontSize(8))
  24. .MultiColumn(multiColumn =>
  25. {
  26. multiColumn.Columns(3);
  27. multiColumn
  28. .Content()
  29. .Column(column =>
  30. {
  31. column.Spacing(10);
  32. foreach (var sectionId in Enumerable.Range(0, 10))
  33. {
  34. foreach (var textId in Enumerable.Range(0, Random.Shared.Next(5, 10)))
  35. column.Item().Text(Placeholders.Paragraph());
  36. foreach (var blockId in Enumerable.Range(0, Random.Shared.Next(5, 10)))
  37. column.Item().Width(50 + blockId * 5).Height(50).Background(Placeholders.BackgroundColor());
  38. }
  39. });
  40. });
  41. });
  42. }
  43. [Test]
  44. public void Decoration()
  45. {
  46. RenderingTest
  47. .Create()
  48. .PageSize(PageSizes.A4)
  49. .ProducePdf()
  50. .ShowResults()
  51. .Render(container =>
  52. {
  53. container
  54. .Padding(25)
  55. .DefaultTextStyle(x => x.FontSize(8))
  56. .MultiColumn(multiColumn =>
  57. {
  58. multiColumn.Columns(3);
  59. multiColumn.Spacing(25);
  60. multiColumn.BalanceHeight();
  61. multiColumn.Spacer().AlignCenter().LineVertical(2).LineColor(Colors.Grey.Medium);
  62. multiColumn
  63. .Content()
  64. .Column(column =>
  65. {
  66. column.Spacing(10);
  67. foreach (var blockId in Enumerable.Range(0, 100))
  68. column.Item().Height(50).Background(Placeholders.BackgroundColor());
  69. });
  70. });
  71. });
  72. }
  73. [Test]
  74. public void Table()
  75. {
  76. Settings.EnableCaching = true;
  77. RenderingTest
  78. .Create()
  79. .PageSize(PageSizes.A4)
  80. .ProducePdf()
  81. .ShowResults()
  82. .Render(container =>
  83. {
  84. container
  85. .Padding(25)
  86. .DefaultTextStyle(x => x.FontSize(8))
  87. .MultiColumn(multiColumn =>
  88. {
  89. multiColumn.Spacing(10);
  90. multiColumn.BalanceHeight(false);
  91. multiColumn
  92. .Content()
  93. .Border(1)
  94. .Table(table =>
  95. {
  96. table.ColumnsDefinition(columns =>
  97. {
  98. columns.RelativeColumn(1);
  99. columns.RelativeColumn(2);
  100. columns.RelativeColumn(3);
  101. });
  102. table.Header(header =>
  103. {
  104. header.Cell().Element(Style).Text("#").Bold();
  105. header.Cell().Element(Style).Text("Label").Bold();
  106. header.Cell().Element(Style).Text("Description").Bold();
  107. IContainer Style(IContainer container) => container.Border(1).BorderColor(Colors.Grey.Medium).Background(Colors.Grey.Lighten2).Padding(2);
  108. });
  109. foreach (var i in Enumerable.Range(1, 1_000))
  110. {
  111. table.Cell().Element(Style).ShowEntire().Text(i.ToString());
  112. table.Cell().Element(Style).ShowEntire().Text(Placeholders.Label());
  113. table.Cell().Element(Style).ShowEntire().Text(Placeholders.Sentence());
  114. IContainer Style(IContainer container) => container.Border(1).BorderColor(Colors.Grey.Medium).Background(i % 2 == 0 ? Colors.White : Colors.Grey.Lighten4).Padding(2);
  115. }
  116. });
  117. });
  118. });
  119. }
  120. [Test]
  121. public void BalanceHeight()
  122. {
  123. RenderingTest
  124. .Create()
  125. .PageSize(PageSizes.A4)
  126. .ProducePdf()
  127. .ShowResults()
  128. .Render(container =>
  129. {
  130. container
  131. .Padding(25)
  132. .DefaultTextStyle(x => x.FontSize(8))
  133. .MultiColumn(multiColumn =>
  134. {
  135. multiColumn.Columns(4);
  136. multiColumn.BalanceHeight(true);
  137. multiColumn.Spacing(10);
  138. multiColumn
  139. .Content()
  140. .Column(column =>
  141. {
  142. column.Spacing(10);
  143. foreach (var sectionId in Enumerable.Range(0, 20))
  144. {
  145. column.Item().Text(Placeholders.Paragraph());
  146. }
  147. });
  148. });
  149. });
  150. }
  151. [Test]
  152. public void RightToLeft()
  153. {
  154. RenderingTest
  155. .Create()
  156. .PageSize(PageSizes.A4)
  157. .ProducePdf()
  158. .ShowResults()
  159. .Render(container =>
  160. {
  161. container
  162. .Padding(25)
  163. .DefaultTextStyle(x => x.FontSize(8))
  164. .ShrinkVertical()
  165. .ContentFromRightToLeft()
  166. .MultiColumn(multiColumn =>
  167. {
  168. multiColumn.Columns(4);
  169. multiColumn.BalanceHeight(true);
  170. multiColumn.Spacing(10);
  171. multiColumn
  172. .Content()
  173. .Column(column =>
  174. {
  175. column.Spacing(10);
  176. foreach (var i in Enumerable.Range(0, 100))
  177. {
  178. column.Item().Height(50).Background(Placeholders.BackgroundColor()).Text(i.ToString());
  179. }
  180. });
  181. });
  182. });
  183. }
  184. }