| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System;
- using System.Linq;
- using QuestPDF.Fluent;
- using QuestPDF.Infrastructure;
- namespace QuestPDF.ReportSample.Layouts
- {
- public class SectionTemplate : IComponent
- {
- public ReportSection Model { get; set; }
- public SectionTemplate(ReportSection model)
- {
- Model = model;
- }
-
- public void Compose(IContainer container)
- {
- container
- .MinHeight(100)
- .Section(section =>
- {
- section
- .Header()
- .PaddingBottom(5)
- .Text(Model.Title, Typography.Headline);
- section.Content().PageableStack(stack =>
- {
- foreach (var part in Model.Parts)
- {
- stack.Element().Row(row =>
- {
- row.ConstantColumn(150).DarkCell().Text(part.Label, Typography.Normal);
- var frame = row.RelativeColumn().LightCell();
-
- if (part is ReportSectionText text)
- frame.Text(text.Text, Typography.Normal);
-
- if (part is ReportSectionMap map)
- frame.Element(container => MapElement(container, map));
-
- if (part is ReportSectionPhotos photos)
- frame.Element(container => PhotosElement(container, photos));
- });
- }
- });
- });
- }
-
- void MapElement(IContainer container, ReportSectionMap model)
- {
- if (model.ImageSource == null || model.Location == null)
- {
- container.Text("No location provided", Typography.Normal);
- return;
- }
- container.Stack(stack =>
- {
- stack.Spacing(5);
-
- stack.Element().Component(new ImageTemplate(model.ImageSource));
- stack.Element().Text(model.Location.Format(), Typography.Normal);
- });
- }
-
- void PhotosElement(IContainer container, ReportSectionPhotos model)
- {
- if (model.Photos.Count == 0)
- {
- container.Text("No photos", Typography.Normal);
- return;
- }
- var rowCount = (int) Math.Ceiling(model.Photos.Count / 3f);
- container.Padding(-2).Stack(stack =>
- {
- foreach (var rowId in Enumerable.Range(0, rowCount))
- {
- stack.Element().Row(row =>
- {
- foreach (var id in Enumerable.Range(0, 3))
- {
- var data = model.Photos.ElementAtOrDefault(rowId + id);
- row.RelativeColumn().Padding(2).Component(new ImageTemplate(data));
- }
- });
- }
- });
- }
- }
- }
|