fbpx
< 戻る
印刷

PDF フォントの仕組みと表示方法

この記事では、PDF フォントの仕組みと JPedal での表示方法について説明します。

フォントの埋め込みとは何ですか?

PDF ファイルには 2 種類のフォントを含めることができます。
埋め込みPDF フォントには、すべてのフォント文字を描画するための実際の詳細がすべて含まれていますが、非埋め込みフォントにはフォントの名前のみが含まれており、システムがそのフォントを利用できる環境にあることを期待しています。

フォントを埋め込むと、PDF ファイルが大きくなります。
過去の PDF の仕様では 14 フォントが許可されていましたが、PDF の仕様が改訂されてから(バージョン 1.7 以降)は、以下の 5 フォントのみに減りました。

  • Courier
  • Courier-Bold
  • Courier-BoldOblique
  • Courier-Oblique
  • Symbol

PDF ファイルに埋め込みフォントが含まれているかどうかは、JPedal Viewer または Acrobat で開き、フォントのリストを見ることでわかります。 JPedal Java Viewer で PDF ファイルを開き、[ファイル] – [ドキュメントのプロパティ] – [フォント] タブを選択します。

JPedal は PDF フォントをどのように処理しますか?

PDF ファイルにフォントが埋め込まれている場合、JPedal は PDF ファイル内のフォント情報を使用して表示します。これを上書きすることはできません。埋め込まれていない PDF フォントの場合、JPedal は、Java で使用できる一致する PDF フォント名を持つフォントを検索するか、標準フォントに置き換えて、PDF を表示できるようにします。これらのフォントは常に適切に一致するとは限らないため、最良の結果を得るにはフォントの置換をお勧めします。フォントがサブセット化されている場合、フォントを置き換えることができない場合があります。

CIDフォント

一部の PDF ファイルには、埋め込まれていない CID フォント ファイルが含まれている場合があります (PDF は Adob​​e Acrobat で表示され、必要な言語パックがダウンロードされることが前提です)。この場合、次のようなメッセージが表示されます。フォントをインストールするには、Adobe Acrobat でファイルを開く必要がある場合があります。JPedal はそれらを見つけることができるようになります。この場合、フォント (Adobe によってダウンロードされます) を見つけて、以下で説明する手法を使用してそれらのマッピングを試みる必要があります。

JPedal での PDF フォントの置換

JPedal にはフォント置換と呼ばれる追加操作があり、JPedal が不足しているフォント (埋め込まれている必要がある) をローカル フォントに置き換えることができます。これは非 CID フォントでのみ機能します。ほとんどのコンピュータには、Java で利用できるフォントよりもはるかに多くのフォントがインストールされています。したがって、JPedal には、これらのフォントを表示に使用するオプションもあり、フォントが PDF 内に埋め込まれているかのように扱われます。これは、Java PDF ビューアの例内のいくつかの一般的な例に対してすでに設定されています。FontMappingsクラスは、Windows および Mac 上の非埋め込みフォントの一般的なフォント置換をすべて設定します。すべてのコード例には、それをオンにするための以下の Java 行が含まれています。

				
					//mappings for non-embedded fonts to use
FontMappings.setFontReplacements();
				
			

単一のフォントを手動で再マップするには (埋め込まれていない場合)

				
					//replace Century and CenturyGothic with any installed Arial if not embedded
String[] aliases={"Century","CenturyGothic"}; //(all names are case-insensitive)
FontMappings.setSubstitutedFontAliases("arial",aliases);
				
			

Linux には、JPedal が使用できるフォントを含む明確に定義されたフォントの場所がありません。この問題を解決する方法については、このページの下部にある項目を参照してください。

フォントはどのようにマッピングされるのか

フォント マッピングでは大文字と小文字が区別されないため、Arial と arial は同じフォントになります。このオプションは、FontMappings クラスのメソッド public static void setFontSubstitutionMode(int mode) を使って最初に設定する必要があります。この mode は PdfDecoder の SUBSTITUTE_* の値です。

ファイル名 (デフォルト)

これにより、サフィックスのないフォントファイルの名前を使用してフォントがマップされます。したがって、フォントファイル arial.ttf は、PDF 内の Arial の非埋め込みテキストを表示するために使用されます。

Postscript名

PDF ファイル内にある Postscript 名を使用します。したがって、フォントファイル myFile.ttf は実際には Postscript 名 ComicSans を持ち、ComicSans の非埋め込みテキストはこれを使用する可能性があります。

完全なファミリー名

ファイル内にある完全なファミリー名を使用します。したがって、フォントファイル myFile.ttf には実際には ComicSans というファミリー名があり、ComicSans の非埋め込みテキストはこれを使用することになります。

Postscript名(重複する場合は完全なファミリー名)

一意である限り、ファイル内にある Postscript 名を使用します。したがって、フォント ファイル myFile.ttf は、実際には Postscript 名「arial」およびファミリー名「arialsup」を持つ可能性があります。「arial」は一意ではないため、「arialsup」が使用されますが、PDF 内でフォントの名前が正しく指定されている必要があります。重要な注意Truetype フォント コレクションには複数の Truetype フォントが含まれる場合があるため、これらを使用している場合はマッピングで Postscript 名を使用する必要があります。これらすべてのオプションを簡単に見つけられるように、[情報] ボックスの利用可能なタブにすべての情報が表示されます。リストプロパティのサンプルコードをいくつかご覧ください

どのようなフォントが使用できるのでしょうか?

JPedal では、以下のフォントファイルをフォント置換に使用できます。

  • ファイルの末尾が.ttfである TrueType フォント(つまり、arial.ttf)
  • ファイルの末尾が.otfである OpenType フォント(つまり、arial.otf)
  • ファイル末尾が.ttc (つまり、arial.ttc)である TrueType フォント コレクション
  • pfb または .pfa で終わる Type1 フォントファイル。(バージョン 3.76 以降)

フォントはどのように追加されますか。

PDF ビューア、PDF 印刷、PDF から画像への変換の例では、次に示すコードを呼び出して、非埋め込みフォント共通のデフォルトを設定しています。したがって、独自のコードを作成している場合は、PdfDecoder のインスタンスを作成した後にこの呼び出しをコードに追加するだけで済みます。

				
					//mappings for non-embedded fonts to use
FontMappings.setFontReplacements();
				
			

フォントを手動で追加する

JPedal が使用するフォントを含む新しいディレクトリを追加できます。これらのメソッドを繰り返し呼び出してフォントを追加できます。フォント名はキーとして使用されるため、重複するフォント名は以前の設定をオーバーライドします。

JVM フラグを介してフォントの新しいディレクトリを追加するには、JVM フラグ -Dorg.jpedal.fontdirs=dirList を設定します。ここでの dirList は、使用可能なディレクトリのカンマ区切りのリストです。詳細については、「JVM オプション」を参照してください。

メソッド呼び出しを使用してフォントのディレクトリ全体を追加するには、FontMappings メソッド setFontDirs(String[] paths) を使用します。ここでの path は可能な場所の配列です。これらの場所はすべてローカルファイルシステム上に存在する必要があり (jar: または http: プロトコルはサポートされていません)、クロスプラットフォームな設定を提供する必要があります。

Linux/Unix ユーザー向けの重要な注意事項

Windows と MacOS では、フォントの場所が明確に定義されています。Linux には、JPedal が置換に使用できるフォントを含む明確に定義されたフォントの場所がありません。Linux ボックスでの最良の解決策は、いくつかのフォントを追加する ttf-mscorefonts-installer パッケージ (システムで sudo apt-get install ttf-mscorefonts-installer) をインストールすることです。これらのフォントが存在する場合、JPedal は自動的にそれを使用します。

それ以外の場合は、Windows マシンから Windows フォント ディレクトリをコピーし、次のコマンドを使用して JPedal にそのディレクトリを指定します。

				
					FontMappings.setFontDirs(new String[] { "/home/yourDir/fonts/" });
				
			
    MENU
    PAGE TOP