К сожалению, насколько мне известно, TCPDF не поддерживает варианты OpenType. Например, если посмотреть на файл объявления шрифта для freesans
, вариантные глифы pnum
даже не включены в массив ширины символов.
Однако вы можете скопировать вариантные глифы в диапазон Юникода. с помощью шрифта и сопоставления символов в контекстах, которые вы хотите использовать. Например, если вы не используете глифы подстрочных цифр, они являются хорошими кандидатами, так как поиск, кажется, все еще находит их в нескольких из читателей PDF, которые я тестировал.
Чтобы у меня было что проверить,запустил аналогичный сценарий: используя Free Sans, но в некоторых местах хотел использовать пропорциональные числа с одним и тем же файлом шрифта. Я открыл шрифт Free Sans с помощью FontForge, просмотрел информацию о глифе, чтобы увидеть, какие варианты были доступны для нулевого глифа, использовал это, чтобы найти набор pnum
глифов, а затем скопировал их на нижние индексы. (u2080 - u2089) Диапазон является произвольным, поэтому, если вы используете эти глифы, например, есть диапазон частного использования, хотя он уничтожает возможности поиска без каких-либо дополнительных шагов.
Затем в TCPDF просто запустите строкузамените буквенно-цифровые строки, на которые я хотел повлиять.
$pdf->writeHTMLCell(0, 0, '', '', '<span style="font-family: freesansmod">H90173A8301X5</span>', 0, 1, 0, true, '', true);
//I feel like there's a shorter way to write this...
$special_numbers = str_replace(['0','1','2','3','4','5','6','7','8','9'],
["\u{2080}", "\u{2081}", "\u{2082}", "\u{2083}",
"\u{2084}", "\u{2085}", "\u{2086}", "\u{2087}",
"\u{2088}", "\u{2089}"], 'H90173A8301X5');
$pdf->writeHTMLCell(0, 0, '', '', '<span style="font-family: freesansmod">'.$special_numbers.'</span>', 0, 1, 0, true, '', true);
Результат по-прежнему доступен для поиска, хотя копирование и вставка немного странные. [Примечание: один выключен, потому что я хотел посмотреть, смогу ли я внести изменения в расположение глифов.]
Вернемся к вашему конкретному случаю,В качестве альтернативы, если вы хотите ослабить требование «того же шрифта», было бы создать отдельный производный шрифт с вариантами глифов, перезаписывая стандартные цифры и переключаясь на него в тех случаях, когда они вам нужны. Я не искал, но могут быть уже существующие инструменты, которые могут автоматически сделать это для вас. Контент полностью сохранит свое семантическое значение, и код может быть немного чище за счет эффективного встраивания двух копий одного шрифта.