From 0d14d1173fc86bce6f3c8f51235c248f5920b0a0 Mon Sep 17 00:00:00 2001 From: PrinsFrank <25006490+PrinsFrank@users.noreply.github.com> Date: Sat, 3 Oct 2026 16:13:44 +0200 Subject: [PATCH] Cache charWidth for identical textState and transformationMatrix --- src/Document/Object/Decorator/Font.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Document/Object/Decorator/Font.php b/src/Document/Object/Decorator/Font.php index 41484bc6..3a45f62c 100644 --- a/src/Document/Object/Decorator/Font.php +++ b/src/Document/Object/Decorator/Font.php @@ -152,8 +152,13 @@ public function getWidthForChar(int $characterCode, TextState $textState, Transf /** @param list $chars */ public function getWidthForChars(array $chars, TextState $textState, TransformationMatrix $transformationMatrix): float { $totalCharacterWidth = 0; + $charWidthCache = []; foreach ($chars as $char) { - $totalCharacterWidth += $this->getWidthForChar($char, $textState, $transformationMatrix); + if (isset($charWidthCache[$char]) === false) { + $charWidthCache[$char] = $this->getWidthForChar($char, $textState, $transformationMatrix); + } + + $totalCharacterWidth += $charWidthCache[$char]; } return $totalCharacterWidth;