Перейти к содержимому
pdftools.kz
Редакторы

Казахские буквы в PDF: почему вместо них квадраты

Казахский алфавит — это русская кириллица плюс девять пар: Әә, Ғғ, Ққ, Ңң, Өө, Ұұ, Үү, Һһ, Іі. Шрифт, уверенно покрывающий русский, эти девять пар может не содержать вовсе, и тогда просмотрщик рисует на их месте пустой прямоугольник. Вторая беда встречается при создании файла: базовые шрифты PDF не кодируют кириллицу в принципе, и попытка написать хоть слово обрывается ошибкой.

Локально в браузередо 100 МБбез регистрации

Коротко о цифрах

Девять пар сверх русского алфавита
Әә Ғғ Ққ Ңң Өө Ұұ Үү Һһ Іі — восемнадцать знаков
Кодировка WinAnsi
ни одной кириллической позиции — падает и на русском тексте
Встроенный шрифт
Roboto, четыре начертания, 1031 глиф в обычном; все девять пар на месте
Способ встраивания
сабсет — только использованные глифы
Обязательный порядок
регистрация fontkit до встраивания, иначе ошибка на первом вызове

Две разные поломки, которые путают между собой

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

Ошибка при создании файла выглядит иначе: инструмент отказывается написать текст и сообщает, что кодировка не справляется. Причина в том, что четырнадцать базовых шрифтов PDF используют кодировку WinAnsi, а в ней кириллических позиций нет ни одной. Не «казахских букв не хватает» — не хватает всей кириллицы, включая обычное русское слово.

Как это решено у нас

  • Вместо базового шрифта в документ встраивается Roboto: четыре начертания лежат на нашем же домене и отдаются вместе со страницей.
  • Перед встраиванием регистрируется fontkit — без этого шага pdf-lib не умеет работать с внешним шрифтом и падает на первом же вызове.
  • Шрифт встраивается сабсетом: в файл попадают только те глифы, которые реально использованы, поэтому вес растёт незначительно.
  • Все девять казахских пар в этих начертаниях присутствуют — проверено разбором самих файлов шрифта, а не на глаз.
  • Раньше шрифты подтягивались со стороннего адреса, и политика безопасности страницы блокировала запрос: происходил молчаливый откат на базовый шрифт, а за ним ошибка кодировки. Собственный домен убрал этот класс отказов целиком.

Где встроенный шрифт спасает положение

  • Водяной знак с казахским текстом — самый частый случай: без встраивания операция обрывалась бы на первой же букве.
  • Номера страниц вида «Бет 4»: слово перед числом подставляется на языке интерфейса.
  • Дата рядом с подписью: она рисуется текстом, а не картинкой, поэтому кодировка для неё важна так же.
  • Экспорт из редактора PDF, где вы правите или дописываете текст на казахском.
  • Запекание форм: значения полей на казахском перерисовываются нашим шрифтом, тогда как стандартный путь на них падает.

Частые вопросы

Почему вместо ә и ғ показываются пустые квадраты?

Шрифт не встроен в файл, и просмотрщик подставил свой, в котором этих знаков нет. Пустой прямоугольник — это стандартный способ показать отсутствующий глиф. На другом устройстве с другим набором шрифтов тот же файл может выглядеть иначе.

Что означает ошибка про WinAnsi при добавлении текста?

Что текст пытались написать базовым шрифтом PDF, а его кодировка кириллицу не содержит вообще. Лечится только встраиванием шрифта с нужными глифами: подобрать другую кодировку из базового набора невозможно, кириллицы там нет ни в одной.

Как проверить, встроен ли шрифт в мой файл?

Откройте свойства документа в просмотрщике: там перечислены шрифты и отмечено, встроен ли каждый. Встроенный шрифт выглядит одинаково везде, невстроенный зависит от того, что найдётся на устройстве получателя.

Сильно ли встраивание шрифта увеличивает файл?

Незначительно, потому что встраивается не весь шрифт, а сабсет — только те знаки, которые встречаются в добавленном тексте. Для водяного знака или номеров страниц это десятки знаков, и прирост веса теряется на фоне самих страниц.

Рядом

Частые задачи с этим инструментом