日本語フォント埋め込みとファイルサイズ最適化

日本語PDFの鬼門・フォント埋め込みを、サブセット化で軽く確実に行う方法

日本語フォントサブセット化ファイルサイズ埋め込みpdf-lib
読了時間: 8分

はじめに

pdf-libで請求書や納品書を作ろうとすると、多くの人が最初につまずくのが日本語です。英数字はすんなり出るのに、「請求書」と書こうとした瞬間にエラーになる、あるいは文字が全部消えてしまう——そんな経験はないでしょうか。

これはバグではなく、PDFというフォーマットの仕様上の話なんです。この記事では、なぜ日本語がそのままでは出せないのか、そしてどうやってフォントを埋め込み、しかもファイルを重くしすぎずに済ませるのかを解説します。

なぜ日本語がそのまま出せないのか

標準フォントに日本語がない

PDFには「標準14フォント」と呼ばれる、どんなビューアでも表示できる基本フォントが定義されています。ただ、その中身はHelveticaやTimes Romanといった欧文フォントばかり。日本語のグリフ(字形)は一つも含まれていません

pdf-libもこの標準フォントを前提にしているため、初期状態では日本語を描画できません。「あ」や「請」に対応する字形が、そもそもPDFの中に存在しないからです。

埋め込みという解決策

ではどうするか。答えはシンプルで、日本語フォントのファイル自体をPDFの中に同梱することです。これを「フォントの埋め込み」と呼びます。

日本語フォント埋め込みの流れ
フォントファイルを読み込む

日本語対応のフォント(NotoやIPAなど)を用意する

pdf-libに登録する

fontkitを有効にしてフォントを埋め込み可能にする

描画に使う

埋め込んだフォントを指定してテキストを配置

埋め込んでしまえば、そのPDFはどの環境で開いても——相手のPCに日本語フォントが入っていなくても——同じ見た目で表示されます。帳票のように「相手に届ける」書類では、これが安心につながります。

フォントを埋め込むと重くなる問題

数MBのフォントがそのまま乗る

埋め込みには落とし穴があります。日本語フォントは、収録している文字数が膨大です。ひらがな・カタカナ・漢字・記号まで含めると、フォントファイルは数MBに達することも珍しくありません。

これをそのままPDFに埋め込むと、たった1枚の請求書が数MBのファイルになってしまうのです。メール添付やストレージ保管を考えると、これは無視できない問題です。

帳票で実際に使う文字は少ない

ここで発想を変えます。請求書に登場する日本語は、実はそれほど多くありません。「請求書」「御中」「合計」「消費税」、あとは取引先名や商品名くらいです。

数千文字ある日本語フォントのうち、1枚の帳票で使うのはせいぜい数十〜数百文字。使わない文字まで埋め込むのは、明らかに無駄なんです。

サブセット化で軽くする

使う文字だけを取り出す

そこで登場するのが**サブセット化(subsetting)**です。これは、フォントの中から「実際に使う文字の字形だけ」を抜き出して埋め込む技術です。

フルセット vs サブセット
BEFORE
フォント全体を埋め込む

数千文字ぶんの字形が丸ごと乗り、1ファイルが数MB規模に膨らむ

サブセット化
AFTER
使う文字だけ埋め込む

帳票に登場する数十〜数百文字ぶんだけ。ファイルは大幅に軽量化される

pdf-libではfontkitを組み合わせ、埋め込み時にサブセット化を有効にすることで、この最適化が効くようになります。見た目はフルセットとまったく同じで、容量だけが小さくなる——いいとこ取りの手法です。

効果と実務上の注意

サブセット化の効果は劇的です。数MBあったPDFが、数百KB以下にまで落ちることも珍しくありません。大量の帳票を扱う輸入卸の運用では、この差が保管コストと取り回しに直結します。

一点だけ注意があります。サブセット化は「生成時に使う文字」を前提に字形を絞り込むため、あとからPDF内のテキストを別の文字に編集する用途には向きません。ただ帳票は生成したら確定するものなので、実務ではほぼ問題になりませんでした。

まとめ

日本語PDFの鬼門であるフォント埋め込みは、「標準フォントに日本語がない → だから埋め込む → でも重い → サブセット化で軽くする」という流れで整理すると、すっきり理解できます。

  • 標準フォントに日本語の字形は含まれていない
  • 相手の環境に依存せず表示するにはフォントの埋め込みが必要
  • フルセット埋め込みはファイルが重くなる
  • サブセット化で「使う文字だけ」を埋め込めば、見た目そのままで大幅に軽量化できる

この技術があってはじめて、コードによる帳票生成が実用に耐えます。全体像は 請求書・納品書PDFの自動生成 で、帳票に流し込む会社情報の管理は 宛先・自社プロファイルのマスタ管理 で解説しています。