diff --git a/QuestPDF.Examples/TextExamples.cs b/QuestPDF.Examples/TextExamples.cs index ef12e96..a375392 100644 --- a/QuestPDF.Examples/TextExamples.cs +++ b/QuestPDF.Examples/TextExamples.cs @@ -267,5 +267,30 @@ namespace QuestPDF.Examples }); }); } + + [Test] + public void MeasureIssueWhenSpaceAtLineEnd() + { + // issue 135 + + RenderingTest + .Create() + .ProduceImages() + .ShowResults() + .RenderDocument(container => + { + container.Page(page => + { + page.Margin(50); + page.Background(Colors.White); + + page.Size(PageSizes.A4); + + page.Content().Text( + "This is a specially crafted sentence with a specially chosen length for demonstration of the bug that occurs ;;;;;. ", + TextStyle.Default.Size(11)); + }); + }); + } } } \ No newline at end of file diff --git a/QuestPDF/Elements/Text/Items/TextBlockSpan.cs b/QuestPDF/Elements/Text/Items/TextBlockSpan.cs index 525e11f..706a806 100644 --- a/QuestPDF/Elements/Text/Items/TextBlockSpan.cs +++ b/QuestPDF/Elements/Text/Items/TextBlockSpan.cs @@ -17,7 +17,7 @@ namespace QuestPDF.Elements.Text.Items public virtual TextMeasurementResult? Measure(TextMeasurementRequest request) { var cacheKey = (request.StartIndex, request.AvailableWidth); - + if (!MeasureCache.ContainsKey(cacheKey)) MeasureCache[cacheKey] = MeasureWithoutCache(request); @@ -52,7 +52,7 @@ namespace QuestPDF.Elements.Text.Items } // start breaking text from requested position - var text = Text.Substring(startIndex); + var text = Text.AsSpan().Slice(startIndex); var textLength = (int)paint.BreakText(text, request.AvailableWidth + Size.Epsilon); @@ -65,7 +65,7 @@ namespace QuestPDF.Elements.Text.Items // break text only on spaces if (textLength < text.Length) { - var lastSpaceIndex = text.Substring(0, textLength).LastIndexOf(space) - 1; + var lastSpaceIndex = text.Slice(0, textLength).LastIndexOf(space) - 1; if (lastSpaceIndex <= 0) { @@ -78,7 +78,7 @@ namespace QuestPDF.Elements.Text.Items } } - text = text.Substring(0, textLength); + text = text.Slice(0, textLength); var endIndex = startIndex + textLength; var nextIndex = endIndex; @@ -87,7 +87,8 @@ namespace QuestPDF.Elements.Text.Items nextIndex++; // measure final text - var width = paint.MeasureText(text); + var finalText = text.TrimEnd(); + var width = paint.MeasureText(finalText); return new TextMeasurementResult { diff --git a/QuestPDF/QuestPDF.csproj b/QuestPDF/QuestPDF.csproj index 12f89a5..550b9c2 100644 --- a/QuestPDF/QuestPDF.csproj +++ b/QuestPDF/QuestPDF.csproj @@ -4,7 +4,7 @@ MarcinZiabek CodeFlint QuestPDF - 2022.2.5 + 2022.2.6 QuestPDF is an open-source, modern and battle-tested library that can help you with generating PDF documents by offering friendly, discoverable and predictable C# fluent API. $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/Resources/ReleaseNotes.txt")) 9