DifferentHeadersTemplate.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using QuestPDF.Drawing;
  2. using QuestPDF.Fluent;
  3. using QuestPDF.Helpers;
  4. using QuestPDF.Infrastructure;
  5. namespace QuestPDF.ReportSample.Layouts
  6. {
  7. public class DifferentHeadersTemplate : IDocument
  8. {
  9. public DocumentMetadata GetMetadata() => DocumentMetadata.Default;
  10. public void Compose(IDocumentContainer container)
  11. {
  12. container
  13. .Page(page =>
  14. {
  15. page.Margin(40);
  16. page.Size(PageSizes.A4);
  17. page.Header().Element(ComposeHeader);
  18. page.Content().Element(ComposeContent);
  19. page.Footer().Element(ComposeFooter);
  20. });
  21. }
  22. private void ComposeHeader(IContainer container)
  23. {
  24. container.Background(Colors.Grey.Lighten3).Border(1).Stack(stack =>
  25. {
  26. stack.Item().ShowOnce().Padding(5).AlignMiddle().Row(row =>
  27. {
  28. row.RelativeColumn(2).AlignMiddle().Text("PRIMARY HEADER", TextStyle.Default.Color(Colors.Grey.Darken3).Size(30).Bold());
  29. row.RelativeColumn(1).AlignRight().Box().AlignMiddle().Background(Colors.Blue.Darken2).Padding(30);
  30. });
  31. stack.Item().SkipOnce().Padding(5).Row(row =>
  32. {
  33. row.RelativeColumn(2).Text("SECONDARY HEADER", TextStyle.Default.Color(Colors.Grey.Darken3).Size(30).Bold());
  34. row.RelativeColumn(1).AlignRight().Box().Background(Colors.Blue.Lighten4).Padding(15);
  35. });
  36. });
  37. }
  38. private void ComposeContent(IContainer container)
  39. {
  40. container.Stack(stack =>
  41. {
  42. stack.Item().PaddingVertical(80).Text("First");
  43. stack.Item().PageBreak();
  44. stack.Item().PaddingVertical(80).Text("Second");
  45. stack.Item().PageBreak();
  46. stack.Item().PaddingVertical(80).Text("Third");
  47. stack.Item().PageBreak();
  48. });
  49. }
  50. private void ComposeFooter(IContainer container)
  51. {
  52. container.Background(Colors.Grey.Lighten3).Stack(stack =>
  53. {
  54. stack.Item().ShowOnce().Background(Colors.Grey.Lighten3).Row(row =>
  55. {
  56. row.RelativeColumn().Text(x =>
  57. {
  58. x.CurrentPageNumber();
  59. x.Span(" / ");
  60. x.TotalPages();
  61. });
  62. row.RelativeColumn().AlignRight().Text("Footer for header");
  63. });
  64. stack.Item().SkipOnce().Background(Colors.Grey.Lighten3).Row(row =>
  65. {
  66. row.RelativeColumn().Text(x =>
  67. {
  68. x.CurrentPageNumber();
  69. x.Span(" / ");
  70. x.TotalPages();
  71. });
  72. row.RelativeColumn().AlignRight().Text("Footer for every page except header");
  73. });
  74. });
  75. }
  76. }
  77. }