Skip to content

Commit fbd71d6

Browse files
committed
PeachPDF 0.7.23
Implement support for break-inside: avoid Alias page-break-* to break-* Update SixLabors.ImageSharp to 3.1.10
1 parent 99c4eca commit fbd71d6

7 files changed

Lines changed: 53 additions & 14 deletions

File tree

src/PdfSharpCore/PeachPDF.PdfSharpCore.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ PeachPDF.PdfSharpCore is a partial port of PdfSharp.Xamarin for .NET Core Additi
1414
<PackageProjectUrl>https://github.com/jhaygood86/PeachPDF</PackageProjectUrl>
1515
<RepositoryUrl>https://github.com/jhaygood86/PeachPDF</RepositoryUrl>
1616
<PackageReleaseNotes>PeachPDF.PdfSharpCore is a partial port of PdfSharp.Xamarin for .NET Core Additionally MigraDoc has been ported as well (from version 1.32)</PackageReleaseNotes>
17-
<PackageVersion>0.7.18</PackageVersion>
17+
<PackageVersion>0.7.23</PackageVersion>
1818
<summary>PdfSharp for .NET Core</summary>
1919
<IsTrimmable>true</IsTrimmable>
2020
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
@@ -48,7 +48,7 @@ PeachPDF.PdfSharpCore is a partial port of PdfSharp.Xamarin for .NET Core Additi
4848
</ItemGroup>
4949
<ItemGroup>
5050
<PackageReference Include="SharpZipLib" Version="1.4.2" />
51-
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.8" />
51+
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.10" />
5252
<PackageReference Include="SixLabors.Fonts" Version="2.1.3" />
5353
</ItemGroup>
5454

src/PeachPDF/Html/Core/Dom/CssBox.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -607,15 +607,12 @@ protected virtual async ValueTask PerformLayoutImp(RGraphics g)
607607
await MeasureWordsSize(g);
608608
}
609609

610-
611-
612-
if (PageBreakBefore is CssConstants.Always)
610+
if (BreakBefore is CssConstants.Page)
613611
{
614612
var previousSibling = DomUtils.GetPreviousSibling(this);
615613

616614
if (previousSibling is not null)
617615
{
618-
619616
var bottomRelativeToCurrentPage = previousSibling.ActualBottom;
620617
var pageHeight = HtmlContainer!.PageSize.Height;
621618

@@ -763,6 +760,26 @@ protected virtual async ValueTask PerformLayoutImp(RGraphics g)
763760

764761
await CreateListItemBox(g);
765762

763+
if (BreakInside is CssConstants.Avoid)
764+
{
765+
var pageHeight = HtmlContainer!.PageSize.Height;
766+
767+
var topRelativeToCurrentPage = Location.Y;
768+
769+
while (topRelativeToCurrentPage > pageHeight)
770+
{
771+
topRelativeToCurrentPage -= pageHeight;
772+
}
773+
774+
var bottomRelativeToCurrentPage = topRelativeToCurrentPage + ActualBottom - Location.Y;
775+
776+
if (bottomRelativeToCurrentPage > pageHeight)
777+
{
778+
var offset = pageHeight - topRelativeToCurrentPage + HtmlContainer.MarginBottom;
779+
OffsetTop(offset);
780+
}
781+
}
782+
766783
if (Position is CssConstants.Absolute)
767784
{
768785
if (Left is CssConstants.Auto && Right is not CssConstants.Auto)

src/PeachPDF/Html/Core/Dom/CssBoxProperties.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,9 @@ public string PaddingTop
282282
}
283283
}
284284

285-
public string PageBreakBefore { get; set; } = CssConstants.Auto;
286-
public string PageBreakInside { get; set; } = CssConstants.Auto;
285+
public string BreakBefore { get; set; } = CssConstants.Auto;
286+
public string BreakInside { get; set; } = CssConstants.Auto;
287+
public string BreakAfter { get; set; } = CssConstants.Auto;
287288

288289
public string Left { get; set; } = CssConstants.Auto;
289290

src/PeachPDF/Html/Core/Dom/CssLayoutEngineTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ private async ValueTask LayoutCells(RGraphics g)
693693
}
694694

695695
// If one cell crosses page borders then don't need to check other cells in the row
696-
if (_tableBox.PageBreakInside is CssConstants.Avoid) continue;
696+
if (_tableBox.BreakInside is CssConstants.Avoid) continue;
697697

698698
breakPage = cell.BreakPage();
699699
if (!breakPage) continue;

src/PeachPDF/Html/Core/Utils/CssConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ internal static class CssConstants
8484
public const string Outside = "outside";
8585
public const string Overline = "overline";
8686
public const string PaddingBox = "padding-box";
87+
public const string Page = "page";
8788
public const string Percent = "%";
8889
public const string Pre = "pre";
8990
public const string PreWrap = "pre-wrap";

src/PeachPDF/Html/Core/Utils/CssUtils.cs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ public static double WhiteSpace(RGraphics g, CssBoxProperties box)
6767
"border-top-color" => cssBox.BorderTopColor,
6868
"border-spacing" => cssBox.BorderSpacing,
6969
"border-collapse" => cssBox.BorderCollapse,
70+
"break-after" => cssBox.BreakAfter,
71+
"break-before" => cssBox.BreakBefore,
72+
"break-inside" => cssBox.BreakInside,
7073
"corner-radius" => cssBox.CornerRadius,
7174
"corner-nw-radius" => cssBox.CornerNwRadius,
7275
"corner-ne-radius" => cssBox.CornerNeRadius,
@@ -83,8 +86,9 @@ public static double WhiteSpace(RGraphics g, CssBoxProperties box)
8386
"padding-left" => cssBox.PaddingLeft,
8487
"padding-right" => cssBox.PaddingRight,
8588
"padding-top" => cssBox.PaddingTop,
86-
"page-break-before" => cssBox.PageBreakBefore,
87-
"page-break-inside" => cssBox.PageBreakInside,
89+
"page-break-after" => cssBox.BreakAfter,
90+
"page-break-before" => cssBox.BreakBefore,
91+
"page-break-inside" => cssBox.BreakInside,
8892
"left" => cssBox.Left,
8993
"top" => cssBox.Top,
9094
"right" => cssBox.Right,
@@ -320,11 +324,27 @@ public static void SetPropertyValue(CssValueParser valueParser, CssBox cssBox, s
320324
case "padding-top":
321325
cssBox.PaddingTop = value;
322326
break;
327+
case "break-after":
328+
case "page-break-after":
329+
if (value is CssConstants.Always && propName is "page-break-after")
330+
{
331+
value = CssConstants.Page;
332+
}
333+
334+
cssBox.BreakAfter = value;
335+
break;
323336
case "page-break-before":
324-
cssBox.PageBreakBefore = value;
337+
case "break-before":
338+
if (value is CssConstants.Always && propName is "page-break-before")
339+
{
340+
value = CssConstants.Page;
341+
}
342+
343+
cssBox.BreakBefore = value;
325344
break;
326345
case "page-break-inside":
327-
cssBox.PageBreakInside = value;
346+
case "break-inside":
347+
cssBox.BreakInside = value;
328348
break;
329349
case "left":
330350
cssBox.Left = value;

src/PeachPDF/PeachPDF.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFrameworks>net8.0</TargetFrameworks>
44
<AssemblyName>PeachPDF</AssemblyName>
55
<PackageId>PeachPDF</PackageId>
6-
<PackageVersion>0.7.22</PackageVersion>
6+
<PackageVersion>0.7.23</PackageVersion>
77
<IncludeSymbols>true</IncludeSymbols>
88
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
99
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>

0 commit comments

Comments
 (0)