Когда-то emoji в PDF казались декоративной мелочью. Сейчас это не так.
В клиентских документах emoji часто несут смысл:
- В чеке ✅ может означать оплату, 🎁 бонус, ⭐ оценку, 🔥 ограниченное предложение.
- В уведомлении о доставке 📦, 🚚 и 🙏 быстро показывают состояние.
- В истории поддержки могут быть сообщения из WhatsApp, LINE, KakaoTalk или WeChat, где emoji является частью доказательной записи.
- В сертификате, купоне, билете или loyalty card 🏆, 🎓, 🎉 и 💯 могут быть частью визуального языка.
Если emoji исчезают, превращаются в пустые квадраты или раздувают PDF на сотни килобайт, документ перестает быть точным отражением исходного содержания. При больших объемах это уже вопрос продукта, хранения, отправки, архивирования и иногда compliance.
“Поддержка emoji” не является одной галочкой. PDF-генератор может полагаться на шрифты браузера или ОС, требовать настройки emoji-шрифта, превращать emoji в изображения или векторную графику либо встраивать данные цветного шрифта. Все варианты могут работать, но цена у них разная.
Практическая проблема: поддержка против размера
Цветные emoji сложны для PDF, потому что это не обычные черно-белые глифы. PDF Association хорошо формулирует проблему: у OpenType color fonts есть несколько конкурирующих форматов, но они не поддерживаются PDF так же прямо, как традиционные контурные шрифты.
Поэтому движок выбирает представление:
- использовать цветные шрифты браузера или ОС;
- встраивать или подмножать данные emoji-шрифта;
- переводить emoji в изображения или векторную графику;
- либо откатываться к монохромным глифам, missing-glyph boxes или plain text.
На одном-двух emoji разница может быть незаметна. В чеках, купонах, экспортированных чатах и архивах поддержки с большим количеством emoji она быстро становится заметной.
Небольшой тест: 50 популярных emoji
20 мая 2026 года мы провели локальный smoke test на одной и той же A4-странице:
- версия только с обычным текстом;
- версия с 50 популярными emoji в тексте;
- Chrome 148 headless print-to-PDF;
- локальная генерация gPdf с тем же набором emoji.
Это не универсальный benchmark для всех документов и версий движков. Это простая проверка, показывающая поведение размера файла при большом числе разных цветных emoji.
| Генератор | Обычный PDF | Та же страница с 50 emoji | Прирост | Отношение |
|---|---|---|---|---|
| Chrome 148 print-to-PDF | 31,250 bytes | 435,630 bytes | +404,380 bytes | 13.94x |
| gPdf local generation | 8,766 bytes | 43,466 bytes | +34,700 bytes | 4.96x |
Chrome встроил subsets AppleColorEmoji Type 3. Это валидный способ показать emoji, но влияние на размер файла в этой выборке очевидно.
gPdf не встраивал полный цветной emoji-шрифт. Версия с emoji больше plain text версии, как и должно быть: цветная графика должна где-то храниться. Разница в том, что рост связан с emoji, реально использованными в документе, а не с широкой браузерной или системной шрифтовой цепочкой.
Вопрос закупки звучит не как “виден ли один смайлик на моем ноутбуке?”, а так:
Что происходит, когда документ содержит десятки разных emoji и PDF генерируется в реальной серверной среде?
Как другие PDF-генераторы работают с emoji
Честное сравнение не звучит как “все остальные не умеют”. Многие зрелые инструменты поддерживают цветные emoji. Важно, как именно они это делают и что это означает для настройки, повторяемости и размера результата.
Puppeteer, Chrome и Chromium-based API
Puppeteer использует PDF-путь Chrome. Документация описывает page.pdf() как генерацию PDF страницы с media type print, а guide отмечает, что по умолчанию метод ожидает загрузки шрифтов. Это полезно, если исходный документ уже является веб-страницей.
Для структурированных документов с большим количеством emoji цена в зависимости от браузера и шрифтового окружения. В нашем локальном тесте Chrome корректно показал emoji, но файл вырос с 31 KB до 436 KB.
Это не делает Puppeteer неправильным выбором. Это прежде всего browser automation tool. Если нужно снять существующую страницу, он подходит. Если нужны компактные и повторяемые чеки, labels, tickets, statements или support records, браузерный путь может быть тяжелым.
DocRaptor и Prince
DocRaptor оборачивает Prince, а Prince является сильным HTML-to-PDF движком. Он особенно хорош, когда вход действительно HTML/CSS и документ требует сложных paged-media возможностей.
В анонсе Pipeline 9 / Prince 14 от DocRaptor прямо указана поддержка цветных emoji. В release notes Prince 14 также перечислены SVG-in-OpenType, CBLC/CBDT color emoji fonts, Apple sbix и emoji tag sequences. Поэтому корректный тезис не “DocRaptor не умеет emoji”.
Более точная граница: DocRaptor/Prince это качественный HTML-to-PDF путь; gPdf это structured JSON-to-PDF путь. Для emoji-heavy структурированных документов, где данные уже существуют как данные, gPdf не заставляет прогонять задачу через универсальный HTML/CSS renderer.
PDFreactor
PDFreactor также поддерживает цветные emoji. Его manual говорит, что color emojis используются по умолчанию, и поддерживаются CBDT, SBIX и OpenType-SVG.
Тот же manual указывает ограничения: larger PDF size при OpenType-SVG и отсутствие selection/copying в этом color-font path. Это именно тот tradeoff, который команда должна понимать до того, как считать “emoji support” ответом да/нет.
iText и pdfHTML
iText может генерировать emoji, если у документа есть font program, способный рисовать эти символы. Официальный guide pdfHTML показывает ожидаемый путь: добавить emoji-capable font в FontProvider, затем выполнить conversion.
Это удобно для команды, которой нужен SDK-level control. Но настройка шрифтов, тестирование, deployment и дальнейшее обслуживание остаются на стороне приложения.
Почему важна полнота покрытия
Легко протестировать не то. Если renderer показывает 😂, это не значит, что он справится с emoji, которые реально присылают пользователи.
В реальности встречаются:
- variation selectors;
- модификаторы оттенка кожи;
- zero-width-joiner sequences;
- флаги и tag sequences;
- emoji рядом с CJK, Arabic, Latin и другими письменностями;
- старые PDF-viewers и корпоративные document pipelines.
В клиентских документах consistency является частью продукта. Support transcript не должен показывать разные emoji в зависимости от сервера. Чек не должен показывать status mark на macOS и квадрат в Linux container. Marketplace не должен требовать от каждого продавца установки одной и той же emoji font stack.
Позиция gPdf простая: color emoji должны работать в generated PDFs без установки emoji-шрифтов клиентом, без настройки browser runtime и без принятия больших файлов как нормы.
Где emoji особенно важны
Emoji-heavy PDF встречаются не только в consumer marketing. Они есть и в операционных системах.
| Тип документа | Почему emoji важны |
|---|---|
| Чеки и купоны | Status, reward, rating и promotion являются частью customer experience. |
| Подтверждения доставки и бронирования | Состояния confirmed, packed, shipped, delivered легче считываются. |
| Записи поддержки | Chat export теряет тон и evidence, если emoji удалены. |
| Социальные и community архивы | Emoji являются частью разговора. |
| Сертификаты и badges | Trophy, graduation и celebration symbols могут быть частью дизайна. |
| Многоязычные клиентские PDF | Emoji могут передавать status между языками. |
Поэтому размер файла важен. Один раз +400 KB кажется мелочью. При 100,000 чеках в месяц это уже storage, bandwidth, email deliverability, mobile download time и archive cost. На масштабе chat export эффект еще сильнее.
Где подходит gPdf
gPdf не пытается быть полноценным браузером и не заменяет все HTML-to-PDF движки. Если source document это произвольная веб-страница, сложная editorial layout или dashboard с JavaScript charts, используйте браузер или зрелый HTML-to-PDF engine.
gPdf создан для другого случая:
- вход уже является structured data;
- выход должен быть predictable;
- система работает на high volume;
- PDF должен оставаться compact;
- один и тот же payload должен стабильно генерироваться в разных средах;
- emoji, CJK, barcodes, PDF/A и metadata являются product requirements.
В такой нагрузке emoji support должен быть незаметным. Нужно иметь возможность добавить status, sentiment и customer-language cues в документ, не превращая PDF generation в проект установки шрифтов.
Что спросить у любого PDF-вендора
При оценке emoji support просите больше, чем screenshot:
- Можете ли вы сгенерировать PDF с 50 разными common emoji?
- Какой размер файла с ними и без них?
- Зависит ли output от operating-system fonts?
- Нужно ли клиенту устанавливать или регистрировать emoji font?
- Что происходит с ZWJ sequences, flags и variation selectors?
- Остается ли output стабильным после runtime upgrades?
- Поведение emoji документировано или является побочным эффектом host environment?
Ответы покажут, является ли emoji support реальной product capability или случайным свойством runtime.
Sources
- PDF Association: OpenType color fonts in PDF
- Puppeteer: Page.pdf()
- Puppeteer: PDF generation guide
- DocRaptor: Pipeline 9 with color emoji and Prince 14
- Prince 14 release notes
- PDFreactor manual: color fonts and emojis
- iText pdfHTML: using emojis
- Twemoji: license and attribution
Примечание: gPdf использует графику Twemoji. Графика Twemoji защищена copyright 2019 Twitter, Inc и других contributors и лицензирована по CC BY 4.0.