CodePatternComponentProgressbarComponentExample.cs 3.5 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. public class PageProgressbarComponent : IDynamicComponent
  54. {
  55. public DynamicComponentComposeResult Compose(DynamicContext context)
  56. {
  57. var content = context.CreateElement(element =>
  58. {
  59. var width = context.AvailableSize.Width * context.PageNumber / context.TotalPages;
  60. element
  61. .Background(Colors.Blue.Lighten3)
  62. .Height(5)
  63. .Width(width)
  64. .Background(Colors.Blue.Darken2);
  65. });
  66. return new DynamicComponentComposeResult
  67. {
  68. Content = content,
  69. HasMoreContent = false
  70. };
  71. }
  72. }
  73. public class PageNumberSideComponent : IDynamicComponent
  74. {
  75. public DynamicComponentComposeResult Compose(DynamicContext context)
  76. {
  77. var content = context.CreateElement(element =>
  78. {
  79. element
  80. .Element(x => context.PageNumber % 2 == 0 ? x.AlignRight() : x.AlignLeft())
  81. .Text(text =>
  82. {
  83. text.Span("Page ");
  84. text.CurrentPageNumber();
  85. });
  86. });
  87. return new DynamicComponentComposeResult
  88. {
  89. Content = content,
  90. HasMoreContent = false
  91. };
  92. }
  93. }
  94. }