Могу ли я использовать «старые» (без подкладки) цифры в TCPDF? - PullRequest
0 голосов
/ 22 октября 2019

Unicode не различает подкладные цифры (которые имеют те же пропорции, что и заглавные буквы, и полезны в таблицах, но выделяются в бегущем тексте) и не подкладные цифры, которые больше похожи на строчные буквы, с восходящими и нисходящимитак как считает их вариантами друг друга. Многие шрифты, тем не менее, имеют оба набора цифр и предоставляют возможность выбирать между ними. Есть ли способ добиться этого в TCPDF?

В идеале, я хотел бы, чтобы нумерованные списки использовали цифры подкладки, а числа в бегущем тексте - без подкладки, а почтовые индексы (британские и ирландские почтовые индексы - буквенно-цифровые) дляиспользуйте цифры без подкладки и маленькие заглавные буквы. Это может быть достигнуто в LaTeX с помощью \oldstylenums{1234567890}.

Единственный похожий вопрос, который я мог найти, касался настройки метрики шрифта в TCPDF, чтобы не выравнивающие фигуры выглядели выравнивающими . В идеале я хотел бы использовать оба, из того же шрифта и в том же документе. Предоставляет ли TCPDF доступ к вариациям символов OpenType? (Справедливое предупреждение: я немного не в себе.)

1 Ответ

1 голос
/ 23 октября 2019

К сожалению, насколько мне известно, 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);

Результат по-прежнему доступен для поиска, хотя копирование и вставка немного странные. [Примечание: один выключен, потому что я хотел посмотреть, смогу ли я внести изменения в расположение глифов.]

Portional vs Free Sans' typical fixed-width numerals.

Вернемся к вашему конкретному случаю,В качестве альтернативы, если вы хотите ослабить требование «того же шрифта», было бы создать отдельный производный шрифт с вариантами глифов, перезаписывая стандартные цифры и переключаясь на него в тех случаях, когда они вам нужны. Я не искал, но могут быть уже существующие инструменты, которые могут автоматически сделать это для вас. Контент полностью сохранит свое семантическое значение, и код может быть немного чище за счет эффективного встраивания двух копий одного шрифта.

...