Przeglądaj źródła

Fix: the Text.SectionLink element does not work correctly

Marcin Ziąbek 1 rok temu
rodzic
commit
86d2be343c

+ 4 - 1
Source/QuestPDF/Elements/Text/Items/TextBlockSectionLink.cs

@@ -5,6 +5,7 @@ namespace QuestPDF.Elements.Text.Items
 {
     internal sealed class TextBlockSectionLink : TextBlockSpan
     {
+        public IPageContext PageContext { get; set; }
         public string SectionName { get; set; }
         
         public override TextMeasurementResult? Measure(TextMeasurementRequest request)
@@ -14,8 +15,10 @@ namespace QuestPDF.Elements.Text.Items
 
         public override void Draw(TextDrawingRequest request)
         {
+            var targetName = PageContext.GetDocumentLocationName(SectionName);
+            
             request.Canvas.Translate(new Position(0, request.TotalAscent));
-            request.Canvas.DrawSectionLink(SectionName, new Size(request.TextSize.Width, request.TextSize.Height));
+            request.Canvas.DrawSectionLink(targetName, new Size(request.TextSize.Width, request.TextSize.Height));
             request.Canvas.Translate(new Position(0, -request.TotalAscent));
             
             base.Draw(request);

+ 7 - 0
Source/QuestPDF/Elements/Text/TextBlock.cs

@@ -24,6 +24,7 @@ namespace QuestPDF.Elements.Text
         public void ResetState()
         {
             ApplyFontFallback();
+            ApplyPageContextToSectionLinks();
             InitializeQueue();
             CurrentElementIndex = 0;
 
@@ -50,6 +51,12 @@ namespace QuestPDF.Elements.Text
                 Items = Items.ApplyFontFallback().ToList();
                 FontFallbackApplied = true;
             }
+
+            void ApplyPageContextToSectionLinks()
+            {
+                foreach (var sectionLink in Items.OfType<TextBlockSectionLink>())
+                    sectionLink.PageContext = PageContext;
+            }
         }
         
         void SetDefaultAlignment()