1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PDF-LIBでフォントをサブセット化

Last updated at Posted at 2022-07-06

PDF-LIB

PDFを生成するAPIを開発することになり、今回はPDF-LIBを使ってみることにしました。

発生した問題

今回はテンプレートとして用意されているPDFに対して文字や線を配置していくような処理で、2日ほどの作業でAPIが動作しました。デプロイして動作確認をしていると、PDFのファイルサイズが極端に大きくなっていることに気づきました。テンプレートのPDFは300KB程度なのに対して、出力されたPDFは14MBになっていました。

フォントのサブセット化

PDF-LIBではデフォルトでフォントがサブセット化されずに埋め込まれていて、サブセット化するには明示的に指定する必要がありました。以下のエントリーではたぬき油性マジックを埋め込んだPDFが5.3MBになっていて、それをサブセット化したら7KBになったようです。

私はNotoSansMonoCJKjp-Regular.otfを利用していて、それがそのままPDFに埋め込まれてしまったようです。以下のようなコードでフォントの埋め込みのサブセット化を有効にします。

const font = await pdfDoc.embedFont(fontBytes, { subset: true });

サブセット化の失敗

サブセット化を有効にしたのですが、今度はPDFにフォントが埋め込まれずに文字が出力されなくなってしまいました。以下のエントリーではこの問題についてまとめられていました。

解決方法

fontkitを修正してフォントのサブセット化を実現する方法もあるようですが、たぬき油性マジックではフォントのサブセット化ができていたことから、サブセット化がうまくいくフォントを調べて利用するという解決方法もあるかと思いました。

こういう時はIPAフォントかなと思い、IPAexゴシック(Ver.004.01)をダウンロードしました。

IPAexゴシックではフォントのサブセット化がうまくいき、PDFのファイルサイズを小さくすることができました。

その他に利用可能だったフォント

私の場合、これまでNotoSansMonoCJKjp-Regular.otfを利用してきました。IPAexゴシックだとフォントの感じが少し違っていたため、PDF-LIBでサブセット化が有効になる他のフォントをさがしました。

源真ゴシックに等幅フォントがあり、PDF-LIBでサブセット化も大丈夫だったので、これを利用することにしました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?