diff --git a/QuestPDF.Examples/ColumnExamples.cs b/QuestPDF.Examples/ColumnExamples.cs index 40d60b4..3c5a222 100644 --- a/QuestPDF.Examples/ColumnExamples.cs +++ b/QuestPDF.Examples/ColumnExamples.cs @@ -25,8 +25,9 @@ namespace QuestPDF.Examples static void Block(IContainer container) { container - .Width(100) - .Height(100) + .Width(72) + .Height(3.5f) + .Height(1.5f) .Background(Placeholders.BackgroundColor()); } }); diff --git a/QuestPDF.Examples/DebuggingTesting.cs b/QuestPDF.Examples/DebuggingTesting.cs index 7aa2deb..c8434da 100644 --- a/QuestPDF.Examples/DebuggingTesting.cs +++ b/QuestPDF.Examples/DebuggingTesting.cs @@ -9,7 +9,7 @@ namespace QuestPDF.Examples public class DebuggingTesting { [Test] - public void column() + public void Column() { Assert.Throws(() => { diff --git a/QuestPDF.Examples/DifferentHeaderOnFirstPageExample.cs b/QuestPDF.Examples/DifferentHeaderOnFirstPageExample.cs index 0f0c354..4c2b733 100644 --- a/QuestPDF.Examples/DifferentHeaderOnFirstPageExample.cs +++ b/QuestPDF.Examples/DifferentHeaderOnFirstPageExample.cs @@ -23,7 +23,7 @@ namespace QuestPDF.Examples container.Page(page => { page.Size(PageSizes.A6); - page.Margin(30); + page.Margin(5); page.Background(Colors.White); page.Header().Column(column => diff --git a/QuestPDF/Fluent/BorderExtensions.cs b/QuestPDF/Fluent/BorderExtensions.cs index deafa13..32e94f1 100644 --- a/QuestPDF/Fluent/BorderExtensions.cs +++ b/QuestPDF/Fluent/BorderExtensions.cs @@ -14,39 +14,45 @@ namespace QuestPDF.Fluent return element.Element(border); } - public static IContainer Border(this IContainer element, float value) + public static IContainer Border(this IContainer element, float value, Unit unit = Unit.Point) { - return element.BorderHorizontal(value).BorderVertical(value); + return element + .BorderHorizontal(value, unit) + .BorderVertical(value, unit); } - public static IContainer BorderVertical(this IContainer element, float value) + public static IContainer BorderVertical(this IContainer element, float value, Unit unit = Unit.Point) { - return element.BorderLeft(value).BorderRight(value); + return element + .BorderLeft(value, unit) + .BorderRight(value, unit); } - public static IContainer BorderHorizontal(this IContainer element, float value) + public static IContainer BorderHorizontal(this IContainer element, float value, Unit unit = Unit.Point) { - return element.BorderTop(value).BorderBottom(value); + return element + .BorderTop(value, unit) + .BorderBottom(value, unit); } - public static IContainer BorderLeft(this IContainer element, float value) + public static IContainer BorderLeft(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Border(x => x.Left = value); + return element.Border(x => x.Left = value.ToPoints(unit)); } - public static IContainer BorderRight(this IContainer element, float value) + public static IContainer BorderRight(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Border(x => x.Right = value); + return element.Border(x => x.Right = value.ToPoints(unit)); } - public static IContainer BorderTop(this IContainer element, float value) + public static IContainer BorderTop(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Border(x => x.Top = value); + return element.Border(x => x.Top = value.ToPoints(unit)); } - public static IContainer BorderBottom(this IContainer element, float value) + public static IContainer BorderBottom(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Border(x => x.Bottom = value); + return element.Border(x => x.Bottom = value.ToPoints(unit)); } public static IContainer BorderColor(this IContainer element, string color) diff --git a/QuestPDF/Fluent/ColumnExtensions.cs b/QuestPDF/Fluent/ColumnExtensions.cs index 8d931d0..a16a299 100644 --- a/QuestPDF/Fluent/ColumnExtensions.cs +++ b/QuestPDF/Fluent/ColumnExtensions.cs @@ -6,19 +6,18 @@ namespace QuestPDF.Fluent { public class ColumnDescriptor { - //internal column Column { get; } = new(); internal Column Column { get; } = new(); - public void Spacing(float value) + public void Spacing(float value, Unit unit = Unit.Point) { - Column.Spacing = value; + Column.Spacing = value.ToPoints(unit); } public IContainer Item() { var container = new Container(); - Column.Items.Add(new ColumnItem() + Column.Items.Add(new ColumnItem { Child = container }); @@ -41,7 +40,6 @@ namespace QuestPDF.Fluent var descriptor = new ColumnDescriptor(); handler(descriptor); element.Element(descriptor.Column); - //element.Component(descriptor.Column); } } } \ No newline at end of file diff --git a/QuestPDF/Fluent/ConstrainedExtensions.cs b/QuestPDF/Fluent/ConstrainedExtensions.cs index bb30da2..0f64abe 100644 --- a/QuestPDF/Fluent/ConstrainedExtensions.cs +++ b/QuestPDF/Fluent/ConstrainedExtensions.cs @@ -14,34 +14,38 @@ namespace QuestPDF.Fluent return element.Element(constrained); } - public static IContainer Width(this IContainer element, float value) + public static IContainer Width(this IContainer element, float value, Unit unit = Unit.Point) { - return element.MinWidth(value).MaxWidth(value); + return element + .MinWidth(value, unit) + .MaxWidth(value, unit); } - public static IContainer MinWidth(this IContainer element, float value) + public static IContainer MinWidth(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Constrained(x => x.MinWidth = value); + return element.Constrained(x => x.MinWidth = value.ToPoints(unit)); } - public static IContainer MaxWidth(this IContainer element, float value) + public static IContainer MaxWidth(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Constrained(x => x.MaxWidth = value); + return element.Constrained(x => x.MaxWidth = value.ToPoints(unit)); } - public static IContainer Height(this IContainer element, float value) + public static IContainer Height(this IContainer element, float value, Unit unit = Unit.Point) { - return element.MinHeight(value).MaxHeight(value); + return element + .MinHeight(value, unit) + .MaxHeight(value, unit); } - public static IContainer MinHeight(this IContainer element, float value) + public static IContainer MinHeight(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Constrained(x => x.MinHeight = value); + return element.Constrained(x => x.MinHeight = value.ToPoints(unit)); } - public static IContainer MaxHeight(this IContainer element, float value) + public static IContainer MaxHeight(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Constrained(x => x.MaxHeight = value); + return element.Constrained(x => x.MaxHeight = value.ToPoints(unit)); } } } \ No newline at end of file diff --git a/QuestPDF/Fluent/DecorationExtensions.cs b/QuestPDF/Fluent/DecorationExtensions.cs index 4dfec71..6be4fbe 100644 --- a/QuestPDF/Fluent/DecorationExtensions.cs +++ b/QuestPDF/Fluent/DecorationExtensions.cs @@ -46,29 +46,37 @@ namespace QuestPDF.Fluent #region Obsolete - // public IContainer Header() - // { - // var container = new Container(); - // Decoration.Before = container; - // return container; - // } - // - // public void Header(Action handler) - // { - // handler?.Invoke(Header()); - // } - // - // public IContainer Footer() - // { - // var container = new Container(); - // Decoration.After = container; - // return container; - // } - // - // public void Footer(Action handler) - // { - // handler?.Invoke(Footer()); - // } + // TODO: deprecated Box method in QuestPDF 2022.2 + [Obsolete("This element has been renamed. Please use the Before method.")] + public IContainer Header() + { + var container = new Container(); + Decoration.Before = container; + return container; + } + + // TODO: deprecated Box method in QuestPDF 2022.2 + [Obsolete("This element has been renamed. Please use the Before method.")] + public void Header(Action handler) + { + handler?.Invoke(Header()); + } + + // TODO: deprecated Box method in QuestPDF 2022.2 + [Obsolete("This element has been renamed. Please use the After method.")] + public IContainer Footer() + { + var container = new Container(); + Decoration.After = container; + return container; + } + + // TODO: deprecated Box method in QuestPDF 2022.2 + [Obsolete("This element has been renamed. Please use the After method.")] + public void Footer(Action handler) + { + handler?.Invoke(Footer()); + } #endregion } diff --git a/QuestPDF/Fluent/GridExtensions.cs b/QuestPDF/Fluent/GridExtensions.cs index d08942e..e7ae0ca 100644 --- a/QuestPDF/Fluent/GridExtensions.cs +++ b/QuestPDF/Fluent/GridExtensions.cs @@ -8,20 +8,20 @@ namespace QuestPDF.Fluent { internal Grid Grid { get; } = new Grid(); - public void Spacing(float value) + public void Spacing(float value, Unit unit = Unit.Point) { - VerticalSpacing(value); - HorizontalSpacing(value); + VerticalSpacing(value, unit); + HorizontalSpacing(value, unit); } - public void VerticalSpacing(float value) + public void VerticalSpacing(float value, Unit unit = Unit.Point) { - Grid.VerticalSpacing = value; + Grid.VerticalSpacing = value.ToPoints(unit); } - public void HorizontalSpacing(float value) + public void HorizontalSpacing(float value, Unit unit = Unit.Point) { - Grid.HorizontalSpacing = value; + Grid.HorizontalSpacing = value.ToPoints(unit); } public void Columns(int value = Grid.DefaultColumnsCount) diff --git a/QuestPDF/Fluent/InlinedExtensions.cs b/QuestPDF/Fluent/InlinedExtensions.cs index b250c49..140185c 100644 --- a/QuestPDF/Fluent/InlinedExtensions.cs +++ b/QuestPDF/Fluent/InlinedExtensions.cs @@ -10,14 +10,21 @@ namespace QuestPDF.Fluent { internal Inlined Inlined { get; } = new Inlined(); - public void Spacing(float value) + public void Spacing(float value, Unit unit = Unit.Point) { - VerticalSpacing(value); - HorizontalSpacing(value); + VerticalSpacing(value, unit); + HorizontalSpacing(value, unit); } - public void VerticalSpacing(float value) => Inlined.VerticalSpacing = value; - public void HorizontalSpacing(float value) => Inlined.HorizontalSpacing = value; + public void VerticalSpacing(float value, Unit unit = Unit.Point) + { + Inlined.VerticalSpacing = value.ToPoints(unit); + } + + public void HorizontalSpacing(float value, Unit unit = Unit.Point) + { + Inlined.HorizontalSpacing = value.ToPoints(unit); + } public void BaselineTop() => Inlined.BaselineAlignment = VerticalAlignment.Top; public void BaselineMiddle() => Inlined.BaselineAlignment = VerticalAlignment.Middle; diff --git a/QuestPDF/Fluent/LineExtensions.cs b/QuestPDF/Fluent/LineExtensions.cs index 8e05315..2dacdcf 100644 --- a/QuestPDF/Fluent/LineExtensions.cs +++ b/QuestPDF/Fluent/LineExtensions.cs @@ -18,14 +18,14 @@ namespace QuestPDF.Fluent return line; } - public static ILine LineVertical(this IContainer element, float size) + public static ILine LineVertical(this IContainer element, float size, Unit unit = Unit.Point) { - return element.Line(LineType.Vertical, size); + return element.Line(LineType.Vertical, size.ToPoints(unit)); } - public static ILine LineHorizontal(this IContainer element, float size) + public static ILine LineHorizontal(this IContainer element, float size, Unit unit = Unit.Point) { - return element.Line(LineType.Horizontal, size); + return element.Line(LineType.Horizontal, size.ToPoints(unit)); } public static void LineColor(this ILine descriptor, string value) diff --git a/QuestPDF/Fluent/PaddingExtensions.cs b/QuestPDF/Fluent/PaddingExtensions.cs index 4cdc892..33d0b46 100644 --- a/QuestPDF/Fluent/PaddingExtensions.cs +++ b/QuestPDF/Fluent/PaddingExtensions.cs @@ -14,39 +14,45 @@ namespace QuestPDF.Fluent return element.Element(padding); } - public static IContainer Padding(this IContainer element, float value) + public static IContainer Padding(this IContainer element, float value, Unit unit = Unit.Point) { - return element.PaddingVertical(value).PaddingHorizontal(value); + return element + .PaddingVertical(value, unit) + .PaddingHorizontal(value, unit); } - public static IContainer PaddingHorizontal(this IContainer element, float value) + public static IContainer PaddingHorizontal(this IContainer element, float value, Unit unit = Unit.Point) { - return element.PaddingLeft(value).PaddingRight(value); + return element + .PaddingLeft(value, unit) + .PaddingRight(value, unit); } - public static IContainer PaddingVertical(this IContainer element, float value) + public static IContainer PaddingVertical(this IContainer element, float value, Unit unit = Unit.Point) { - return element.PaddingTop(value).PaddingBottom(value); + return element + .PaddingTop(value, unit) + .PaddingBottom(value, unit); } - public static IContainer PaddingTop(this IContainer element, float value) + public static IContainer PaddingTop(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Padding(x => x.Top += value); + return element.Padding(x => x.Top += value.ToPoints(unit)); } - public static IContainer PaddingBottom(this IContainer element, float value) + public static IContainer PaddingBottom(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Padding(x => x.Bottom += value); + return element.Padding(x => x.Bottom += value.ToPoints(unit)); } - public static IContainer PaddingLeft(this IContainer element, float value) + public static IContainer PaddingLeft(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Padding(x => x.Left += value); + return element.Padding(x => x.Left += value.ToPoints(unit)); } - public static IContainer PaddingRight(this IContainer element, float value) + public static IContainer PaddingRight(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Padding(x => x.Right += value); + return element.Padding(x => x.Right += value.ToPoints(unit)); } } } \ No newline at end of file diff --git a/QuestPDF/Fluent/PageExtensions.cs b/QuestPDF/Fluent/PageExtensions.cs index 82d7dc5..ab968ee 100644 --- a/QuestPDF/Fluent/PageExtensions.cs +++ b/QuestPDF/Fluent/PageExtensions.cs @@ -10,16 +10,24 @@ namespace QuestPDF.Fluent { internal Page Page { get; } = new Page(); + public void Size(float width, float height, Unit unit = Unit.Inch) + { + var pageSize = new PageSize(width, height, unit); + + MinSize(pageSize); + MaxSize(pageSize); + } + public void Size(PageSize pageSize) { MinSize(pageSize); MaxSize(pageSize); } - public void ContinuousSize(float width) + public void ContinuousSize(float width, Unit unit = Unit.Point) { - MinSize(new PageSize(width, 0)); - MaxSize(new PageSize(width, Infrastructure.Size.Max.Height)); + MinSize(new PageSize(width.ToPoints(unit), 0)); + MaxSize(new PageSize(width.ToPoints(unit), Infrastructure.Size.Max.Height)); } public void MinSize(PageSize pageSize) @@ -32,42 +40,42 @@ namespace QuestPDF.Fluent Page.MaxSize = pageSize; } - public void MarginLeft(float value) + public void MarginLeft(float value, Unit unit = Unit.Point) { - Page.MarginLeft = value; + Page.MarginLeft = value.ToPoints(unit); } - public void MarginRight(float value) + public void MarginRight(float value, Unit unit = Unit.Point) { - Page.MarginRight = value; + Page.MarginRight = value.ToPoints(unit); } - public void MarginTop(float value) + public void MarginTop(float value, Unit unit = Unit.Point) { - Page.MarginTop = value; + Page.MarginTop = value.ToPoints(unit); } - public void MarginBottom(float value) + public void MarginBottom(float value, Unit unit = Unit.Point) { - Page.MarginBottom = value; + Page.MarginBottom = value.ToPoints(unit); } - public void MarginVertical(float value) + public void MarginVertical(float value, Unit unit = Unit.Point) { - MarginTop(value); - MarginBottom(value); + MarginTop(value, unit); + MarginBottom(value, unit); } - public void MarginHorizontal(float value) + public void MarginHorizontal(float value, Unit unit = Unit.Point) { - MarginLeft(value); - MarginRight(value); + MarginLeft(value, unit); + MarginRight(value, unit); } - public void Margin(float value) + public void Margin(float value, Unit unit = Unit.Point) { - MarginVertical(value); - MarginHorizontal(value); + MarginVertical(value, unit); + MarginHorizontal(value, unit); } public void DefaultTextStyle(TextStyle textStyle) diff --git a/QuestPDF/Fluent/RowExtensions.cs b/QuestPDF/Fluent/RowExtensions.cs index 1db8c0a..2968eef 100644 --- a/QuestPDF/Fluent/RowExtensions.cs +++ b/QuestPDF/Fluent/RowExtensions.cs @@ -44,9 +44,9 @@ namespace QuestPDF.Fluent return Item(RowItemType.Relative, size); } - public IContainer ConstantItem(float size) + public IContainer ConstantItem(float size, Unit unit = Unit.Point) { - return Item(RowItemType.Constant, size); + return Item(RowItemType.Constant, size.ToPoints(unit)); } public IContainer AutoItem() diff --git a/QuestPDF/Fluent/RowOldExtensions.cs b/QuestPDF/Fluent/RowOldExtensions.cs deleted file mode 100644 index 9104c6f..0000000 --- a/QuestPDF/Fluent/RowOldExtensions.cs +++ /dev/null @@ -1,44 +0,0 @@ -// using System; -// using QuestPDF.Elements; -// using QuestPDF.Infrastructure; -// -// namespace QuestPDF.Fluent -// { -// public class RowDescriptor -// { -// internal RowOld Row { get; } = new RowOld(); -// -// public void Spacing(float value) -// { -// Row.Spacing = value; -// } -// -// public IContainer ConstantItem(float width) -// { -// return Column(constantWidth: width); -// } -// -// public IContainer RelativeItem(float width = 1) -// { -// return Column(relativeWidth: width); -// } -// -// public IContainer Column(float constantWidth = 0, float relativeWidth = 0) -// { -// var element = new RowOldElement(constantWidth, relativeWidth); -// -// Row.Items.Add(element); -// return element; -// } -// } -// -// public static class RowExtensions -// { -// public static void Row(this IContainer element, Action handler) -// { -// var descriptor = new RowDescriptor(); -// handler(descriptor); -// element.Element(descriptor.Row); -// } -// } -// } \ No newline at end of file diff --git a/QuestPDF/Fluent/TableExtensions.cs b/QuestPDF/Fluent/TableExtensions.cs index e0af338..f345c83 100644 --- a/QuestPDF/Fluent/TableExtensions.cs +++ b/QuestPDF/Fluent/TableExtensions.cs @@ -14,9 +14,9 @@ namespace QuestPDF.Fluent { internal List Columns { get; } = new(); - public void ConstantColumn(float width) + public void ConstantColumn(float width, Unit unit = Unit.Point) { - ComplexColumn(constantWidth: width); + ComplexColumn(constantWidth: width.ToPoints(unit)); } public void RelativeColumn(float width = 1) @@ -24,7 +24,7 @@ namespace QuestPDF.Fluent ComplexColumn(relativeWidth: width); } - public void ComplexColumn(float constantWidth = 0, float relativeWidth = 0) + private void ComplexColumn(float constantWidth = 0, float relativeWidth = 0) { var columnDefinition = new TableColumnDefinition(constantWidth, relativeWidth); Columns.Add(columnDefinition); diff --git a/QuestPDF/Fluent/TextExtensions.cs b/QuestPDF/Fluent/TextExtensions.cs index b4359e5..2d688b4 100644 --- a/QuestPDF/Fluent/TextExtensions.cs +++ b/QuestPDF/Fluent/TextExtensions.cs @@ -37,9 +37,9 @@ namespace QuestPDF.Fluent Alignment = HorizontalAlignment.Right; } - public void ParagraphSpacing(float value) + public void ParagraphSpacing(float value, Unit unit = Unit.Point) { - Spacing = value; + Spacing = value.ToPoints(unit); } private void AddItemToLastTextBlock(ITextBlockItem item) diff --git a/QuestPDF/Fluent/TranslateExtensions.cs b/QuestPDF/Fluent/TranslateExtensions.cs index bb2c148..2e32059 100644 --- a/QuestPDF/Fluent/TranslateExtensions.cs +++ b/QuestPDF/Fluent/TranslateExtensions.cs @@ -14,14 +14,14 @@ namespace QuestPDF.Fluent return element.Element(translate); } - public static IContainer TranslateX(this IContainer element, float value) + public static IContainer TranslateX(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Translate(x => x.TranslateX += value); + return element.Translate(x => x.TranslateX += value.ToPoints(unit)); } - public static IContainer TranslateY(this IContainer element, float value) + public static IContainer TranslateY(this IContainer element, float value, Unit unit = Unit.Point) { - return element.Translate(x => x.TranslateY += value); + return element.Translate(x => x.TranslateY += value.ToPoints(unit)); } } } \ No newline at end of file diff --git a/QuestPDF/Helpers/PageSizes.cs b/QuestPDF/Helpers/PageSizes.cs index c62e0df..fd52af1 100644 --- a/QuestPDF/Helpers/PageSizes.cs +++ b/QuestPDF/Helpers/PageSizes.cs @@ -8,10 +8,10 @@ namespace QuestPDF.Helpers public readonly float Width; public readonly float Height; - public PageSize(float width, float height) + public PageSize(float width, float height, Unit unit = Unit.Point) { - Width = width; - Height = height; + Width = width.ToPoints(unit); + Height = height.ToPoints(unit); } public static implicit operator Size(PageSize pageSize) => new Size(pageSize.Width, pageSize.Height); diff --git a/QuestPDF/Infrastructure/Unit.cs b/QuestPDF/Infrastructure/Unit.cs new file mode 100644 index 0000000..3d2cf8d --- /dev/null +++ b/QuestPDF/Infrastructure/Unit.cs @@ -0,0 +1,44 @@ +using System; +using static QuestPDF.Infrastructure.Unit; + +namespace QuestPDF.Infrastructure +{ + public enum Unit + { + Point, + + Meter, + Centimetre, + Millimetre, + + Feet, + Inch, + Mill + } + + internal static class UnitExtensions + { + private const float InchToCentimetre = 2.54f; + private const float InchToPoints = 72; + + public static float ToPoints(this float value, Unit unit) + { + return value * GetConversionFactor(); + + float GetConversionFactor() + { + return unit switch + { + Point => 1, + Meter => 100 / InchToCentimetre * InchToPoints, + Centimetre => 1 / InchToCentimetre * InchToPoints, + Millimetre => 10 / InchToCentimetre * InchToPoints, + Feet => 12 * InchToPoints, + Inch => InchToPoints, + Mill => InchToPoints / 1000f, + _ => throw new ArgumentOutOfRangeException(nameof(unit), unit, null) + }; + } + } + } +} \ No newline at end of file