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