diff --git a/QuestPDF.Previewer.Examples/Program.cs b/QuestPDF.Previewer.Examples/Program.cs index 3e72075..ab17dbe 100644 --- a/QuestPDF.Previewer.Examples/Program.cs +++ b/QuestPDF.Previewer.Examples/Program.cs @@ -2,13 +2,14 @@ using QuestPDF.Helpers; using QuestPDF.Infrastructure; using QuestPDF.Previewer; +using QuestPDF.ReportSample; using QuestPDF.ReportSample.Layouts; //ImagePlaceholder.Solid = true; // var model = DataSource.GetReport(); // var report = new StandardReport(model); -// report.ShowInPreviewer().Wait(); +// report.ShowInPreviewer(); // // return; diff --git a/QuestPDF.ReportSample/Layouts/TableOfContentsTemplate.cs b/QuestPDF.ReportSample/Layouts/TableOfContentsTemplate.cs index 0eba5d0..dd59f7a 100644 --- a/QuestPDF.ReportSample/Layouts/TableOfContentsTemplate.cs +++ b/QuestPDF.ReportSample/Layouts/TableOfContentsTemplate.cs @@ -3,6 +3,7 @@ using System.Drawing; using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure; +using SkiaSharp; namespace QuestPDF.ReportSample.Layouts { @@ -44,9 +45,22 @@ namespace QuestPDF.ReportSample.Layouts .SectionLink(locationName) .Row(row => { - row.ConstantItem(25).Text($"{number}."); - row.RelativeItem().Text(locationName); - row.ConstantItem(150).AlignRight().Text(text => + row.ConstantItem(20).Text($"{number}."); + row.AutoItem().Text(locationName); + + row.RelativeItem().PaddingHorizontal(2).AlignBottom().TranslateY(-3).Height(1).Canvas((canvas, space) => + { + // best to statically cache + using var paint = new SKPaint + { + StrokeWidth = space.Height, + PathEffect = SKPathEffect.CreateDash(new float[] { 1, 3 }, 0) + }; + + canvas.DrawLine(0, 0, space.Width, 0, paint); + }); + + row.AutoItem().Text(text => { text.BeginPageNumberOfSection(locationName); text.Span(" - "); diff --git a/QuestPDF/Elements/Row.cs b/QuestPDF/Elements/Row.cs index 713ccf2..cdf6a63 100644 --- a/QuestPDF/Elements/Row.cs +++ b/QuestPDF/Elements/Row.cs @@ -102,13 +102,14 @@ namespace QuestPDF.Elements private void UpdateItemsWidth(float availableWidth) { - HandleItemsWithAutoWidth(); + foreach (var rowItem in Items.Where(x => x.Type == RowItemType.Auto)) + rowItem.Size = rowItem.Measure(Size.Max).Width; - var constantWidth = Items.Where(x => x.Type == RowItemType.Constant).Sum(x => x.Size); + var constantWidth = Items.Where(x => x.Type != RowItemType.Relative).Sum(x => x.Size); var relativeWidth = Items.Where(x => x.Type == RowItemType.Relative).Sum(x => x.Size); var spacingWidth = (Items.Count - 1) * Spacing; - foreach (var item in Items.Where(x => x.Type == RowItemType.Constant)) + foreach (var item in Items.Where(x => x.Type != RowItemType.Relative)) item.Width = item.Size; if (relativeWidth <= 0) @@ -119,16 +120,7 @@ namespace QuestPDF.Elements foreach (var item in Items.Where(x => x.Type == RowItemType.Relative)) item.Width = item.Size * widthPerRelativeUnit; } - - private void HandleItemsWithAutoWidth() - { - foreach (var rowItem in Items.Where(x => x.Type == RowItemType.Auto)) - { - rowItem.Size = rowItem.Measure(Size.Max).Width; - rowItem.Type = RowItemType.Constant; - } - } - + private ICollection PlanLayout(Size availableSpace) { var leftOffset = 0f;