Field Reports 1.4から OpenType/TrueTypeフォントの埋め込みが可能になりました。
この記事では,Field Reports 1.4を使ってフォント埋め込みを行う手順を解説します。
フォント埋め込みとは
PDFファイルにフォントの字形(グリフ)データを埋め込む機能です。
フォントを埋め込まない場合,PDFを受け取った相手のコンピュータに同じフォントがインストールされていないと,異なったフォント(代替フォント)で表示されます。最悪の場合,代替フォントを見つけることもできず,文字化けが発生します。
PDFにフォントを埋め込むことで,特殊なフォントを利用してもPDFを送付した相手に確実に伝達できるようになります。
例えば,毛筆体フォントなどのデザインを重視したフォント,ORCフォント・バーコードフォントのように正確な再現が必須となるフォントを使用する場合に役に立ちます。
グリフデータを埋め込むことでPDFのファイルサイズが増えますが,「サブセット化」を有効にすることで,最小限の増加に留めることができます。
フォントファイルの用意
まずは,PDFに埋め込むOpenTypeまたはTrueTypeフォントのファイルを用意します。
フォントファイルを入手する手段として,大別して以下の3通りがあります。
- OS標準搭載のフォントを使う
- 無料で配布されているフォントを使う
- 業者から購入する
無償フォントであっても商用利用には別途費用が発生するものや
「商用利用可」となっていてもサーバサイドでの利用を禁じているフォントもあります。
利用に際しては,それぞれのフォントの利用規約をよく確認してください。
フォントリソースの定義
次に,レンダリングパラメータでフォントリソースを定義します。
フォントリソースは,resources辞書内のfont要素として記述します。
表:font属性辞書のエントリ
キー名 | 型 | 意味 |
---|---|---|
src |
URL文字列 |
フォントファイルのURLを指定します。 |
embed |
真偽値 |
(オプション)フォントをPDFに埋め込むかどうかの指定をします。省略値:true |
subset |
真偽値 |
(オプション;embedがtrueの場合のみ有効)フォントをPDFに埋め込む際にサブセット化を行うかどうかの指定をします。省略値:true |
ttc-index |
整数 |
(オプション;TTCフォントの場合のみ有効)TTCフォントのインデックス番号を指定します。 省略値:0 |
writing-mode |
列挙値 |
(オプション)テキストの組み方向を規定します。 HorizontalTb:横組み。行送り方向は上から下。 VerticalRl:縦組み。行送り方向は右から左。 省略値:HorizontalTb |
フォントの指定
個々のテキストフィールドのfont属性で,定義したフォントリソースの名前を指定します。
フォントリソースにおいてサブセット化が有効な場合,テキストフィールドで実際に使用されている文字が集計され,必要なフォントデータのみがフォントから抽出されてPDFに埋め込まれます。
実行例
以下に,レンダリングパラメータの記述例と,実行結果を示します。
{
"resources": {
"font": {
"Tanuki-Permanent-Marker": {
"src": "./TanukiMagic.ttf",
"embed": true,
"subset": true
}
}
},
"template": {"paper": "A4"},
"context": {
"text": [
{
"new": "Tx",
"font": "Tanuki-Permanent-Marker",
"rect": [50, 250, 550, 800],
"value": "春は、あけぼの。やうやう白くなりゆく山ぎは 少し明りて紫だちたる雲の細くたなびきたる。\n夏は、夜。月の頃はさらなり。闇もなほ。螢の多く飛び違ひたる。また、ただ一つ二つなど、ほのかにうち光りて行くもをかし。雨など降るもをかし。\n秋は、夕暮。夕日のさして、山の端(は)いと近うなりたるに、烏の寝どころへ行くとて、三つ四つ、二つ三つなど、飛び急ぐさへあはれなり。まいて雁などの連ねたるがいと小さく見ゆるは、いとをかし。日入り果てて、風の音、虫の音など、はたいふべきにあらず。\n冬は、つとめて。雪の降りたるはいふべきにもあらず。霜のいと白きも、またさらでも、いと寒きに、火など急ぎ熾して、炭もて渡るも、いとつきづきし。昼になりて、ぬるくゆるびもていけば、火桶の火も、白き灰がちになりて、わろし。"
}
]
},
"style": [
{"*": {"permanent": true}},
{"text.*": {"border-width": 1, "multiline": true, "font-size": 20, "padding": 20, "hyphens": "None", "line-height": 1.5, "text-align": "Justify"}}
]
}