diff --git a/tcpdf/TCPDF.php b/tcpdf/TCPDF.php index 2fe8b72..ab4edc2 100644 --- a/tcpdf/TCPDF.php +++ b/tcpdf/TCPDF.php @@ -6256,11 +6256,11 @@ class TCPDF { $charWidth = $charsWidth[$i]; if (($c != 160) && (($c == 173) - || \preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) + || \preg_match($this->re_spaces, TCPDF_FONTS::$cache_unichr[$c] ?? (TCPDF_FONTS::$cache_unichr[$c] = TCPDF_FONTS::unichr($c, $this->isunicode))) || (($c == 45) && ($i > 0) && ($i < ($length - 1)) - && @\preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i - 1)], $this->isunicode)) - && @\preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) + && @\preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::$cache_unichr[$chars[($i - 1)]] ?? (TCPDF_FONTS::$cache_unichr[$chars[($i - 1)]] = TCPDF_FONTS::unichr($chars[($i - 1)], $this->isunicode))) + && @\preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::$cache_unichr[$chars[($i + 1)]] ?? (TCPDF_FONTS::$cache_unichr[$chars[($i + 1)]] = TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode))) ) ) ) { @@ -6413,7 +6413,7 @@ class TCPDF { $nb = \count($chars); // replacement for SHY character (minus symbol) $shy_replacement = 45; - $shy_replacement_char = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode); + $shy_replacement_char = TCPDF_FONTS::$cache_unichr[$shy_replacement] ?? (TCPDF_FONTS::$cache_unichr[$shy_replacement] = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode)); // widht for SHY replacement $shy_replacement_width = $this->GetCharWidth($shy_replacement); // page width diff --git a/tcpdf/include/TCPDF_FONTS.php b/tcpdf/include/TCPDF_FONTS.php index 80e4da5..41b6f06 100644 --- a/tcpdf/include/TCPDF_FONTS.php +++ b/tcpdf/include/TCPDF_FONTS.php @@ -51,6 +51,7 @@ class TCPDF_FONTS { * @protected */ protected static $cache_uniord = []; + public static $cache_unichr = []; /** * Convert and add the selected TrueType or Type1 font to the fonts folder (that must be writeable). @@ -1724,7 +1725,13 @@ class TCPDF_FONTS { * @public static */ public static function UTF8ArrayToUniArray($ta, $isunicode=true) { - return \array_map(['TCPDF_FONTS', 'unichr'], $ta); + $temp = []; + foreach ($ta as $t) { + $temp[] = self::$cache_unichr[$t] ?? (self::$cache_unichr[$t] = self::unichr($t, $isunicode)); + } + + //return \array_map(['TCPDF_FONTS', 'unichr'], $ta); + return $temp; } /** @@ -1745,7 +1752,7 @@ class TCPDF_FONTS { } $string = ''; for ($i = $start; $i < $end; ++$i) { - $string .= self::unichr($strarr[$i], $unicode); + $string .= self::$cache_unichr[$strarr[$i]] ?? (self::$cache_unichr[$strarr[$i]] = self::unichr($strarr[$i], $unicode)); } return $string; }