Я смотрю, есть ли способ, в PHP, чтобы определить, существует ли глиф для данного символа в шрифте.
Мой пример использования таков: я генерирую маленькие изображения с помощью Imagick — по сути, маленькие «значки», учитывая предоставленную пользователем информацию, и я бы очень хотел поддержать полный Unicode, включая emoji и еще много чего. На данный момент у меня есть несколько шрифтов, каждый из которых хорошо поддерживает «класс» символов (например, мой «основной» шрифт — Futura, и у меня есть Symbola для эмодзи и других символов, и мне может понадобиться добавить другой шрифт для Восточные глифы), но они не имеют достаточного перекрытия, чтобы использовать только один шрифт.
Я видел сообщение это предполагает, что коммерческое дополнение PDFlib может сделать это, но я хотел бы избежать коммерческих дополнений, если смогу. Я также видел, что надстройка PECL PS имеет ps_symbol_name (), но для этого требуется файл AFM, и, насколько я могу судить, я не могу использовать это с многобайтовыми шрифтами.
В Imagick я позаботился о переключении шрифтов — мне просто нужно знать, как программно определить, какой шрифт использовать для данного символа. Спасибо!
В зависимости от сложности того, что вам нужно сделать, посмотрите на https://github.com/pomax/php-font-parser, который я написал для той же цели (хотя с использованием gd
а не имиджмейджик).
Обратите внимание, что поддерживаются только CMAP 4 и 12, которые охватывают UCS-2 и UCS-4. Более высокие кодовые точки, вероятно, не будут найдены, даже если они существуют в шрифте (в основном потому, что когда я писал это, Unicode еще не был загрязнен эмодзи).
Кроме того, вы можете использовать что-то вроде AdobeFDK tx
программа, запускающая его против вашего шрифта через Оболочка-Exec или тому подобное, чтобы увидеть, если он находит определение глифа, или вы можете запустить весь шрифт через ТТХ, сохраните XML-таблицу таблицы CMAP как отдельный файл, а затем просто выполните проверку на предмет этого (это очень надежное решение, если ваш шрифт вряд ли сильно изменится)
Вот еще одно решение для проверки, поддерживается ли символ UTF-8 заданным шрифтом (OTF / TTF) с использованием PHP.
Я хотел бы предложить использовать существующую библиотеку, как PDF-шрифт Пб извлечь список поддерживаемых кодовых точек из вашего шрифта.
Чтобы преобразовать вашу строку UTF-8 в кодовые точки, вы можете использовать этот фрагмент кода.
Вот полный пример для проверки того, что все буквы данной строки поддерживаются шрифтом OTF. (нужен php-font-lib, шрифт не включен)
Этот подход также может быть использован в качестве основы для простого подхода для определения лучшего шрифта для отрисовки заданной строки UTF-8: