PDF の絵文字は、以前なら見た目だけの問題に見えました。今は違います。
現代の顧客向け文書では、絵文字が意味そのものを持つことがよくあります。
- 領収書では ✅ が支払い済み、🎁 が特典、⭐ が評価、🔥 が期間限定オファーを示すことがあります。
- 配送通知では 📦、🚚、🙏 が状態をすばやく伝える手がかりになります。
- カスタマーサポートの記録には WhatsApp、LINE、KakaoTalk、WeChat のメッセージが含まれ、絵文字が証跡の一部になることがあります。
- 証明書、バッジ、クーポン、チケット、ロイヤルティカードでは 🏆、🎓、🎉、💯 がビジュアルアイデンティティの一部になることがあります。
これらの絵文字が消えたり、豆腐文字になったり、PDF を数百 KB も大きくしたりすると、その文書は元の内容を忠実に表現できません。大量生成するシステムでは、これはプロダクトの問題であり、ストレージの問題であり、ときにはコンプライアンス上の問題にもなります。
難しいのは、「絵文字対応」が単純なチェック項目ではないことです。PDF 生成器は、ブラウザフォントに委ねることも、呼び出し側に絵文字フォント設定を求めることも、絵文字を画像へ変換することも、カラーフォントデータを PDF に埋め込むこともできます。どの方法でも動く可能性はあります。ただし、トレードオフはそれぞれ異なります。
実務上の課題:対応とサイズ
カラー絵文字が PDF で難しいのは、通常の白黒グリフではないからです。PDF Association は、この根本的な問題をうまく整理しています。OpenType のカラーフォントには複数の競合フォーマットがありますが、それらは従来のアウトラインフォントのように PDF へ単純かつネイティブに入るものではありません。
そのため、レンダラーは表現方法を選ぶ必要があります。
- ブラウザや OS のカラー フォントを使う。
- カラー絵文字フォントのデータを埋め込む、またはサブセット化する。
- 絵文字を画像またはベクターアートワークへ変換する。
- あるいはモノクログリフ、欠落グリフの四角、プレーンテキストへ切り替わる。
絵文字が 1、2 個なら差は小さいかもしれません。絵文字が多い領収書、クーポン、チャット履歴、サポートアーカイブでは、大きな差になります。
小さな検証:一般的な絵文字 50 個
2026 年 5 月 20 日、同じ 1 ページの A4 サンプルを使ってローカルのスモークテストを行いました。
- 通常テキストだけの版。
- 本文に一般的な絵文字 50 個を含む版。
- Chrome 148 headless print-to-PDF。
- 同じ 50 個の一般的な絵文字セットを使った gPdf ローカルレンダリング。
これは、あらゆる文書やあらゆるエンジンバージョンに対する汎用ベンチマークではありません。多数の異なるカラー絵文字が入ったときに、ファイルサイズの挙動がどう現れるかを見るための小さな確認です。
| レンダラー | 通常の PDF | 同じページに絵文字 50 個 | 増加量 | 倍率 |
|---|---|---|---|---|
| Chrome 148 print-to-PDF | 31,250 バイト | 435,630 バイト | +404,380 バイト | 13.94倍 |
| gPdf ローカルレンダリング | 8,766 バイト | 43,466 バイト | +34,700 バイト | 4.96倍 |
Chrome の出力には AppleColorEmoji Type 3 のサブセットが埋め込まれていました。絵文字を表示するための有効な方法ですが、このサンプルではファイルサイズへの影響がはっきり出ています。
gPdf の出力は、完全なカラー絵文字フォントを埋め込んでいません。絵文字の多い版が通常版より大きくなるのは当然です。カラーのアートワークは、どこかに入れる必要があります。違いは、ブラウザや OS 側の幅広いフォント処理に引きずられるのではなく、文書内で実際に使った絵文字アートワークに応じて出力が増える点です。
調達時に見るべき問いは、「自分のノート PC で笑顔の絵文字が 1 つ表示されるか」ではありません。見るべきなのは次です。
実際に PDF を生成するシステム上で、文書に数十種類の絵文字が入ったとき何が起きるか?
他の PDF 生成器は絵文字をどう扱うか
正直な比較は、「他社は全部できない」ではありません。成熟した PDF ツールの中には、カラー絵文字に対応しているものが複数あります。重要なのは、どう対応しているか、そしてそれが設定、再現性、出力サイズに何を意味するかです。
Puppeteer、Chrome、Chromium 系 API
Puppeteer は Chrome の PDF 出力経路を使います。公式ドキュメントでは page.pdf() をページを PDF として印刷するものとして説明しており、デフォルトでフォントの読み込みを待つとも記載されています。情報の正本がすでに Web ページである場合には便利です。
絵文字の多い構造化文書では、出力がブラウザとフォント環境に依存する点がトレードオフになります。今回のローカルサンプルでは Chrome は絵文字を正しく表示しましたが、ファイルサイズは 31 KB から 436 KB に増えました。
これは Puppeteer が間違っているという意味ではありません。Puppeteer はまずブラウザ自動化ツールです。既存の Web ページを取り込みたいなら適しています。一方で、コンパクトで再現性のある領収書、ラベル、チケット、明細、サポート記録を生成したい場合、ブラウザ経路は重い答えになることがあります。
DocRaptor と Prince
DocRaptor は Prince をラップしており、Prince は強力な HTML から PDF へのエンジンです。入力が本当に HTML/CSS で、文書に複雑なページメディア機能が必要な場合には特に優れています。
DocRaptor の Pipeline 9 / Prince 14 の告知には、カラー絵文字対応が明記されています。Prince 14 のリリースノートにも、SVG-in-OpenType、CBLC/CBDT color emoji fonts、Apple sbix、emoji tag sequences の対応が挙げられています。したがって、正しい主張は「DocRaptor は絵文字を描画できない」ではありません。
より正確な境界はこうです。DocRaptor/Prince は高品質な HTML から PDF への経路です。gPdf は構造化 JSON から PDF への経路です。入力がすでにデータとして存在する、絵文字の多い構造化文書では、gPdf なら問題を汎用 HTML/CSS レンダラーへ押し込まずに済みます。
PDFreactor
PDFreactor もカラー絵文字をサポートしています。マニュアルでは、カラー絵文字がデフォルトで使われ、CBDT、SBIX、OpenType-SVG などのカラーフォント形式をサポートすると説明されています。
同じマニュアルは、カラーフォントの制限も示しています。OpenType-SVG を使うと PDF サイズが大きくなり、そのカラーフォント経路では選択やコピーができません。これは、チームが「絵文字対応」を yes/no の機能として扱う前に理解しておくべきトレードオフそのものです。
iText と pdfHTML
iText は、その文字を描画できるフォントプログラムが文書にある場合、絵文字を描画できます。公式の pdfHTML 絵文字ガイドは、絵文字対応フォントを FontProvider に追加してから変換する、という想定パターンを示しています。
SDK レベルで制御したいチームには強力です。一方で、フォント設定、テスト、デプロイ、長期保守はアプリケーションチームが担うことになります。
絵文字の対応範囲が重要な理由
間違ったものをテストするのは簡単です。レンダラーが 😂 を表示できても、ユーザーが実際に送る絵文字を扱えるとは限りません。
現実の絵文字利用には、次のようなものが含まれます。
- テキスト表示と絵文字表示が分かれる異体字セレクタ。
- 肌色修飾子。
- ゼロ幅接合子(ZWJ)シーケンス。
- 国旗とタグシーケンス。
- CJK、Arabic、Latin など他の文字体系との混在。
- 古い PDF ビューアと企業内の文書処理経路。
顧客文書では、一貫性はプロダクトの一部です。サポート履歴が、どのサーバーで生成されたかによって違う絵文字を表示してはいけません。領収書が macOS ではステータスマークとして表示され、Linux コンテナでは四角になってはいけません。マーケットプレイスが、すべての加盟店に同じ絵文字フォント一式のインストールを求めるべきでもありません。
gPdf の立場はシンプルです。生成される PDF では、顧客に絵文字フォントのインストールやブラウザ実行環境の調整を求めたり、大きな出力ファイルを当然の前提として受け入れさせたりせずに、カラー絵文字が動くべきです。
絵文字が特に重要になる文書
絵文字の多い PDF は、消費者向けマーケティングだけに限られません。業務システムにも出てきます。
| 文書タイプ | 絵文字が重要な理由 |
|---|---|
| 領収書とバウチャー | ステータス、特典、評価、プロモーションの手がかりは顧客体験の一部です。 |
| 配送・予約確認 | 確定、梱包済み、出荷済み、配達済みといった状態変化を読み取りやすくできます。 |
| カスタマーサポート記録 | 絵文字が消えたり置き換わったりすると、チャット履歴の意味が失われます。 |
| コミュニティやソーシャルのアーカイブ | 絵文字は飾りではなく、会話の一部です。 |
| 証明書と達成バッジ | トロフィー、卒業、祝福の記号がデザインの一部になることがあります。 |
| 多言語の顧客向け PDF | 絵文字は、言語をまたいで状態をすばやく伝えることがあります。 |
だからこそ、ファイルサイズが重要です。1 回あたり 400 KB の増加は大きく見えないかもしれません。月 100,000 件の領収書では、ストレージ、帯域、メール到達率、モバイルでのダウンロード時間、アーカイブコストの問題になります。チャット履歴のエクスポート規模では、さらに大きな問題になります。
gPdf が合う領域
gPdf は完全なブラウザを目指しているわけではなく、あらゆる HTML から PDF へのエンジンの代替でもありません。元文書が任意の Web ページ、複雑な編集レイアウト、JavaScript で描画されるチャートを含むライブダッシュボードであるなら、ブラウザまたは成熟した HTML から PDF へのエンジンを使うべきです。
gPdf は、別のケースのために作られています。
- 文書の入力がすでに構造化データである。
- 出力に予測可能性が必要である。
- システムが大量処理で動く。
- PDF をコンパクトに保つ必要がある。
- 同じ送信データを、環境をまたいで一貫してレンダリングしたい。
- 絵文字、CJK、バーコード、PDF/A、メタデータが後付けではなく製品要件である。
この種の処理では、絵文字対応は当たり前に動くべきです。状態、感情、顧客が使う言葉の手がかりを文書に入れるために、PDF 生成をフォントインストールのプロジェクトにする必要はありません。
PDF ベンダーに聞くべきこと
絵文字対応を評価するときは、スクリーンショット以上のものを求めてください。
- 一般的な絵文字 50 種類を含む PDF をレンダリングできますか?
- それらの絵文字がある場合とない場合で、ファイルサイズはどう変わりますか?
- 出力は OS フォントに依存しますか?
- 顧客が絵文字フォントをインストールまたは登録する必要がありますか?
- ZWJ シーケンス、国旗、異体字セレクタはどう扱われますか?
- ランタイムのアップグレード後も出力は安定しますか?
- 絵文字の挙動は文書化されていますか。それともホスト環境からたまたま継承されたものですか?
答えを見れば、絵文字対応が本物のプロダクト機能なのか、ランタイムの偶然の副作用なのかが分かります。
出典
- 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 graphics を使用しています。Twemoji graphics are copyright 2019 Twitter, Inc and other contributors and are licensed under CC BY 4.0.