iText でサポートされているフォント
PDF Reference Manual の第5章の最初で、テキストステートが扱われており、(5.4
節から始まる)第二部でフォントが説明されています。iText で Font オブジェクトを扱う方法を知りたいのならば、Font
オブジェクトの章を先に読んでください。この章では、必要なフォントがどこにあるかを説明します。
先頭に戻る
ビルトインフォント
PDF
は、14個の標準フォントについては、前提なしに使用できると規定しています。これらは、三つのラテン文字のタイプフェースがそれぞれ四つのフェースを持ったもの、および、二つの特殊文字フォント(Symbol
と ITC Zapf Dingbats ®)です。これらのフォント、あるい同じメトリクスである利用可能な代替フォントは、すべての
PDF エンドユーザアプリケーションで利用能と考えてよい。
これらの、'Base14 Fonts'は歴史的には、iText で最初にサポートされたフォントです。iText.jar の中を見てみれば、com/lowagie/text/pdf/fonts ディレクトリにこれらのフォントの AFM ファイルが見つかります。AFM は、Adobe の ASCII ベースのファイルフォーマットでありフォントのメトリックス情報が可読データとして保存するために使われています。iText では、これらのファイルを読むことにより、幅、カーニング、そのほか文字(正しくはグリフ)のメトリックスに関係する情報を得ます。
同じタイプフェース(Courier、Helvetica、Times
Roman)の異なるフェース(標準、太字、斜体、太字斜体)は、異なるフォントして取り扱われます。
先頭に戻るこれらの、'Base14 Fonts'は歴史的には、iText で最初にサポートされたフォントです。iText.jar の中を見てみれば、com/lowagie/text/pdf/fonts ディレクトリにこれらのフォントの AFM ファイルが見つかります。AFM は、Adobe の ASCII ベースのファイルフォーマットでありフォントのメトリックス情報が可読データとして保存するために使われています。iText では、これらのファイルを読むことにより、幅、カーニング、そのほか文字(正しくはグリフ)のメトリックスに関係する情報を得ます。
| Font | AFM file |
|---|---|
| Courier | Courier.afm |
| Courier Bold | Courier-Bold.afm |
| Courier Italic (Oblique) | Courier-Oblique.afm |
| Courier Bold と Italic | Courier-BoldOblique.afm |
| Helvetica | Helvetica.afm |
| Helvetica Bold | Helvetica-Bold.afm |
| Helvetica Italic (Oblique) | Helvetica-Oblique.afm |
| Helvetica Bold と Italic | Helvetica-BoldOblique.afm |
| Times Roman | Times-Roman.afm |
| Times Roman Bold | Times-Bold.afm |
| Times Roman Italic | Times-Italic.afm |
| Times Roman Bold と Italic | Times-BoldItalic.afm |
| Symbol | Symbol.afm |
| ZapfDingBats® | ZapfDingbats.afm |
Fonts from files:
TTF ファイル (TrueType フォント)
TrueType フォントフォーマットは、Apple Computer、Inc.により開発され、Microsoft
Windows オペレーティングシステムの標準フォントフォーマットとして採用されています。'C:/WINDOWS/FONTS'
ディレクトリにたくさんの TTF ファイルを見ることができます。これらのフォントは iText
で読むことができます。これは、どのオペレーティングシステムを使っているかは問題ではなく、フォントに残っている著作権を侵害していない限り(このような場合、iText
は例外を発生します)、INUX や Apple のコンピュータの TTF ファイルも使うことができます。
フォントファイルの登録
BaseFont を作成して
Font
オブジェクトにラップする代わりに、FontFactory
を使うことができます。これは、Font オブジェクトを取得する、もっとも安定した方法です。残念ながら、FontFactory
は、どこに(TTF
およびその他の)フォントファイルが保存されているのか知りません。そのため、使用する前にフォントを登録しなければなりません。FontFactory.register("c:\\windows\\fonts\\comic.ttf");
FontFactory.register("c:\\windows\\fonts\\msgothic.ttc");
register(java.lang.String) でフォントを登録したら、フォント名でフォントを取得できるようになります。getRegisteredFonts()
で FontFactory
に登録したすべてのフォントを問い合わすことができます。フォント名を自身で定義したいのならば、別名をつけて登録し(register(java.lang.String, java.lang.String))、実際のフォント名の変わりにその別名を使うだけです。
Example: java
com.lowagie.examples.fonts.getting.RegisterFont
Registering Fonts with the FontFactory: see registerfont.pdf registered.txt
FontFactory クラスのすべてのメソッドはスタティックであることは、気をつけてください。同じ JVM
に異なるアプリケーションがあると、予想していた以上のフォントが見つかるかもしれません。Registering Fonts with the FontFactory: see registerfont.pdf registered.txt
フォントスタイルそれぞれについて異なるフォントがあるといったことを覚えていますが? スタイルを変更するたびにフォントを切り替えるのは、難しいかもしれません。ある場合には、fontitalic を探さなければならないし、あるときには fontoblique を探さなくてはなりません。あらかじめ同じフォントファミリーのすべてのスタイルを登録しておくと、FontFactory はスタイルに対応したフォントを自動的に取り出します。
Example: java
com.lowagie.examples.fonts.getting.FontFactoryStyles
Changing the style of a fontfactory font: see fontfactorystyles.pdf
もちろん、新しいフォントが必要になるたびにディスクにあるフォントファイルの場所を指定するというのでは、とても親切設計とはいえません。そこで、registerDirectory(java.lang.String)
です。このメソッドは、ディレクトリにあるすべてのフォントを登録することができます。この方法では、同じファミリの標準、太字、斜体、太字斜体の正確な名前を知っておく必要はない。このメソッドは、c:\windows\fonts、/usr/X/lib/X11/fonts/TrueType、/usr/X11R6/lib/X11/fonts/ttf、などのいくつかのありえそうなディレクトリを探しに行きます。(註:iText.NET
では、レジストリからディレクトリの場所を決定します。)これで、ほとんどのWindows、Linux および Solaris
で動作します。(そうでない場合は、フォントファイルを自分で登録しなければなりません。)次の例で、コンピュータ上の標準ディレクトリで利用可能なフォントを見ることができます。Changing the style of a fontfactory font: see fontfactorystyles.pdf
Example: java
com.lowagie.examples.fonts.getting.UsingFontFactory
Sums up the Fonts that are available in some standard font directories on your system: see FontFactory.pdf
Sums up the Fonts that are available in some standard font directories on your system: see FontFactory.pdf
TTC ファイル (TrueType コレクション)
TrueType Collection には、ひとつ以上のフォントが含まれています。例をみてわかるように、TTC
ファイルの後ろにどのフォントを使うかの番号が付け加えられています。ある TTC ファイルのフォントの名前がわかっているのならば、enumerateTTCNames(java.lang.String)
メソッドを使うことができます。msgothic.ttc ファイルには、(0) MS-Gothic、(1) MS-PGothic と (2) MS-UIGothic
の三つのフォントが含まれています。例では、MS-PGothic を使いたいので、パスに 1 を付け加えています。BaseFont.createFont( "c:\\windows\\fonts\\msgothic.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);この例は、フォントディレクトリに msgothic.ttc ファイルがないと動作しません。このフォントは、デフォルトではインストールされていません。この例を実行したいならば、Windows のインストール CD からこのファイルを抜き出して、フォントディレクトリに入れなければなりません。
Example: java
com.lowagie.examples.fonts.getting.TrueTypeCollections
True Type Collections: see truetypecollections.pdf msgothic.txt
True Type Collections: see truetypecollections.pdf msgothic.txt
OTF ファイル (OpenType フォント)
OpenType は、Microsoft と Adobe
が共同で開発したクロスプラットフォームフォントフォーマットです。これは、フォント管理を単純化し、新しい印刷上の可能性と、多言語サポートを向上させます。Microsoft
も Adobe も、将来的に TrueType や Type 1 フォントフォーマットを置き換えると宣言しており、Adobe
は、すでに、Adobe Type Library をこのフォーマットに置き換えています。
Example: java
com.lowagie.examples.fonts.getting.OpenTypeFont
Using an Open Type Font with Compact Font Format (CFF) data only (no true type outlines): see opentypefont.pdf
External resources for this example: liz.otf
Using an Open Type Font with Compact Font Format (CFF) data only (no true type outlines): see opentypefont.pdf
External resources for this example: liz.otf
AFM ファイル (Adobe フォントメトリックス)
iText.jar にある基本14フォントの AFM ファイル以外の .AFM あるいは .PFB
ファイルがあれば、その同じディレクトリ (com/lowagie/text/pdf/fonts)
にコピーし、次のように使うことができます。BaseBont bf = BaseFont.createFont("myfont.afm"、BaseFont.WINANSI、BaseFont.EMBEDDED);
しかし、可能ならば、TrueType フォントを使いましょう。TrueType
フォントは、サブセットを埋め込むことができるので、得られる文書は、非常に小さくなります。
jar (およびフォントパック) からフォントを取得する
CID フォントは、Postscript
ベースのフォントであり、非常に多くの文字数(最大65,536)をサポートしています。このフォーマットは CJK フォント(CJK =
Chinese Japanese Korean) に良く使われます。CID
フォーマットは、フォント外部の文字-グリフテーブル(CMaps)の使用により文字の順序(エンコーディング)を変更することができます。
iText で、CJK フォントを使いたいならば、拡張 jar iTextAsian.jar が必要です。iText によって生成した CJK フォントを使ったテキストを読むならば、特別な Acrobat Reader フォントパックをダウンロード、インストールすることが必要です。(CJK フォントを含む PDF ファイルを開くときに、Reader が問い合わせるでしょう。)iTextAsian.jar によってサポートされているCJK フォントをインスタンス化することに関しては、他のフォントと同じぐらい容易です。
先頭に戻る
iText で、CJK フォントを使いたいならば、拡張 jar iTextAsian.jar が必要です。iText によって生成した CJK フォントを使ったテキストを読むならば、特別な Acrobat Reader フォントパックをダウンロード、インストールすることが必要です。(CJK フォントを含む PDF ファイルを開くときに、Reader が問い合わせるでしょう。)iTextAsian.jar によってサポートされているCJK フォントをインスタンス化することに関しては、他のフォントと同じぐらい容易です。
BaseFont bfChinese = BaseFont.createFont("STSong-Light"、"UniGB-UCS2-H"、BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese、12、Font.NORMAL);
Paragraph p = new Paragraph(chinese、FontChinese);
document.add(p);
縦書きテキストの書き方を知りたいならば、方向の部を参照してください。
Example: java
com.lowagie.examples.fonts.getting.ChineseJapaneseKorean
Using CJK Fonts: see cjk.pdf
Extra jars needed in your CLASSPATH: iTextAsian.jar
iTextAsian.jar でサポートされているのは次の通りです。Using CJK Fonts: see cjk.pdf
Extra jars needed in your CLASSPATH: iTextAsian.jar
- 簡字体中国語
STSong-Light と STSongStd-Light、エンコーディングは、UniGB-UCS2-H と UniGB-UCS2-V - 繁字体中国語
MHei-Medium、MSung-Light と MSungStd-Light エンコーディングは、UniCNS-UCS2-H と UniCNS-UCS2-V - 日本語
HeiseiMin-W3、HeiseiKakuGo-W5 と KozMinPro-Regular エンコーディングは、UniJIS-UCS2-H、UniJIS-UCS2-V、UniJIS-UCS2-HW-H と UniJIS-UCS2-HW-V - 韓国語
HYGoThic-Medium、HYSMyeongJo-Medium と HYSMyeongJoStd エンコーディングは、UniKS-UCS2-H と UniKS-UCS2-V
CID フォント
しかし、こればすべてではありません。iTextAsianCmaps.jar
という拡張 jar があります。これには、他の多くの CID フォントの cmaps が含まれています。次に、使い方を示します。
PdfEncodings.loadCmap(
"GBK2K-H",
PdfEncodings.CRLF_CID_NEWLINE); // needs to be done only once
byte text[] = my_GB_encoded_text;
String cid = PdfEncodings.convertCmap("GBK2K-H"、text);
BaseFont bf = BaseFont.createFont("STSong-Light"、"Identity-H"、false);
Paragraph p = new Paragraph(cid、new Font(bf、14));
document .add(p);