TextBasicExamples.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. using System.Security.Cryptography;
  2. using QuestPDF.Fluent;
  3. using QuestPDF.Helpers;
  4. using QuestPDF.Infrastructure;
  5. namespace QuestPDF.DocumentationExamples.Text;
  6. public class TextBasicExamples
  7. {
  8. [Test]
  9. public void Basic()
  10. {
  11. Document
  12. .Create(document =>
  13. {
  14. document.Page(page =>
  15. {
  16. page.MinSize(new PageSize(0, 0));
  17. page.MaxSize(new PageSize(500, 1000));
  18. page.DefaultTextStyle(x => x.FontSize(20));
  19. page.Margin(25);
  20. page.Content()
  21. .Text("Sample text");
  22. });
  23. })
  24. .GenerateImages(x => "text-basic.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  25. }
  26. [Test]
  27. public void BasicWithStyle()
  28. {
  29. Document
  30. .Create(document =>
  31. {
  32. document.Page(page =>
  33. {
  34. page.MinSize(new PageSize(0, 0));
  35. page.MaxSize(new PageSize(500, 1000));
  36. page.DefaultTextStyle(x => x.FontSize(20));
  37. page.Margin(25);
  38. page.Content()
  39. .Column(column =>
  40. {
  41. column.Spacing(10);
  42. column.Item()
  43. .Element(CellStyle)
  44. .Text("Text with blue color")
  45. .FontColor(Colors.Blue.Darken1);
  46. column.Item()
  47. .Element(CellStyle)
  48. .Text("Bold and underlined text")
  49. .Bold()
  50. .Underline();
  51. column.Item()
  52. .Element(CellStyle)
  53. .Text("Centered small text")
  54. .FontSize(12)
  55. .AlignCenter();
  56. static IContainer CellStyle(IContainer container) =>
  57. container.Background(Colors.Grey.Lighten3).Padding(10);
  58. });
  59. });
  60. })
  61. .GenerateImages(x => "text-basic-descriptor.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  62. }
  63. [Test]
  64. public void Rich()
  65. {
  66. Document
  67. .Create(document =>
  68. {
  69. document.Page(page =>
  70. {
  71. page.MinSize(new PageSize(0, 0));
  72. page.MaxSize(new PageSize(500, 1000));
  73. page.DefaultTextStyle(x => x.FontSize(20));
  74. page.Margin(25);
  75. page.Content()
  76. .Text(text =>
  77. {
  78. text.AlignCenter();
  79. text.Span("The ");
  80. text.Span("chemical formula").Underline();
  81. text.Span(" of ");
  82. text.Span("sulfuric acid").BackgroundColor(Colors.Amber.Lighten3);
  83. text.Span(" is H");
  84. text.Span("2").Subscript();
  85. text.Span("SO");
  86. text.Span("4").Subscript();
  87. text.Span(".");
  88. });
  89. });
  90. })
  91. .GenerateImages(x => "text-rich.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  92. }
  93. [Test]
  94. public void StyleInheritance()
  95. {
  96. Document
  97. .Create(document =>
  98. {
  99. document.Page(page =>
  100. {
  101. page.MinSize(new PageSize(0, 0));
  102. page.MaxSize(new PageSize(600, 1000));
  103. page.DefaultTextStyle(x => x.FontSize(20));
  104. page.Margin(25);
  105. page.Content()
  106. .DefaultTextStyle(style => style.FontSize(20))
  107. .Column(column =>
  108. {
  109. column.Spacing(10);
  110. column.Item().Text("Products").ExtraBold().Underline().DecorationThickness(2);
  111. column.Item().Text("Comments: " + Placeholders.Sentence());
  112. column.Item()
  113. .DefaultTextStyle(style => style.FontSize(14))
  114. .Table(table =>
  115. {
  116. table.ColumnsDefinition(columns =>
  117. {
  118. columns.ConstantColumn(30);
  119. columns.RelativeColumn(1);
  120. columns.RelativeColumn(2);
  121. });
  122. table.Header(header =>
  123. {
  124. header.Cell().Element(Style).Text("ID");
  125. header.Cell().Element(Style).Text("Name");
  126. header.Cell().Element(Style).Text("Description");
  127. IContainer Style(IContainer container)
  128. {
  129. return container
  130. .Background(Colors.Grey.Lighten3)
  131. .BorderBottom(1)
  132. .PaddingHorizontal(5)
  133. .PaddingVertical(10)
  134. .DefaultTextStyle(x => x.Bold().FontColor(Colors.Blue.Medium));
  135. }
  136. });
  137. foreach (var i in Enumerable.Range(0, 5))
  138. {
  139. table.Cell().Element(Style).Text(i.ToString()).Bold();
  140. table.Cell().Element(Style).Text(Placeholders.Label());
  141. table.Cell().Element(Style).Text(Placeholders.Sentence());
  142. }
  143. IContainer Style(IContainer container)
  144. {
  145. return container.Padding(5);
  146. }
  147. });
  148. });
  149. });
  150. })
  151. .GenerateImages(x => "text-style-inheritance.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  152. }
  153. [Test]
  154. public void PageNumber()
  155. {
  156. Document
  157. .Create(document =>
  158. {
  159. document.Page(page =>
  160. {
  161. page.Size(PageSizes.A5);
  162. page.DefaultTextStyle(x => x.FontSize(20));
  163. page.Margin(25);
  164. page.Content()
  165. .Extend()
  166. .Placeholder();
  167. page.Footer()
  168. .PaddingTop(25)
  169. .AlignCenter()
  170. .Text("3 / 10");
  171. // .Text(text =>
  172. // {
  173. // text.CurrentPageNumber();
  174. // text.Span(" / ");
  175. // text.TotalPages();
  176. // });
  177. });
  178. })
  179. .GenerateImages(x => "text-page-number.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  180. }
  181. [Test]
  182. public void PageNumberFormat()
  183. {
  184. Document
  185. .Create(document =>
  186. {
  187. document.Page(page =>
  188. {
  189. page.Size(PageSizes.A5);
  190. page.DefaultTextStyle(x => x.FontSize(20));
  191. page.Margin(25);
  192. page.Content()
  193. .Text(text =>
  194. {
  195. text.CurrentPageNumber().Format(FormatWithLeadingZeros);
  196. });
  197. static string FormatWithLeadingZeros(int? pageNumber)
  198. {
  199. const int expectedLength = 3;
  200. pageNumber ??= 1;
  201. return pageNumber.Value.ToString($"D{expectedLength}");
  202. }
  203. });
  204. })
  205. .GenerateImages(x => "text-page-number-format.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  206. }
  207. [Test]
  208. public void Hyperlink()
  209. {
  210. Document
  211. .Create(document =>
  212. {
  213. document.Page(page =>
  214. {
  215. page.Size(PageSizes.A6.Landscape());
  216. page.DefaultTextStyle(x => x.FontSize(20));
  217. page.Margin(25);
  218. page.Content()
  219. .Text(text =>
  220. {
  221. var hyperlinkStyle = TextStyle.Default
  222. .FontColor(Colors.Blue.Medium)
  223. .Underline();
  224. text.Span("To learn more about QuestPDF, please visit its ");
  225. text.Hyperlink("homepage", "https://www.questpdf.com/").Style(hyperlinkStyle);
  226. text.Span(", ");
  227. text.Hyperlink("GitHub repository", "https://github.com/QuestPDF/QuestPDF").Style(hyperlinkStyle);
  228. text.Span(" and ");
  229. text.Hyperlink("NuGet package page", "https://www.nuget.org/packages/QuestPDF").Style(hyperlinkStyle);
  230. text.Span(".");
  231. });
  232. });
  233. })
  234. .GeneratePdf("text-hyperlink.pdf");
  235. }
  236. }