PicoPDF

PDFのフォント 🔗

PDFで使用できるフォントは複数種類ある。
OpenType(TrueType、CFF)を使用する場合はType 0フォントを使用する。

名前 説明
Type 0フォント 複合フォント、CIDフォントなどを持つ
Type 1フォント タイプ1フォント、使用できるのは1バイト範囲のみ、Adobe製品ではサポートが終了している
MMType 1フォント マルチプルマスタータイプ1フォント、Adobe製品ではサポートが終了している
Type 3フォント ビットマップ画像やPostScript形式
TrueType TrueType、使用できるのは1バイト範囲のみ、2バイト以上の文字を扱う場合はType 0フォントを利用する
CIDFontType0 OpenType(CFF)形式のCIDフォント
CIDFontType2 OpenType(TrueType)形式のCIDフォント

Type 0フォント 🔗

Type 0フォントは複数のフォントを持つことができるフォントである。
ただし、PDFにおいては1つのCIDFontフォントのみとなっている。
OpenTypeフォントを扱うためのフォントと考えて差し支えない。

キー 説明
Type name 必須、/Font固定
Subtype name 必須、/Type0固定
BaseFont name 必須、フォントのPostScript名
CIDFontType0のCIDフォントを持つ場合は「CIDフォントのBaseFont名-Encodingエントリ名かCMapName名」を指定
CIDFontType2のCIDフォントを持つ場合は「CIDフォントのBaseFont名」を指定
Encoding name or stream 必須、定義済みのCMap名
DescendantFonts array 必須、CIDFont辞書、必ず要素が1つの配列にする
ToUnicode stream CIDをUnicodeコード値にマッピングするCMapストリーム

DescendantFonts 🔗

CIDFont辞書情報になる。
OpenTypeのTrueType形式、CFF形式で設定する内容が異なる。

キー 説明
Type name 必須、/Font固定
Subtype name 必須、OpenType(CFF)形式の場合/CIDFontType0、OpenType(TrueType)形式の場合/CIDFontType2
BaseFont name 必須、PostScript名
CIDSystemInfo dictionary 必須、CIDFontの文字コレクションを定義するエントリを含む辞書
FontDescriptor dictionary(間接参照でないといけない) 必須、CIDFontのグリフ幅以外のデフォルトメトリクスを記述するフォント記述子
DW integer デフォルトの幅、初期値は1000
W array CIDFont内のグリフの幅

OpenTypeにも文字幅の情報を持っているが、別途Wで指定する必要がある。

CIDSystemInfo 🔗

PicoPDFではOpenTypeの文字は文字コードで指定せず、GIDで指定するためAdobe-Identity-0のみを使用する。

キー 説明
Registry ASCII string 必須、文字コレクションの発行元、例:Adobe
Ordering ASCII string 必須、文字コレクションの名前、例:Japan1
Supplement integer 必須、文字コレクションの補足番号

FontDescriptor 🔗

Type 0フォントで必須のもののみ説明する。

キー 説明
Type name 必須、/FontDescriptor固定
FontName name 必須、PostScript名
FontBBox rectangle 必須、全てのグリフがおさまる最小矩形
ItalicAngle number 必須、斜体の角度、反時計回りの角度で指定
Ascent number 必須、ベースラインからの最大高さ
Descent number 必須、ベースラインからの最大深度、負の数となる
CapHeight number ラテン文字を含むフォントで必須、水平な大文字のベースラインからの高さ
StemV number 必須、垂直ステムの横幅
FontFile2 stream TrueType形式フォントを埋め込んだ場合のストリーム
FontFile3 stream CFF形式フォントを埋め込んだ場合のストリーム

サブセットフォント 🔗

OpenType形式のフォントをPDFに埋め込むことができる。
ただし、日本語のフォントファイルであれば数万種が格納されているため、PDFファイルサイズが肥大化する。
そのため、サブセットフォント化して埋め込みたい。

下記はサブセットフォント化したグリフのみを含んだサンプルである。