TextStyleExamples.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. using QuestPDF.Fluent;
  2. using QuestPDF.Helpers;
  3. using QuestPDF.Infrastructure;
  4. namespace QuestPDF.DocumentationExamples.Text;
  5. public class TextStyleExamples
  6. {
  7. [Test]
  8. public void FontSize()
  9. {
  10. Document
  11. .Create(document =>
  12. {
  13. document.Page(page =>
  14. {
  15. page.MinSize(new PageSize(0, 0));
  16. page.MaxSize(new PageSize(1000, 1000));
  17. page.DefaultTextStyle(x => x.FontSize(20));
  18. page.Margin(25);
  19. page.Content()
  20. .Column(column =>
  21. {
  22. column.Spacing(10);
  23. column.Item()
  24. .Text("This is small text (16pt)")
  25. .FontSize(16);
  26. column.Item()
  27. .Text("This is medium text (24pt)")
  28. .FontSize(24);
  29. column.Item()
  30. .Text("This is large text (36pt)")
  31. .FontSize(36);
  32. });
  33. });
  34. })
  35. .GenerateImages(x => "text-font-size.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  36. }
  37. [Test]
  38. public void FontFamily()
  39. {
  40. Document
  41. .Create(document =>
  42. {
  43. document.Page(page =>
  44. {
  45. page.MinSize(new PageSize(0, 0));
  46. page.MaxSize(new PageSize(1000, 1000));
  47. page.DefaultTextStyle(x => x.FontSize(20));
  48. page.Margin(25);
  49. page.Content()
  50. .Column(column =>
  51. {
  52. column.Spacing(10);
  53. column.Item().Text("This is text with default font (Lato)");
  54. column.Item().Text("This is text with Times New Roman font")
  55. .FontFamily("Times New Roman");
  56. column.Item().Text("This is text with Courier New font")
  57. .FontFamily("Courier New");
  58. });
  59. });
  60. })
  61. .GenerateImages(x => "text-font-family.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.VeryHigh, RasterDpi = 144 });
  62. }
  63. [Test]
  64. public void FontColor()
  65. {
  66. Document
  67. .Create(document =>
  68. {
  69. document.Page(page =>
  70. {
  71. page.MinSize(new PageSize(0, 0));
  72. page.MaxSize(new PageSize(1000, 1000));
  73. page.DefaultTextStyle(x => x.FontSize(20));
  74. page.Margin(25);
  75. page.Content()
  76. .Text(text =>
  77. {
  78. text.Span("Each pixel consists of three sub-pixels: ");
  79. text.Span("red").FontColor(Colors.Red.Medium);
  80. text.Span(", ");
  81. text.Span("green").FontColor(Colors.Green.Medium);
  82. text.Span(" and ");
  83. text.Span("blue").FontColor(Colors.Blue.Medium);
  84. text.Span(".");
  85. });
  86. });
  87. })
  88. .GenerateImages(x => "text-font-color.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  89. }
  90. [Test]
  91. public void BackgroundColor()
  92. {
  93. Document
  94. .Create(document =>
  95. {
  96. document.Page(page =>
  97. {
  98. page.MinSize(new PageSize(0, 0));
  99. page.MaxSize(new PageSize(500, 1000));
  100. page.DefaultTextStyle(x => x.FontSize(20));
  101. page.Margin(25);
  102. page.Content()
  103. .Text(text =>
  104. {
  105. text.Span("The term ");
  106. text.Span("algorithm").BackgroundColor(Colors.Yellow.Lighten3).Bold();
  107. text.Span(" refers to a set of rules or steps used to solve a problem.");
  108. });
  109. });
  110. })
  111. .GenerateImages(x => "text-font-background.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  112. }
  113. [Test]
  114. public void Italic()
  115. {
  116. Document
  117. .Create(document =>
  118. {
  119. document.Page(page =>
  120. {
  121. page.MinSize(new PageSize(0, 0));
  122. page.MaxSize(new PageSize(500, 1000));
  123. page.DefaultTextStyle(x => x.FontSize(20));
  124. page.Margin(25);
  125. page.Content()
  126. .Text(text =>
  127. {
  128. text.Span("In this sentence, the word ");
  129. text.Span("important").Italic();
  130. text.Span(" is emphasized using italics.");
  131. });
  132. });
  133. })
  134. .GenerateImages(x => "text-font-italic.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  135. }
  136. [Test]
  137. public void FontWeight()
  138. {
  139. Document
  140. .Create(document =>
  141. {
  142. document.Page(page =>
  143. {
  144. page.MinSize(new PageSize(0, 0));
  145. page.MaxSize(new PageSize(500, 1000));
  146. page.DefaultTextStyle(x => x.FontSize(20));
  147. page.Margin(25);
  148. page.Content()
  149. .Text(text =>
  150. {
  151. text.Span("This sentence demonstrates ");
  152. text.Span("bold").Bold();
  153. text.Span(", ");
  154. text.Span("normal").NormalWeight();
  155. text.Span(", ");
  156. text.Span("light").Light();
  157. text.Span(" and ");
  158. text.Span("thin").Thin();
  159. text.Span(" font weights.");
  160. });
  161. });
  162. })
  163. .GenerateImages(x => "text-font-weight.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  164. }
  165. [Test]
  166. public void Subscript()
  167. {
  168. Document
  169. .Create(document =>
  170. {
  171. document.Page(page =>
  172. {
  173. page.MinSize(new PageSize(0, 0));
  174. page.MaxSize(new PageSize(500, 1000));
  175. page.DefaultTextStyle(x => x.FontSize(20));
  176. page.Margin(25);
  177. page.Content()
  178. .Text(text =>
  179. {
  180. text.Span("H");
  181. text.Span("2").Subscript();
  182. text.Span("O is the chemical formula for water.");
  183. });
  184. });
  185. })
  186. .GenerateImages(x => "text-subscript.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  187. }
  188. [Test]
  189. public void Superscript()
  190. {
  191. Document
  192. .Create(document =>
  193. {
  194. document.Page(page =>
  195. {
  196. page.MinSize(new PageSize(0, 0));
  197. page.MaxSize(new PageSize(1000, 1000));
  198. page.DefaultTextStyle(x => x.FontSize(20));
  199. page.Margin(25);
  200. page.Content()
  201. .Text(text =>
  202. {
  203. text.Span("E = mc");
  204. text.Span("2").Superscript();
  205. text.Span(" is the equation of mass-energy equivalence.");
  206. });
  207. });
  208. })
  209. .GenerateImages(x => "text-superscript.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  210. }
  211. [Test]
  212. public void LineHeight()
  213. {
  214. Document
  215. .Create(document =>
  216. {
  217. document.Page(page =>
  218. {
  219. page.MinSize(new PageSize(0, 0));
  220. page.MaxSize(new PageSize(500, 1000));
  221. page.DefaultTextStyle(x => x.FontSize(20));
  222. page.Margin(25);
  223. page.Content()
  224. .Column(column =>
  225. {
  226. column.Spacing(20);
  227. float[] lineHeights = [0.75f, 1f, 2f];
  228. var paragraph = Placeholders.Paragraph();
  229. foreach (var lineHeight in lineHeights)
  230. {
  231. column
  232. .Item()
  233. .Background(Colors.Grey.Lighten3)
  234. .Padding(5)
  235. .Text(paragraph)
  236. .FontSize(16)
  237. .LineHeight(lineHeight);
  238. }
  239. });
  240. });
  241. })
  242. .GenerateImages(x => "text-line-height.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  243. }
  244. [Test]
  245. public void LetterSpacing()
  246. {
  247. Document
  248. .Create(document =>
  249. {
  250. document.Page(page =>
  251. {
  252. page.MinSize(new PageSize(0, 0));
  253. page.MaxSize(new PageSize(500, 1000));
  254. page.DefaultTextStyle(x => x.FontSize(20));
  255. page.Margin(25);
  256. page.Content()
  257. .Column(column =>
  258. {
  259. column.Spacing(20);
  260. var letterSpacing = new[] { -0.08f, 0f, 0.2f };
  261. var paragraph = Placeholders.Sentence();
  262. foreach (var spacing in letterSpacing)
  263. {
  264. column
  265. .Item()
  266. .Background(Colors.Grey.Lighten3)
  267. .Padding(5)
  268. .Text(paragraph)
  269. .FontSize(18)
  270. .LetterSpacing(spacing);
  271. }
  272. });
  273. });
  274. })
  275. .GenerateImages(x => "text-letter-spacing.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  276. }
  277. [Test]
  278. public void WordSpacing()
  279. {
  280. Document
  281. .Create(document =>
  282. {
  283. document.Page(page =>
  284. {
  285. page.MinSize(new PageSize(0, 0));
  286. page.MaxSize(new PageSize(500, 1000));
  287. page.DefaultTextStyle(x => x.FontSize(20));
  288. page.Margin(25);
  289. page.Content()
  290. .Column(column =>
  291. {
  292. column.Spacing(20);
  293. var wordSpacing = new[] { -0.2f, 0f, 0.4f };
  294. var paragraph = Placeholders.Sentence();
  295. foreach (var spacing in wordSpacing)
  296. {
  297. column.Item()
  298. .Background(Colors.Grey.Lighten3)
  299. .Padding(5)
  300. .Text(paragraph)
  301. .FontSize(16)
  302. .WordSpacing(spacing);
  303. }
  304. });
  305. });
  306. })
  307. .GenerateImages(x => "text-word-spacing.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  308. }
  309. [Test]
  310. public void FontFallback()
  311. {
  312. Settings.UseEnvironmentFonts = false;
  313. Document
  314. .Create(document =>
  315. {
  316. document.Page(page =>
  317. {
  318. page.MinSize(new PageSize(0, 0));
  319. page.MaxSize(new PageSize(600, 1000));
  320. page.DefaultTextStyle(x => x.FontSize(20));
  321. page.Margin(25);
  322. page.Content()
  323. .Text("The Arabic word for programming is البرمجة.")
  324. .FontFamily("Lato", "Noto Sans Arabic");
  325. });
  326. })
  327. .GenerateImages(x => "text-font-fallback.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  328. }
  329. [Test]
  330. public void FontFallbackEmoji()
  331. {
  332. Settings.UseEnvironmentFonts = false;
  333. Document
  334. .Create(document =>
  335. {
  336. document.Page(page =>
  337. {
  338. page.MinSize(new PageSize(0, 0));
  339. page.MaxSize(new PageSize(600, 1000));
  340. page.DefaultTextStyle(x => x.FontSize(20));
  341. page.Margin(25);
  342. page.Content()
  343. .Text("Popular emojis include 😊, 😂, ❤️, 👍, and 😎.")
  344. .FontFamily("Lato", "Noto Emoji");
  345. });
  346. })
  347. .GenerateImages(x => "text-font-fallback-emoji.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  348. }
  349. [Test]
  350. public void TextFontFeatures()
  351. {
  352. Document
  353. .Create(document =>
  354. {
  355. document.Page(page =>
  356. {
  357. page.MinSize(new PageSize(0, 0));
  358. page.MaxSize(new PageSize(500, 1000));
  359. page.DefaultTextStyle(x => x.FontSize(20));
  360. page.Margin(25);
  361. page.Content()
  362. .Row(row =>
  363. {
  364. row.Spacing(25);
  365. row.RelativeItem()
  366. .Background(Colors.Grey.Lighten3)
  367. .Padding(10)
  368. .Column(column =>
  369. {
  370. column.Item().Text("Without ligatures").FontSize(16);
  371. column.Item()
  372. .Text("fly and fight")
  373. .FontSize(32)
  374. .DisableFontFeature(FontFeatures.StandardLigatures);
  375. });
  376. row.RelativeItem()
  377. .Background(Colors.Grey.Lighten3)
  378. .Padding(10)
  379. .Column(column =>
  380. {
  381. column.Item().Text("With ligatures").FontSize(16);
  382. column.Item().Text("fly and fight")
  383. .FontSize(32)
  384. .EnableFontFeature(FontFeatures.StandardLigatures);
  385. });
  386. });
  387. });
  388. })
  389. .GenerateImages(x => "text-font-features.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  390. }
  391. [Test]
  392. public void DecorationTypes()
  393. {
  394. Document
  395. .Create(document =>
  396. {
  397. document.Page(page =>
  398. {
  399. page.MinSize(new PageSize(0, 0));
  400. page.MaxSize(new PageSize(500, 1000));
  401. page.DefaultTextStyle(x => x.FontSize(20));
  402. page.Margin(25);
  403. page.Content()
  404. .Text(text =>
  405. {
  406. text.Span("There are a couple of available text decorations: ");
  407. text.Span("underline").Underline().FontColor(Colors.Red.Medium);
  408. text.Span(", ");
  409. text.Span("strikethrough").Strikethrough().FontColor(Colors.Green.Medium);
  410. text.Span(" and ");
  411. text.Span("overline").Overline().FontColor(Colors.Blue.Medium);
  412. text.Span(". ");
  413. });
  414. });
  415. })
  416. .GenerateImages(x => "text-decoration-types.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  417. }
  418. [Test]
  419. public void DecorationStyles()
  420. {
  421. Document
  422. .Create(document =>
  423. {
  424. document.Page(page =>
  425. {
  426. page.MinSize(new PageSize(0, 0));
  427. page.MaxSize(new PageSize(500, 1000));
  428. page.DefaultTextStyle(x => x.FontSize(20));
  429. page.Margin(25);
  430. page.Content()
  431. .Text(text =>
  432. {
  433. text.Span("Moreover, the decoration can be ");
  434. text.Span("solid").FontColor(Colors.Indigo.Medium).Underline().DecorationSolid();
  435. text.Span(", ");
  436. text.Span("double").FontColor(Colors.Blue.Medium).Underline().DecorationDouble();
  437. text.Span(", ");
  438. text.Span("wavy").FontColor(Colors.LightBlue.Medium).Underline().DecorationWavy();
  439. text.Span(", ");
  440. text.Span("dotted").FontColor(Colors.Cyan.Medium).Underline().DecorationDotted();
  441. text.Span(" or ");
  442. text.Span("dashed").FontColor(Colors.Green.Medium)
  443. .Underline().DecorationDashed();
  444. text.Span(".");
  445. });
  446. });
  447. })
  448. .GenerateImages(x => "text-decoration-styles.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  449. }
  450. [Test]
  451. public void DecorationsAdvanced()
  452. {
  453. Document
  454. .Create(document =>
  455. {
  456. document.Page(page =>
  457. {
  458. page.MinSize(new PageSize(0, 0));
  459. page.MaxSize(new PageSize(500, 1000));
  460. page.DefaultTextStyle(x => x.FontSize(20));
  461. page.Margin(25);
  462. page.Content()
  463. .Text(text =>
  464. {
  465. text.Span("This text contains a ");
  466. text.Span("seriuos")
  467. .Underline()
  468. .DecorationWavy()
  469. .DecorationColor(Colors.Red.Medium)
  470. .DecorationThickness(2);
  471. text.Span(" typo.");
  472. });
  473. });
  474. })
  475. .GenerateImages(x => "text-decoration-advanced.webp", new ImageGenerationSettings() { ImageFormat = ImageFormat.Webp, ImageCompressionQuality = ImageCompressionQuality.Best, RasterDpi = 144 });
  476. }
  477. }