97 lines
3.0 KiB
C#
97 lines
3.0 KiB
C#
using QuestPDF.Drawing;
|
|
using QuestPDF.Fluent;
|
|
using QuestPDF.Helpers;
|
|
using QuestPDF.Infrastructure;
|
|
|
|
namespace QuestPDF.ReportSample.Layouts
|
|
{
|
|
public class StandardReport : IDocument
|
|
{
|
|
private ReportModel Model { get; }
|
|
|
|
public StandardReport(ReportModel model)
|
|
{
|
|
Model = model;
|
|
}
|
|
|
|
public DocumentMetadata GetMetadata()
|
|
{
|
|
return new DocumentMetadata()
|
|
{
|
|
Title = Model.Title,
|
|
Size = PageSizes.A4
|
|
};
|
|
}
|
|
|
|
public void Compose(IContainer container)
|
|
{
|
|
container
|
|
.PaddingVertical(40)
|
|
.PaddingHorizontal(50)
|
|
|
|
.Page(page =>
|
|
{
|
|
page.Header(ComposeHeader);
|
|
page.Content(ComposeContent);
|
|
page.Footer().AlignCenter().PageNumber("Page {number}");
|
|
});
|
|
}
|
|
|
|
private void ComposeHeader(IContainer container)
|
|
{
|
|
container.Row(row =>
|
|
{
|
|
row.RelativeColumn().MaxWidth(300).Stack(stack =>
|
|
{
|
|
stack.Spacing(5);
|
|
|
|
stack
|
|
.Element()
|
|
.PaddingBottom(5)
|
|
.Text(Model.Title, Typography.Title);
|
|
|
|
stack.Element().ShowOnce().Stack(table =>
|
|
{
|
|
table.Spacing(5);
|
|
|
|
foreach (var field in Model.HeaderFields)
|
|
{
|
|
table.Element().Row(row =>
|
|
{
|
|
row.ConstantColumn(50)
|
|
.AlignLeft()
|
|
.Text($"{field.Label}:", Typography.Normal);
|
|
|
|
row.RelativeColumn()
|
|
.PaddingLeft(10)
|
|
.Text(field.Value, Typography.Normal);
|
|
});
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
row.ConstantColumn(150).ExternalLink("https://www.questpdf.com").Image(Model.LogoData);
|
|
});
|
|
}
|
|
|
|
void ComposeContent(IContainer container)
|
|
{
|
|
container.PaddingVertical(20).PageableStack(stack =>
|
|
{
|
|
stack.Spacing(20);
|
|
|
|
stack.Element().Component(new TableOfContentsTemplate(Model.Sections));
|
|
|
|
foreach (var section in Model.Sections)
|
|
stack.Element().Location(section.Title).Component(new SectionTemplate(section));
|
|
|
|
stack.Element().PageBreak();
|
|
stack.Element().Location("Photos");
|
|
|
|
foreach (var photo in Model.Photos)
|
|
stack.Element().Component(new PhotoTemplate(photo));
|
|
});
|
|
}
|
|
}
|
|
} |