CodePatternComponentProgressbarComponentExample.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using QuestPDF.Elements;
  2. using QuestPDF.Fluent;
  3. using QuestPDF.Helpers;
  4. using QuestPDF.Infrastructure;
  5. namespace QuestPDF.DocumentationExamples.CodePatterns;
  6. public class CodePatternComponentProgressbarComponentExample
  7. {
  8. [Test]
  9. public void Example()
  10. {
  11. var content = GenerateReport();
  12. File.WriteAllBytes("code-pattern-dynamic-component-progressbar.pdf", content);
  13. }
  14. public byte[] GenerateReport()
  15. {
  16. return Document
  17. .Create(document =>
  18. {
  19. document.Page(page =>
  20. {
  21. page.Size(PageSizes.A4);
  22. page.Margin(50);
  23. page.DefaultTextStyle(x => x.FontSize(20));
  24. page.Header().Column(column =>
  25. {
  26. column.Item()
  27. .Text("MyBrick Set")
  28. .FontSize(48).FontColor(Colors.Blue.Darken2).Bold();
  29. column.Item()
  30. .Text("Building Instruction")
  31. .FontSize(24);
  32. column.Item().Height(15);
  33. column.Item().Dynamic(new PageProgressbarComponent());
  34. });
  35. page.Content().PaddingVertical(25).Column(column =>
  36. {
  37. column.Spacing(25);
  38. foreach (var i in Enumerable.Range(1, 30))
  39. {
  40. column.Item()
  41. .Background(Colors.Grey.Lighten3)
  42. .Height(Random.Shared.Next(4, 8) * 25)
  43. .AlignCenter()
  44. .AlignMiddle()
  45. .Text($"Step {i}");
  46. }
  47. });
  48. page.Footer().Dynamic(new PageNumberSideComponent());
  49. });
  50. })
  51. .GeneratePdf();
  52. }
  53. }
  54. public class PageProgressbarComponent : IDynamicComponent
  55. {
  56. public DynamicComponentComposeResult Compose(DynamicContext context)
  57. {
  58. var content = context.CreateElement(element =>
  59. {
  60. var width = context.AvailableSize.Width * context.PageNumber / context.TotalPages;
  61. element
  62. .Background(Colors.Blue.Lighten3)
  63. .Height(5)
  64. .Width(width)
  65. .Background(Colors.Blue.Darken2);
  66. });
  67. return new DynamicComponentComposeResult
  68. {
  69. Content = content,
  70. HasMoreContent = false
  71. };
  72. }
  73. }
  74. public class PageNumberSideComponent : IDynamicComponent
  75. {
  76. public DynamicComponentComposeResult Compose(DynamicContext context)
  77. {
  78. var content = context.CreateElement(element =>
  79. {
  80. element
  81. .Element(x => context.PageNumber % 2 == 0 ? x.AlignRight() : x.AlignLeft())
  82. .Text(text =>
  83. {
  84. text.Span("Page ");
  85. text.CurrentPageNumber();
  86. });
  87. });
  88. return new DynamicComponentComposeResult
  89. {
  90. Content = content,
  91. HasMoreContent = false
  92. };
  93. }
  94. }